From 50877b1b383d6d9d4983f7ff1e0c2898c9d8704c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 30 Nov 2023 23:47:51 +0000 Subject: [PATCH 001/460] build(deps): bump aiohttp from 3.8.6 to 3.9.0 Bumps [aiohttp](https://github.com/aio-libs/aiohttp) from 3.8.6 to 3.9.0. - [Release notes](https://github.com/aio-libs/aiohttp/releases) - [Changelog](https://github.com/aio-libs/aiohttp/blob/master/CHANGES.rst) - [Commits](https://github.com/aio-libs/aiohttp/compare/v3.8.6...v3.9.0) --- updated-dependencies: - dependency-name: aiohttp dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- poetry.lock | 487 ++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 393 insertions(+), 94 deletions(-) diff --git a/poetry.lock b/poetry.lock index 58dd309df..9cae95caa 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,112 +1,100 @@ -# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. [[package]] name = "aiohttp" -version = "3.8.6" +version = "3.9.0" description = "Async http client/server framework (asyncio)" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "aiohttp-3.8.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:41d55fc043954cddbbd82503d9cc3f4814a40bcef30b3569bc7b5e34130718c1"}, - {file = "aiohttp-3.8.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1d84166673694841d8953f0a8d0c90e1087739d24632fe86b1a08819168b4566"}, - {file = "aiohttp-3.8.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:253bf92b744b3170eb4c4ca2fa58f9c4b87aeb1df42f71d4e78815e6e8b73c9e"}, - {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3fd194939b1f764d6bb05490987bfe104287bbf51b8d862261ccf66f48fb4096"}, - {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6c5f938d199a6fdbdc10bbb9447496561c3a9a565b43be564648d81e1102ac22"}, - {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2817b2f66ca82ee699acd90e05c95e79bbf1dc986abb62b61ec8aaf851e81c93"}, - {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fa375b3d34e71ccccf172cab401cd94a72de7a8cc01847a7b3386204093bb47"}, - {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9de50a199b7710fa2904be5a4a9b51af587ab24c8e540a7243ab737b45844543"}, - {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e1d8cb0b56b3587c5c01de3bf2f600f186da7e7b5f7353d1bf26a8ddca57f965"}, - {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8e31e9db1bee8b4f407b77fd2507337a0a80665ad7b6c749d08df595d88f1cf5"}, - {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:7bc88fc494b1f0311d67f29fee6fd636606f4697e8cc793a2d912ac5b19aa38d"}, - {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ec00c3305788e04bf6d29d42e504560e159ccaf0be30c09203b468a6c1ccd3b2"}, - {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ad1407db8f2f49329729564f71685557157bfa42b48f4b93e53721a16eb813ed"}, - {file = "aiohttp-3.8.6-cp310-cp310-win32.whl", hash = "sha256:ccc360e87341ad47c777f5723f68adbb52b37ab450c8bc3ca9ca1f3e849e5fe2"}, - {file = "aiohttp-3.8.6-cp310-cp310-win_amd64.whl", hash = "sha256:93c15c8e48e5e7b89d5cb4613479d144fda8344e2d886cf694fd36db4cc86865"}, - {file = "aiohttp-3.8.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6e2f9cc8e5328f829f6e1fb74a0a3a939b14e67e80832975e01929e320386b34"}, - {file = "aiohttp-3.8.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e6a00ffcc173e765e200ceefb06399ba09c06db97f401f920513a10c803604ca"}, - {file = "aiohttp-3.8.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:41bdc2ba359032e36c0e9de5a3bd00d6fb7ea558a6ce6b70acedf0da86458321"}, - {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14cd52ccf40006c7a6cd34a0f8663734e5363fd981807173faf3a017e202fec9"}, - {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2d5b785c792802e7b275c420d84f3397668e9d49ab1cb52bd916b3b3ffcf09ad"}, - {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1bed815f3dc3d915c5c1e556c397c8667826fbc1b935d95b0ad680787896a358"}, - {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96603a562b546632441926cd1293cfcb5b69f0b4159e6077f7c7dbdfb686af4d"}, - {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d76e8b13161a202d14c9584590c4df4d068c9567c99506497bdd67eaedf36403"}, - {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e3f1e3f1a1751bb62b4a1b7f4e435afcdade6c17a4fd9b9d43607cebd242924a"}, - {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:76b36b3124f0223903609944a3c8bf28a599b2cc0ce0be60b45211c8e9be97f8"}, - {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:a2ece4af1f3c967a4390c284797ab595a9f1bc1130ef8b01828915a05a6ae684"}, - {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:16d330b3b9db87c3883e565340d292638a878236418b23cc8b9b11a054aaa887"}, - {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:42c89579f82e49db436b69c938ab3e1559e5a4409eb8639eb4143989bc390f2f"}, - {file = "aiohttp-3.8.6-cp311-cp311-win32.whl", hash = "sha256:efd2fcf7e7b9d7ab16e6b7d54205beded0a9c8566cb30f09c1abe42b4e22bdcb"}, - {file = "aiohttp-3.8.6-cp311-cp311-win_amd64.whl", hash = "sha256:3b2ab182fc28e7a81f6c70bfbd829045d9480063f5ab06f6e601a3eddbbd49a0"}, - {file = "aiohttp-3.8.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:fdee8405931b0615220e5ddf8cd7edd8592c606a8e4ca2a00704883c396e4479"}, - {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d25036d161c4fe2225d1abff2bd52c34ed0b1099f02c208cd34d8c05729882f0"}, - {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d791245a894be071d5ab04bbb4850534261a7d4fd363b094a7b9963e8cdbd31"}, - {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0cccd1de239afa866e4ce5c789b3032442f19c261c7d8a01183fd956b1935349"}, - {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f13f60d78224f0dace220d8ab4ef1dbc37115eeeab8c06804fec11bec2bbd07"}, - {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8a9b5a0606faca4f6cc0d338359d6fa137104c337f489cd135bb7fbdbccb1e39"}, - {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:13da35c9ceb847732bf5c6c5781dcf4780e14392e5d3b3c689f6d22f8e15ae31"}, - {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:4d4cbe4ffa9d05f46a28252efc5941e0462792930caa370a6efaf491f412bc66"}, - {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:229852e147f44da0241954fc6cb910ba074e597f06789c867cb7fb0621e0ba7a"}, - {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:713103a8bdde61d13490adf47171a1039fd880113981e55401a0f7b42c37d071"}, - {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:45ad816b2c8e3b60b510f30dbd37fe74fd4a772248a52bb021f6fd65dff809b6"}, - {file = "aiohttp-3.8.6-cp36-cp36m-win32.whl", hash = "sha256:2b8d4e166e600dcfbff51919c7a3789ff6ca8b3ecce16e1d9c96d95dd569eb4c"}, - {file = "aiohttp-3.8.6-cp36-cp36m-win_amd64.whl", hash = "sha256:0912ed87fee967940aacc5306d3aa8ba3a459fcd12add0b407081fbefc931e53"}, - {file = "aiohttp-3.8.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e2a988a0c673c2e12084f5e6ba3392d76c75ddb8ebc6c7e9ead68248101cd446"}, - {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebf3fd9f141700b510d4b190094db0ce37ac6361a6806c153c161dc6c041ccda"}, - {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3161ce82ab85acd267c8f4b14aa226047a6bee1e4e6adb74b798bd42c6ae1f80"}, - {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d95fc1bf33a9a81469aa760617b5971331cdd74370d1214f0b3109272c0e1e3c"}, - {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c43ecfef7deaf0617cee936836518e7424ee12cb709883f2c9a1adda63cc460"}, - {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca80e1b90a05a4f476547f904992ae81eda5c2c85c66ee4195bb8f9c5fb47f28"}, - {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:90c72ebb7cb3a08a7f40061079817133f502a160561d0675b0a6adf231382c92"}, - {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bb54c54510e47a8c7c8e63454a6acc817519337b2b78606c4e840871a3e15349"}, - {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:de6a1c9f6803b90e20869e6b99c2c18cef5cc691363954c93cb9adeb26d9f3ae"}, - {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:a3628b6c7b880b181a3ae0a0683698513874df63783fd89de99b7b7539e3e8a8"}, - {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:fc37e9aef10a696a5a4474802930079ccfc14d9f9c10b4662169671ff034b7df"}, - {file = "aiohttp-3.8.6-cp37-cp37m-win32.whl", hash = "sha256:f8ef51e459eb2ad8e7a66c1d6440c808485840ad55ecc3cafefadea47d1b1ba2"}, - {file = "aiohttp-3.8.6-cp37-cp37m-win_amd64.whl", hash = "sha256:b2fe42e523be344124c6c8ef32a011444e869dc5f883c591ed87f84339de5976"}, - {file = "aiohttp-3.8.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:9e2ee0ac5a1f5c7dd3197de309adfb99ac4617ff02b0603fd1e65b07dc772e4b"}, - {file = "aiohttp-3.8.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:01770d8c04bd8db568abb636c1fdd4f7140b284b8b3e0b4584f070180c1e5c62"}, - {file = "aiohttp-3.8.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3c68330a59506254b556b99a91857428cab98b2f84061260a67865f7f52899f5"}, - {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89341b2c19fb5eac30c341133ae2cc3544d40d9b1892749cdd25892bbc6ac951"}, - {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71783b0b6455ac8f34b5ec99d83e686892c50498d5d00b8e56d47f41b38fbe04"}, - {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f628dbf3c91e12f4d6c8b3f092069567d8eb17814aebba3d7d60c149391aee3a"}, - {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b04691bc6601ef47c88f0255043df6f570ada1a9ebef99c34bd0b72866c217ae"}, - {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ee912f7e78287516df155f69da575a0ba33b02dd7c1d6614dbc9463f43066e3"}, - {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9c19b26acdd08dd239e0d3669a3dddafd600902e37881f13fbd8a53943079dbc"}, - {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:99c5ac4ad492b4a19fc132306cd57075c28446ec2ed970973bbf036bcda1bcc6"}, - {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:f0f03211fd14a6a0aed2997d4b1c013d49fb7b50eeb9ffdf5e51f23cfe2c77fa"}, - {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:8d399dade330c53b4106160f75f55407e9ae7505263ea86f2ccca6bfcbdb4921"}, - {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ec4fd86658c6a8964d75426517dc01cbf840bbf32d055ce64a9e63a40fd7b771"}, - {file = "aiohttp-3.8.6-cp38-cp38-win32.whl", hash = "sha256:33164093be11fcef3ce2571a0dccd9041c9a93fa3bde86569d7b03120d276c6f"}, - {file = "aiohttp-3.8.6-cp38-cp38-win_amd64.whl", hash = "sha256:bdf70bfe5a1414ba9afb9d49f0c912dc524cf60141102f3a11143ba3d291870f"}, - {file = "aiohttp-3.8.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d52d5dc7c6682b720280f9d9db41d36ebe4791622c842e258c9206232251ab2b"}, - {file = "aiohttp-3.8.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4ac39027011414dbd3d87f7edb31680e1f430834c8cef029f11c66dad0670aa5"}, - {file = "aiohttp-3.8.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3f5c7ce535a1d2429a634310e308fb7d718905487257060e5d4598e29dc17f0b"}, - {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b30e963f9e0d52c28f284d554a9469af073030030cef8693106d918b2ca92f54"}, - {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:918810ef188f84152af6b938254911055a72e0f935b5fbc4c1a4ed0b0584aed1"}, - {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:002f23e6ea8d3dd8d149e569fd580c999232b5fbc601c48d55398fbc2e582e8c"}, - {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4fcf3eabd3fd1a5e6092d1242295fa37d0354b2eb2077e6eb670accad78e40e1"}, - {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:255ba9d6d5ff1a382bb9a578cd563605aa69bec845680e21c44afc2670607a95"}, - {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d67f8baed00870aa390ea2590798766256f31dc5ed3ecc737debb6e97e2ede78"}, - {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:86f20cee0f0a317c76573b627b954c412ea766d6ada1a9fcf1b805763ae7feeb"}, - {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:39a312d0e991690ccc1a61f1e9e42daa519dcc34ad03eb6f826d94c1190190dd"}, - {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:e827d48cf802de06d9c935088c2924e3c7e7533377d66b6f31ed175c1620e05e"}, - {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bd111d7fc5591ddf377a408ed9067045259ff2770f37e2d94e6478d0f3fc0c17"}, - {file = "aiohttp-3.8.6-cp39-cp39-win32.whl", hash = "sha256:caf486ac1e689dda3502567eb89ffe02876546599bbf915ec94b1fa424eeffd4"}, - {file = "aiohttp-3.8.6-cp39-cp39-win_amd64.whl", hash = "sha256:3f0e27e5b733803333bb2371249f41cf42bae8884863e8e8965ec69bebe53132"}, - {file = "aiohttp-3.8.6.tar.gz", hash = "sha256:b0cf2a4501bff9330a8a5248b4ce951851e415bdcce9dc158e76cfd55e15085c"}, + {file = "aiohttp-3.9.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:6896b8416be9ada4d22cd359d7cb98955576ce863eadad5596b7cdfbf3e17c6c"}, + {file = "aiohttp-3.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1736d87dad8ef46a8ec9cddd349fa9f7bd3a064c47dd6469c0d6763d3d49a4fc"}, + {file = "aiohttp-3.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8c9e5f4d7208cda1a2bb600e29069eecf857e6980d0ccc922ccf9d1372c16f4b"}, + {file = "aiohttp-3.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8488519aa05e636c5997719fe543c8daf19f538f4fa044f3ce94bee608817cff"}, + {file = "aiohttp-3.9.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ab16c254e2312efeb799bc3c06897f65a133b38b69682bf75d1f1ee1a9c43a9"}, + {file = "aiohttp-3.9.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7a94bde005a8f926d0fa38b88092a03dea4b4875a61fbcd9ac6f4351df1b57cd"}, + {file = "aiohttp-3.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b777c9286b6c6a94f50ddb3a6e730deec327e9e2256cb08b5530db0f7d40fd8"}, + {file = "aiohttp-3.9.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:571760ad7736b34d05597a1fd38cbc7d47f7b65deb722cb8e86fd827404d1f6b"}, + {file = "aiohttp-3.9.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:deac0a32aec29608eb25d730f4bc5a261a65b6c48ded1ed861d2a1852577c932"}, + {file = "aiohttp-3.9.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:4ee1b4152bc3190cc40ddd6a14715e3004944263ea208229ab4c297712aa3075"}, + {file = "aiohttp-3.9.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:3607375053df58ed6f23903aa10cf3112b1240e8c799d243bbad0f7be0666986"}, + {file = "aiohttp-3.9.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:65b0a70a25456d329a5e1426702dde67be0fb7a4ead718005ba2ca582d023a94"}, + {file = "aiohttp-3.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5a2eb5311a37fe105aa35f62f75a078537e1a9e4e1d78c86ec9893a3c97d7a30"}, + {file = "aiohttp-3.9.0-cp310-cp310-win32.whl", hash = "sha256:2cbc14a13fb6b42d344e4f27746a4b03a2cb0c1c3c5b932b0d6ad8881aa390e3"}, + {file = "aiohttp-3.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:ac9669990e2016d644ba8ae4758688534aabde8dbbc81f9af129c3f5f01ca9cd"}, + {file = "aiohttp-3.9.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f8e05f5163528962ce1d1806fce763ab893b1c5b7ace0a3538cd81a90622f844"}, + {file = "aiohttp-3.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4afa8f71dba3a5a2e1e1282a51cba7341ae76585345c43d8f0e624882b622218"}, + {file = "aiohttp-3.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f929f4c9b9a00f3e6cc0587abb95ab9c05681f8b14e0fe1daecfa83ea90f8318"}, + {file = "aiohttp-3.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28185e36a78d247c55e9fbea2332d16aefa14c5276a582ce7a896231c6b1c208"}, + {file = "aiohttp-3.9.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a486ddf57ab98b6d19ad36458b9f09e6022de0381674fe00228ca7b741aacb2f"}, + {file = "aiohttp-3.9.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:70e851f596c00f40a2f00a46126c95c2e04e146015af05a9da3e4867cfc55911"}, + {file = "aiohttp-3.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c5b7bf8fe4d39886adc34311a233a2e01bc10eb4e842220235ed1de57541a896"}, + {file = "aiohttp-3.9.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c67a51ea415192c2e53e4e048c78bab82d21955b4281d297f517707dc836bf3d"}, + {file = "aiohttp-3.9.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:694df243f394629bcae2d8ed94c589a181e8ba8604159e6e45e7b22e58291113"}, + {file = "aiohttp-3.9.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3dd8119752dd30dd7bca7d4bc2a92a59be6a003e4e5c2cf7e248b89751b8f4b7"}, + {file = "aiohttp-3.9.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:eb6dfd52063186ac97b4caa25764cdbcdb4b10d97f5c5f66b0fa95052e744eb7"}, + {file = "aiohttp-3.9.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:d97c3e286d0ac9af6223bc132dc4bad6540b37c8d6c0a15fe1e70fb34f9ec411"}, + {file = "aiohttp-3.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:816f4db40555026e4cdda604a1088577c1fb957d02f3f1292e0221353403f192"}, + {file = "aiohttp-3.9.0-cp311-cp311-win32.whl", hash = "sha256:3abf0551874fecf95f93b58f25ef4fc9a250669a2257753f38f8f592db85ddea"}, + {file = "aiohttp-3.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:e18d92c3e9e22553a73e33784fcb0ed484c9874e9a3e96c16a8d6a1e74a0217b"}, + {file = "aiohttp-3.9.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:99ae01fb13a618b9942376df77a1f50c20a281390dad3c56a6ec2942e266220d"}, + {file = "aiohttp-3.9.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:05857848da443c8c12110d99285d499b4e84d59918a21132e45c3f0804876994"}, + {file = "aiohttp-3.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:317719d7f824eba55857fe0729363af58e27c066c731bc62cd97bc9c3d9c7ea4"}, + {file = "aiohttp-3.9.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1e3b3c107ccb0e537f309f719994a55621acd2c8fdf6d5ce5152aed788fb940"}, + {file = "aiohttp-3.9.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:45820ddbb276113ead8d4907a7802adb77548087ff5465d5c554f9aa3928ae7d"}, + {file = "aiohttp-3.9.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:05a183f1978802588711aed0dea31e697d760ce9055292db9dc1604daa9a8ded"}, + {file = "aiohttp-3.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51a4cd44788ea0b5e6bb8fa704597af3a30be75503a7ed1098bc5b8ffdf6c982"}, + {file = "aiohttp-3.9.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:673343fbc0c1ac44d0d2640addc56e97a052504beacd7ade0dc5e76d3a4c16e8"}, + {file = "aiohttp-3.9.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7e8a3b79b6d186a9c99761fd4a5e8dd575a48d96021f220ac5b5fa856e5dd029"}, + {file = "aiohttp-3.9.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:6777a390e41e78e7c45dab43a4a0196c55c3b8c30eebe017b152939372a83253"}, + {file = "aiohttp-3.9.0-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:7ae5f99a32c53731c93ac3075abd3e1e5cfbe72fc3eaac4c27c9dd64ba3b19fe"}, + {file = "aiohttp-3.9.0-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:f1e4f254e9c35d8965d377e065c4a8a55d396fe87c8e7e8429bcfdeeb229bfb3"}, + {file = "aiohttp-3.9.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:11ca808f9a6b63485059f5f6e164ef7ec826483c1212a44f268b3653c91237d8"}, + {file = "aiohttp-3.9.0-cp312-cp312-win32.whl", hash = "sha256:de3cc86f4ea8b4c34a6e43a7306c40c1275e52bfa9748d869c6b7d54aa6dad80"}, + {file = "aiohttp-3.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:ca4fddf84ac7d8a7d0866664936f93318ff01ee33e32381a115b19fb5a4d1202"}, + {file = "aiohttp-3.9.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:f09960b5bb1017d16c0f9e9f7fc42160a5a49fa1e87a175fd4a2b1a1833ea0af"}, + {file = "aiohttp-3.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8303531e2c17b1a494ffaeba48f2da655fe932c4e9a2626c8718403c83e5dd2b"}, + {file = "aiohttp-3.9.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4790e44f46a4aa07b64504089def5744d3b6780468c4ec3a1a36eb7f2cae9814"}, + {file = "aiohttp-3.9.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1d7edf74a36de0e5ca50787e83a77cf352f5504eb0ffa3f07000a911ba353fb"}, + {file = "aiohttp-3.9.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:94697c7293199c2a2551e3e3e18438b4cba293e79c6bc2319f5fd652fccb7456"}, + {file = "aiohttp-3.9.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a1b66dbb8a7d5f50e9e2ea3804b01e766308331d0cac76eb30c563ac89c95985"}, + {file = "aiohttp-3.9.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9623cfd9e85b76b83ef88519d98326d4731f8d71869867e47a0b979ffec61c73"}, + {file = "aiohttp-3.9.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f32c86dc967ab8c719fd229ce71917caad13cc1e8356ee997bf02c5b368799bf"}, + {file = "aiohttp-3.9.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f50b4663c3e0262c3a361faf440761fbef60ccdde5fe8545689a4b3a3c149fb4"}, + {file = "aiohttp-3.9.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:dcf71c55ec853826cd70eadb2b6ac62ec577416442ca1e0a97ad875a1b3a0305"}, + {file = "aiohttp-3.9.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:42fe4fd9f0dfcc7be4248c162d8056f1d51a04c60e53366b0098d1267c4c9da8"}, + {file = "aiohttp-3.9.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:76a86a9989ebf82ee61e06e2bab408aec4ea367dc6da35145c3352b60a112d11"}, + {file = "aiohttp-3.9.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f9e09a1c83521d770d170b3801eea19b89f41ccaa61d53026ed111cb6f088887"}, + {file = "aiohttp-3.9.0-cp38-cp38-win32.whl", hash = "sha256:a00ce44c21612d185c5275c5cba4bab8d7c1590f248638b667ed8a782fa8cd6f"}, + {file = "aiohttp-3.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:d5b9345ab92ebe6003ae11d8092ce822a0242146e6fa270889b9ba965457ca40"}, + {file = "aiohttp-3.9.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:98d21092bf2637c5fa724a428a69e8f5955f2182bff61f8036827cf6ce1157bf"}, + {file = "aiohttp-3.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:35a68cd63ca6aaef5707888f17a70c36efe62b099a4e853d33dc2e9872125be8"}, + {file = "aiohttp-3.9.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3d7f6235c7475658acfc1769d968e07ab585c79f6ca438ddfecaa9a08006aee2"}, + {file = "aiohttp-3.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:db04d1de548f7a62d1dd7e7cdf7c22893ee168e22701895067a28a8ed51b3735"}, + {file = "aiohttp-3.9.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:536b01513d67d10baf6f71c72decdf492fb7433c5f2f133e9a9087379d4b6f31"}, + {file = "aiohttp-3.9.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c8b0a6487e8109427ccf638580865b54e2e3db4a6e0e11c02639231b41fc0f"}, + {file = "aiohttp-3.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7276fe0017664414fdc3618fca411630405f1aaf0cc3be69def650eb50441787"}, + {file = "aiohttp-3.9.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:23170247ef89ffa842a02bbfdc425028574d9e010611659abeb24d890bc53bb8"}, + {file = "aiohttp-3.9.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b1a2ea8252cacc7fd51df5a56d7a2bb1986ed39be9397b51a08015727dfb69bd"}, + {file = "aiohttp-3.9.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2d71abc15ff7047412ef26bf812dfc8d0d1020d664617f4913df2df469f26b76"}, + {file = "aiohttp-3.9.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:2d820162c8c2bdbe97d328cd4f417c955ca370027dce593345e437b2e9ffdc4d"}, + {file = "aiohttp-3.9.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:2779f5e7c70f7b421915fd47db332c81de365678180a9f3ab404088f87ba5ff9"}, + {file = "aiohttp-3.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:366bc870d7ac61726f32a489fbe3d1d8876e87506870be66b01aeb84389e967e"}, + {file = "aiohttp-3.9.0-cp39-cp39-win32.whl", hash = "sha256:1df43596b826022b14998f0460926ce261544fedefe0d2f653e1b20f49e96454"}, + {file = "aiohttp-3.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:9c196b30f1b1aa3363a69dd69079ae9bec96c2965c4707eaa6914ba099fb7d4f"}, + {file = "aiohttp-3.9.0.tar.gz", hash = "sha256:09f23292d29135025e19e8ff4f0a68df078fe4ee013bca0105b2e803989de92d"}, ] [package.dependencies] aiosignal = ">=1.1.2" -async-timeout = ">=4.0.0a3,<5.0" +async-timeout = {version = ">=4.0,<5.0", markers = "python_version < \"3.11\""} attrs = ">=17.3.0" -charset-normalizer = ">=2.0,<4.0" frozenlist = ">=1.1.1" multidict = ">=4.5,<7.0" yarl = ">=1.0,<2.0" [package.extras] -speedups = ["Brotli", "aiodns", "cchardet"] +speedups = ["Brotli", "aiodns", "brotlicffi"] [[package]] name = "aiosignal" @@ -122,6 +110,41 @@ files = [ [package.dependencies] frozenlist = ">=1.1.0" +[[package]] +name = "annotated-types" +version = "0.6.0" +description = "Reusable constraint types to use with typing.Annotated" +optional = true +python-versions = ">=3.8" +files = [ + {file = "annotated_types-0.6.0-py3-none-any.whl", hash = "sha256:0641064de18ba7a25dee8f96403ebc39113d0cb953a01429249d5c7564666a43"}, + {file = "annotated_types-0.6.0.tar.gz", hash = "sha256:563339e807e53ffd9c267e99fc6d9ea23eb8443c08f112651963e24e22f84a5d"}, +] + +[package.dependencies] +typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.9\""} + +[[package]] +name = "anyio" +version = "3.7.1" +description = "High level compatibility layer for multiple asynchronous event loop implementations" +optional = true +python-versions = ">=3.7" +files = [ + {file = "anyio-3.7.1-py3-none-any.whl", hash = "sha256:91dee416e570e92c64041bd18b900d1d6fa78dff7048769ce5ac5ddad004fbb5"}, + {file = "anyio-3.7.1.tar.gz", hash = "sha256:44a3c9aba0f5defa43261a8b3efb97891f2bd7d804e0e1f56419befa1adfc780"}, +] + +[package.dependencies] +exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} +idna = ">=2.8" +sniffio = ">=1.1" + +[package.extras] +doc = ["Sphinx", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme (>=1.2.2)", "sphinxcontrib-jquery"] +test = ["anyio[trio]", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] +trio = ["trio (<0.22)"] + [[package]] name = "appdirs" version = "1.4.4" @@ -162,6 +185,17 @@ docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib- tests = ["attrs[tests-no-zope]", "zope-interface"] tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +[[package]] +name = "backoff" +version = "2.2.1" +description = "Function decoration for backoff and retry" +optional = true +python-versions = ">=3.7,<4.0" +files = [ + {file = "backoff-2.2.1-py3-none-any.whl", hash = "sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8"}, + {file = "backoff-2.2.1.tar.gz", hash = "sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba"}, +] + [[package]] name = "certifi" version = "2023.7.22" @@ -282,6 +316,40 @@ files = [ {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] +[[package]] +name = "exceptiongroup" +version = "1.2.0" +description = "Backport of PEP 654 (exception groups)" +optional = true +python-versions = ">=3.7" +files = [ + {file = "exceptiongroup-1.2.0-py3-none-any.whl", hash = "sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14"}, + {file = "exceptiongroup-1.2.0.tar.gz", hash = "sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68"}, +] + +[package.extras] +test = ["pytest (>=6)"] + +[[package]] +name = "fastapi" +version = "0.104.1" +description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" +optional = true +python-versions = ">=3.8" +files = [ + {file = "fastapi-0.104.1-py3-none-any.whl", hash = "sha256:752dc31160cdbd0436bb93bad51560b57e525cbb1d4bbf6f4904ceee75548241"}, + {file = "fastapi-0.104.1.tar.gz", hash = "sha256:e5e4540a7c5e1dcfbbcf5b903c234feddcdcd881f191977a1c5dfd917487e7ae"}, +] + +[package.dependencies] +anyio = ">=3.7.1,<4.0.0" +pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0 || >2.0.0,<2.0.1 || >2.0.1,<2.1.0 || >2.1.0,<3.0.0" +starlette = ">=0.27.0,<0.28.0" +typing-extensions = ">=4.8.0" + +[package.extras] +all = ["email-validator (>=2.0.0)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.5)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] + [[package]] name = "filelock" version = "3.12.4" @@ -403,6 +471,17 @@ smb = ["smbprotocol"] ssh = ["paramiko"] tqdm = ["tqdm"] +[[package]] +name = "h11" +version = "0.14.0" +description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +optional = true +python-versions = ">=3.7" +files = [ + {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, + {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, +] + [[package]] name = "huggingface-hub" version = "0.16.4" @@ -667,6 +746,142 @@ files = [ {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, ] +[[package]] +name = "pydantic" +version = "2.5.2" +description = "Data validation using Python type hints" +optional = true +python-versions = ">=3.7" +files = [ + {file = "pydantic-2.5.2-py3-none-any.whl", hash = "sha256:80c50fb8e3dcecfddae1adbcc00ec5822918490c99ab31f6cf6140ca1c1429f0"}, + {file = "pydantic-2.5.2.tar.gz", hash = "sha256:ff177ba64c6faf73d7afa2e8cad38fd456c0dbe01c9954e71038001cd15a6edd"}, +] + +[package.dependencies] +annotated-types = ">=0.4.0" +pydantic-core = "2.14.5" +typing-extensions = ">=4.6.1" + +[package.extras] +email = ["email-validator (>=2.0.0)"] + +[[package]] +name = "pydantic-core" +version = "2.14.5" +description = "" +optional = true +python-versions = ">=3.7" +files = [ + {file = "pydantic_core-2.14.5-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:7e88f5696153dc516ba6e79f82cc4747e87027205f0e02390c21f7cb3bd8abfd"}, + {file = "pydantic_core-2.14.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4641e8ad4efb697f38a9b64ca0523b557c7931c5f84e0fd377a9a3b05121f0de"}, + {file = "pydantic_core-2.14.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:774de879d212db5ce02dfbf5b0da9a0ea386aeba12b0b95674a4ce0593df3d07"}, + {file = "pydantic_core-2.14.5-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ebb4e035e28f49b6f1a7032920bb9a0c064aedbbabe52c543343d39341a5b2a3"}, + {file = "pydantic_core-2.14.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b53e9ad053cd064f7e473a5f29b37fc4cc9dc6d35f341e6afc0155ea257fc911"}, + {file = "pydantic_core-2.14.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8aa1768c151cf562a9992462239dfc356b3d1037cc5a3ac829bb7f3bda7cc1f9"}, + {file = "pydantic_core-2.14.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eac5c82fc632c599f4639a5886f96867ffced74458c7db61bc9a66ccb8ee3113"}, + {file = "pydantic_core-2.14.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d2ae91f50ccc5810b2f1b6b858257c9ad2e08da70bf890dee02de1775a387c66"}, + {file = "pydantic_core-2.14.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6b9ff467ffbab9110e80e8c8de3bcfce8e8b0fd5661ac44a09ae5901668ba997"}, + {file = "pydantic_core-2.14.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:61ea96a78378e3bd5a0be99b0e5ed00057b71f66115f5404d0dae4819f495093"}, + {file = "pydantic_core-2.14.5-cp310-none-win32.whl", hash = "sha256:bb4c2eda937a5e74c38a41b33d8c77220380a388d689bcdb9b187cf6224c9720"}, + {file = "pydantic_core-2.14.5-cp310-none-win_amd64.whl", hash = "sha256:b7851992faf25eac90bfcb7bfd19e1f5ffa00afd57daec8a0042e63c74a4551b"}, + {file = "pydantic_core-2.14.5-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:4e40f2bd0d57dac3feb3a3aed50f17d83436c9e6b09b16af271b6230a2915459"}, + {file = "pydantic_core-2.14.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ab1cdb0f14dc161ebc268c09db04d2c9e6f70027f3b42446fa11c153521c0e88"}, + {file = "pydantic_core-2.14.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aae7ea3a1c5bb40c93cad361b3e869b180ac174656120c42b9fadebf685d121b"}, + {file = "pydantic_core-2.14.5-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:60b7607753ba62cf0739177913b858140f11b8af72f22860c28eabb2f0a61937"}, + {file = "pydantic_core-2.14.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2248485b0322c75aee7565d95ad0e16f1c67403a470d02f94da7344184be770f"}, + {file = "pydantic_core-2.14.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:823fcc638f67035137a5cd3f1584a4542d35a951c3cc68c6ead1df7dac825c26"}, + {file = "pydantic_core-2.14.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96581cfefa9123accc465a5fd0cc833ac4d75d55cc30b633b402e00e7ced00a6"}, + {file = "pydantic_core-2.14.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a33324437018bf6ba1bb0f921788788641439e0ed654b233285b9c69704c27b4"}, + {file = "pydantic_core-2.14.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9bd18fee0923ca10f9a3ff67d4851c9d3e22b7bc63d1eddc12f439f436f2aada"}, + {file = "pydantic_core-2.14.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:853a2295c00f1d4429db4c0fb9475958543ee80cfd310814b5c0ef502de24dda"}, + {file = "pydantic_core-2.14.5-cp311-none-win32.whl", hash = "sha256:cb774298da62aea5c80a89bd58c40205ab4c2abf4834453b5de207d59d2e1651"}, + {file = "pydantic_core-2.14.5-cp311-none-win_amd64.whl", hash = "sha256:e87fc540c6cac7f29ede02e0f989d4233f88ad439c5cdee56f693cc9c1c78077"}, + {file = "pydantic_core-2.14.5-cp311-none-win_arm64.whl", hash = "sha256:57d52fa717ff445cb0a5ab5237db502e6be50809b43a596fb569630c665abddf"}, + {file = "pydantic_core-2.14.5-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:e60f112ac88db9261ad3a52032ea46388378034f3279c643499edb982536a093"}, + {file = "pydantic_core-2.14.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6e227c40c02fd873c2a73a98c1280c10315cbebe26734c196ef4514776120aeb"}, + {file = "pydantic_core-2.14.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0cbc7fff06a90bbd875cc201f94ef0ee3929dfbd5c55a06674b60857b8b85ed"}, + {file = "pydantic_core-2.14.5-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:103ef8d5b58596a731b690112819501ba1db7a36f4ee99f7892c40da02c3e189"}, + {file = "pydantic_core-2.14.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c949f04ecad823f81b1ba94e7d189d9dfb81edbb94ed3f8acfce41e682e48cef"}, + {file = "pydantic_core-2.14.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c1452a1acdf914d194159439eb21e56b89aa903f2e1c65c60b9d874f9b950e5d"}, + {file = "pydantic_core-2.14.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb4679d4c2b089e5ef89756bc73e1926745e995d76e11925e3e96a76d5fa51fc"}, + {file = "pydantic_core-2.14.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cf9d3fe53b1ee360e2421be95e62ca9b3296bf3f2fb2d3b83ca49ad3f925835e"}, + {file = "pydantic_core-2.14.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:70f4b4851dbb500129681d04cc955be2a90b2248d69273a787dda120d5cf1f69"}, + {file = "pydantic_core-2.14.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:59986de5710ad9613ff61dd9b02bdd2f615f1a7052304b79cc8fa2eb4e336d2d"}, + {file = "pydantic_core-2.14.5-cp312-none-win32.whl", hash = "sha256:699156034181e2ce106c89ddb4b6504c30db8caa86e0c30de47b3e0654543260"}, + {file = "pydantic_core-2.14.5-cp312-none-win_amd64.whl", hash = "sha256:5baab5455c7a538ac7e8bf1feec4278a66436197592a9bed538160a2e7d11e36"}, + {file = "pydantic_core-2.14.5-cp312-none-win_arm64.whl", hash = "sha256:e47e9a08bcc04d20975b6434cc50bf82665fbc751bcce739d04a3120428f3e27"}, + {file = "pydantic_core-2.14.5-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:af36f36538418f3806048f3b242a1777e2540ff9efaa667c27da63d2749dbce0"}, + {file = "pydantic_core-2.14.5-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:45e95333b8418ded64745f14574aa9bfc212cb4fbeed7a687b0c6e53b5e188cd"}, + {file = "pydantic_core-2.14.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e47a76848f92529879ecfc417ff88a2806438f57be4a6a8bf2961e8f9ca9ec7"}, + {file = "pydantic_core-2.14.5-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d81e6987b27bc7d101c8597e1cd2bcaa2fee5e8e0f356735c7ed34368c471550"}, + {file = "pydantic_core-2.14.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:34708cc82c330e303f4ce87758828ef6e457681b58ce0e921b6e97937dd1e2a3"}, + {file = "pydantic_core-2.14.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:652c1988019752138b974c28f43751528116bcceadad85f33a258869e641d753"}, + {file = "pydantic_core-2.14.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e4d090e73e0725b2904fdbdd8d73b8802ddd691ef9254577b708d413bf3006e"}, + {file = "pydantic_core-2.14.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5c7d5b5005f177764e96bd584d7bf28d6e26e96f2a541fdddb934c486e36fd59"}, + {file = "pydantic_core-2.14.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:a71891847f0a73b1b9eb86d089baee301477abef45f7eaf303495cd1473613e4"}, + {file = "pydantic_core-2.14.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:a717aef6971208f0851a2420b075338e33083111d92041157bbe0e2713b37325"}, + {file = "pydantic_core-2.14.5-cp37-none-win32.whl", hash = "sha256:de790a3b5aa2124b8b78ae5faa033937a72da8efe74b9231698b5a1dd9be3405"}, + {file = "pydantic_core-2.14.5-cp37-none-win_amd64.whl", hash = "sha256:6c327e9cd849b564b234da821236e6bcbe4f359a42ee05050dc79d8ed2a91588"}, + {file = "pydantic_core-2.14.5-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:ef98ca7d5995a82f43ec0ab39c4caf6a9b994cb0b53648ff61716370eadc43cf"}, + {file = "pydantic_core-2.14.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c6eae413494a1c3f89055da7a5515f32e05ebc1a234c27674a6956755fb2236f"}, + {file = "pydantic_core-2.14.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcf4e6d85614f7a4956c2de5a56531f44efb973d2fe4a444d7251df5d5c4dcfd"}, + {file = "pydantic_core-2.14.5-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6637560562134b0e17de333d18e69e312e0458ee4455bdad12c37100b7cad706"}, + {file = "pydantic_core-2.14.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:77fa384d8e118b3077cccfcaf91bf83c31fe4dc850b5e6ee3dc14dc3d61bdba1"}, + {file = "pydantic_core-2.14.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16e29bad40bcf97aac682a58861249ca9dcc57c3f6be22f506501833ddb8939c"}, + {file = "pydantic_core-2.14.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:531f4b4252fac6ca476fbe0e6f60f16f5b65d3e6b583bc4d87645e4e5ddde331"}, + {file = "pydantic_core-2.14.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:074f3d86f081ce61414d2dc44901f4f83617329c6f3ab49d2bc6c96948b2c26b"}, + {file = "pydantic_core-2.14.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c2adbe22ab4babbca99c75c5d07aaf74f43c3195384ec07ccbd2f9e3bddaecec"}, + {file = "pydantic_core-2.14.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0f6116a558fd06d1b7c2902d1c4cf64a5bd49d67c3540e61eccca93f41418124"}, + {file = "pydantic_core-2.14.5-cp38-none-win32.whl", hash = "sha256:fe0a5a1025eb797752136ac8b4fa21aa891e3d74fd340f864ff982d649691867"}, + {file = "pydantic_core-2.14.5-cp38-none-win_amd64.whl", hash = "sha256:079206491c435b60778cf2b0ee5fd645e61ffd6e70c47806c9ed51fc75af078d"}, + {file = "pydantic_core-2.14.5-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:a6a16f4a527aae4f49c875da3cdc9508ac7eef26e7977952608610104244e1b7"}, + {file = "pydantic_core-2.14.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:abf058be9517dc877227ec3223f0300034bd0e9f53aebd63cf4456c8cb1e0863"}, + {file = "pydantic_core-2.14.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:49b08aae5013640a3bfa25a8eebbd95638ec3f4b2eaf6ed82cf0c7047133f03b"}, + {file = "pydantic_core-2.14.5-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c2d97e906b4ff36eb464d52a3bc7d720bd6261f64bc4bcdbcd2c557c02081ed2"}, + {file = "pydantic_core-2.14.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3128e0bbc8c091ec4375a1828d6118bc20404883169ac95ffa8d983b293611e6"}, + {file = "pydantic_core-2.14.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:88e74ab0cdd84ad0614e2750f903bb0d610cc8af2cc17f72c28163acfcf372a4"}, + {file = "pydantic_core-2.14.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c339dabd8ee15f8259ee0f202679b6324926e5bc9e9a40bf981ce77c038553db"}, + {file = "pydantic_core-2.14.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3387277f1bf659caf1724e1afe8ee7dbc9952a82d90f858ebb931880216ea955"}, + {file = "pydantic_core-2.14.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ba6b6b3846cfc10fdb4c971980a954e49d447cd215ed5a77ec8190bc93dd7bc5"}, + {file = "pydantic_core-2.14.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ca61d858e4107ce5e1330a74724fe757fc7135190eb5ce5c9d0191729f033209"}, + {file = "pydantic_core-2.14.5-cp39-none-win32.whl", hash = "sha256:ec1e72d6412f7126eb7b2e3bfca42b15e6e389e1bc88ea0069d0cc1742f477c6"}, + {file = "pydantic_core-2.14.5-cp39-none-win_amd64.whl", hash = "sha256:c0b97ec434041827935044bbbe52b03d6018c2897349670ff8fe11ed24d1d4ab"}, + {file = "pydantic_core-2.14.5-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:79e0a2cdbdc7af3f4aee3210b1172ab53d7ddb6a2d8c24119b5706e622b346d0"}, + {file = "pydantic_core-2.14.5-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:678265f7b14e138d9a541ddabbe033012a2953315739f8cfa6d754cc8063e8ca"}, + {file = "pydantic_core-2.14.5-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:95b15e855ae44f0c6341ceb74df61b606e11f1087e87dcb7482377374aac6abe"}, + {file = "pydantic_core-2.14.5-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:09b0e985fbaf13e6b06a56d21694d12ebca6ce5414b9211edf6f17738d82b0f8"}, + {file = "pydantic_core-2.14.5-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3ad873900297bb36e4b6b3f7029d88ff9829ecdc15d5cf20161775ce12306f8a"}, + {file = "pydantic_core-2.14.5-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:2d0ae0d8670164e10accbeb31d5ad45adb71292032d0fdb9079912907f0085f4"}, + {file = "pydantic_core-2.14.5-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:d37f8ec982ead9ba0a22a996129594938138a1503237b87318392a48882d50b7"}, + {file = "pydantic_core-2.14.5-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:35613015f0ba7e14c29ac6c2483a657ec740e5ac5758d993fdd5870b07a61d8b"}, + {file = "pydantic_core-2.14.5-pp37-pypy37_pp73-macosx_10_7_x86_64.whl", hash = "sha256:ab4ea451082e684198636565224bbb179575efc1658c48281b2c866bfd4ddf04"}, + {file = "pydantic_core-2.14.5-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ce601907e99ea5b4adb807ded3570ea62186b17f88e271569144e8cca4409c7"}, + {file = "pydantic_core-2.14.5-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb2ed8b3fe4bf4506d6dab3b93b83bbc22237e230cba03866d561c3577517d18"}, + {file = "pydantic_core-2.14.5-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:70f947628e074bb2526ba1b151cee10e4c3b9670af4dbb4d73bc8a89445916b5"}, + {file = "pydantic_core-2.14.5-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:4bc536201426451f06f044dfbf341c09f540b4ebdb9fd8d2c6164d733de5e634"}, + {file = "pydantic_core-2.14.5-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f4791cf0f8c3104ac668797d8c514afb3431bc3305f5638add0ba1a5a37e0d88"}, + {file = "pydantic_core-2.14.5-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:038c9f763e650712b899f983076ce783175397c848da04985658e7628cbe873b"}, + {file = "pydantic_core-2.14.5-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:27548e16c79702f1e03f5628589c6057c9ae17c95b4c449de3c66b589ead0520"}, + {file = "pydantic_core-2.14.5-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c97bee68898f3f4344eb02fec316db93d9700fb1e6a5b760ffa20d71d9a46ce3"}, + {file = "pydantic_core-2.14.5-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b9b759b77f5337b4ea024f03abc6464c9f35d9718de01cfe6bae9f2e139c397e"}, + {file = "pydantic_core-2.14.5-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:439c9afe34638ace43a49bf72d201e0ffc1a800295bed8420c2a9ca8d5e3dbb3"}, + {file = "pydantic_core-2.14.5-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:ba39688799094c75ea8a16a6b544eb57b5b0f3328697084f3f2790892510d144"}, + {file = "pydantic_core-2.14.5-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:ccd4d5702bb90b84df13bd491be8d900b92016c5a455b7e14630ad7449eb03f8"}, + {file = "pydantic_core-2.14.5-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:81982d78a45d1e5396819bbb4ece1fadfe5f079335dd28c4ab3427cd95389944"}, + {file = "pydantic_core-2.14.5-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:7f8210297b04e53bc3da35db08b7302a6a1f4889c79173af69b72ec9754796b8"}, + {file = "pydantic_core-2.14.5-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:8c8a8812fe6f43a3a5b054af6ac2d7b8605c7bcab2804a8a7d68b53f3cd86e00"}, + {file = "pydantic_core-2.14.5-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:206ed23aecd67c71daf5c02c3cd19c0501b01ef3cbf7782db9e4e051426b3d0d"}, + {file = "pydantic_core-2.14.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2027d05c8aebe61d898d4cffd774840a9cb82ed356ba47a90d99ad768f39789"}, + {file = "pydantic_core-2.14.5-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:40180930807ce806aa71eda5a5a5447abb6b6a3c0b4b3b1b1962651906484d68"}, + {file = "pydantic_core-2.14.5-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:615a0a4bff11c45eb3c1996ceed5bdaa2f7b432425253a7c2eed33bb86d80abc"}, + {file = "pydantic_core-2.14.5-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f5e412d717366e0677ef767eac93566582518fe8be923361a5c204c1a62eaafe"}, + {file = "pydantic_core-2.14.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:513b07e99c0a267b1d954243845d8a833758a6726a3b5d8948306e3fe14675e3"}, + {file = "pydantic_core-2.14.5.tar.gz", hash = "sha256:6d30226dfc816dd0fdf120cae611dd2215117e4f9b124af8c60ab9093b6e8e71"}, +] + +[package.dependencies] +typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" + [[package]] name = "python-dotenv" version = "1.0.0" @@ -740,6 +955,24 @@ files = [ {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, ] +[[package]] +name = "redis" +version = "5.0.1" +description = "Python client for Redis database and key-value store" +optional = true +python-versions = ">=3.7" +files = [ + {file = "redis-5.0.1-py3-none-any.whl", hash = "sha256:ed4802971884ae19d640775ba3b03aa2e7bd5e8fb8dfaed2decce4d0fc48391f"}, + {file = "redis-5.0.1.tar.gz", hash = "sha256:0dab495cd5753069d3bc650a0dde8a8f9edde16fc5691b689a566eda58100d0f"}, +] + +[package.dependencies] +async-timeout = {version = ">=4.0.2", markers = "python_full_version <= \"3.11.2\""} + +[package.extras] +hiredis = ["hiredis (>=1.0.0)"] +ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==20.0.1)", "requests (>=2.26.0)"] + [[package]] name = "regex" version = "2023.8.8" @@ -858,6 +1091,50 @@ urllib3 = ">=1.21.1,<3" socks = ["PySocks (>=1.5.6,!=1.5.7)"] use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] +[[package]] +name = "rq" +version = "1.15.1" +description = "RQ is a simple, lightweight, library for creating background jobs, and processing them." +optional = true +python-versions = ">=3.6" +files = [ + {file = "rq-1.15.1-py2.py3-none-any.whl", hash = "sha256:6e243d8d9c4af4686ded4b01b25ea1ff4bac4fc260b02638fbe9c8c17b004bd1"}, + {file = "rq-1.15.1.tar.gz", hash = "sha256:1f49f4ac1a084044bb8e95b3f305c0bf17e55618b08c18e0b60c080f12d6f008"}, +] + +[package.dependencies] +click = ">=5.0.0" +redis = ">=4.0.0" + +[[package]] +name = "sniffio" +version = "1.3.0" +description = "Sniff out which async library your code is running under" +optional = true +python-versions = ">=3.7" +files = [ + {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, + {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, +] + +[[package]] +name = "starlette" +version = "0.27.0" +description = "The little ASGI library that shines." +optional = true +python-versions = ">=3.7" +files = [ + {file = "starlette-0.27.0-py3-none-any.whl", hash = "sha256:918416370e846586541235ccd38a474c08b80443ed31c578a418e2209b3eef91"}, + {file = "starlette-0.27.0.tar.gz", hash = "sha256:6a6b0d042acb8d469a01eba54e9cda6cbd24ac602c4cd016723117d6a7e73b75"}, +] + +[package.dependencies] +anyio = ">=3.4.0,<5" +typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\""} + +[package.extras] +full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart", "pyyaml"] + [[package]] name = "tiktoken" version = "0.5.1" @@ -1066,6 +1343,25 @@ secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17. socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["zstandard (>=0.18.0)"] +[[package]] +name = "uvicorn" +version = "0.24.0.post1" +description = "The lightning-fast ASGI server." +optional = true +python-versions = ">=3.8" +files = [ + {file = "uvicorn-0.24.0.post1-py3-none-any.whl", hash = "sha256:7c84fea70c619d4a710153482c0d230929af7bcf76c7bfa6de151f0a3a80121e"}, + {file = "uvicorn-0.24.0.post1.tar.gz", hash = "sha256:09c8e5a79dc466bdf28dead50093957db184de356fcdc48697bad3bde4c2588e"}, +] + +[package.dependencies] +click = ">=7.0" +h11 = ">=0.8" +typing-extensions = {version = ">=4.0", markers = "python_version < \"3.11\""} + +[package.extras] +standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"] + [[package]] name = "yarl" version = "1.9.2" @@ -1168,7 +1464,10 @@ files = [ docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] +[extras] +proxy = ["backoff", "fastapi", "rq", "uvicorn"] + [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "531003aaa1ec2726a59a79a3458a46a189cb603ffc8e8dad5117a2f65dff3b93" +content-hash = "3dd278d4e42a3ec3169a139f2e164c4ea09a30deb2fec1397527d2dc7815ba11" From c2e2e927fb68a3bafc1606d3027caccadb882918 Mon Sep 17 00:00:00 2001 From: chabala98 Date: Fri, 1 Dec 2023 13:16:35 +0100 Subject: [PATCH 002/460] fix system prompts for replicate --- docs/my-website/docs/providers/replicate.md | 4 +- litellm/llms/replicate.py | 63 ++++++++++++--------- 2 files changed, 37 insertions(+), 30 deletions(-) diff --git a/docs/my-website/docs/providers/replicate.md b/docs/my-website/docs/providers/replicate.md index d8ab035e1..3384ba35c 100644 --- a/docs/my-website/docs/providers/replicate.md +++ b/docs/my-website/docs/providers/replicate.md @@ -49,8 +49,8 @@ Below are examples on how to call replicate LLMs using liteLLM Model Name | Function Call | Required OS Variables | -----------------------------|----------------------------------------------------------------|--------------------------------------| - replicate/llama-2-70b-chat | `completion(model='replicate/llama-2-70b-chat:2796ee9483c3fd7aa2e171d38f4ca12251a30609463dcfd4cd76703f22e96cdf', messages)` | `os.environ['REPLICATE_API_KEY']` | - a16z-infra/llama-2-13b-chat| `completion(model='replicate/a16z-infra/llama-2-13b-chat:2a7f981751ec7fdf87b5b91ad4db53683a98082e9ff7bfd12c8cd5ea85980a52', messages)`| `os.environ['REPLICATE_API_KEY']` | + replicate/llama-2-70b-chat | `completion(model='replicate/llama-2-70b-chat:2796ee9483c3fd7aa2e171d38f4ca12251a30609463dcfd4cd76703f22e96cdf', messages, supports_system_prompt=True)` | `os.environ['REPLICATE_API_KEY']` | + a16z-infra/llama-2-13b-chat| `completion(model='replicate/a16z-infra/llama-2-13b-chat:2a7f981751ec7fdf87b5b91ad4db53683a98082e9ff7bfd12c8cd5ea85980a52', messages, supports_system_prompt=True)`| `os.environ['REPLICATE_API_KEY']` | replicate/vicuna-13b | `completion(model='replicate/vicuna-13b:6282abe6a492de4145d7bb601023762212f9ddbbe78278bd6771c8b3b2f2a13b', messages)` | `os.environ['REPLICATE_API_KEY']` | daanelson/flan-t5-large | `completion(model='replicate/daanelson/flan-t5-large:ce962b3f6792a57074a601d3979db5839697add2e4e02696b3ced4c022d4767f', messages)` | `os.environ['REPLICATE_API_KEY']` | custom-llm | `completion(model='replicate/custom-llm-version-id', messages)` | `os.environ['REPLICATE_API_KEY']` | diff --git a/litellm/llms/replicate.py b/litellm/llms/replicate.py index d639a8d1e..874b31bd6 100644 --- a/litellm/llms/replicate.py +++ b/litellm/llms/replicate.py @@ -169,6 +169,7 @@ def handle_prediction_response_streaming(prediction_url, api_token, print_verbos else: # this can fail temporarily but it does not mean the replicate request failed, replicate request fails when status=="failed" print_verbose(f"Replicate: Failed to fetch prediction status and output.{response.status_code}{response.text}") + # Function to extract version ID from model string def model_to_version_id(model): @@ -194,41 +195,47 @@ def completion( ): # Start a prediction and get the prediction URL version_id = model_to_version_id(model) - ## Load Config config = litellm.ReplicateConfig.get_config() for k, v in config.items(): if k not in optional_params: # completion(top_k=3) > replicate_config(top_k=3) <- allows for dynamic variables to be passed in optional_params[k] = v - - if "meta/llama-2-13b-chat" in model: - system_prompt = "" - prompt = "" - for message in messages: - if message["role"] == "system": - system_prompt = message["content"] - else: - prompt += message["content"] - input_data = { - "system_prompt": system_prompt, - "prompt": prompt, - **optional_params - } + + system_prompt = None + if optional_params is not None and "supports_system_prompt" in optional_params: + supports_sys_prompt = optional_params.pop("supports_system_prompt") else: - if model in custom_prompt_dict: - # check if the model has a registered custom prompt - model_prompt_details = custom_prompt_dict[model] - prompt = custom_prompt( - role_dict=model_prompt_details.get("roles", {}), - initial_prompt_value=model_prompt_details.get("initial_prompt_value", ""), - final_prompt_value=model_prompt_details.get("final_prompt_value", ""), - bos_token=model_prompt_details.get("bos_token", ""), - eos_token=model_prompt_details.get("eos_token", ""), - messages=messages, - ) - else: - prompt = prompt_factory(model=model, messages=messages) + supports_sys_prompt = False + + if supports_sys_prompt: + for i in range(len(messages)): + if messages[i]["role"] == "system": + first_sys_message = messages.pop(i) + system_prompt = first_sys_message["content"] + break + + if model in custom_prompt_dict: + # check if the model has a registered custom prompt + model_prompt_details = custom_prompt_dict[model] + prompt = custom_prompt( + role_dict=model_prompt_details.get("roles", {}), + initial_prompt_value=model_prompt_details.get("initial_prompt_value", ""), + final_prompt_value=model_prompt_details.get("final_prompt_value", ""), + bos_token=model_prompt_details.get("bos_token", ""), + eos_token=model_prompt_details.get("eos_token", ""), + messages=messages, + ) + else: + prompt = prompt_factory(model=model, messages=messages) + # If system prompt is supported, and a system prompt is provided, use it + if system_prompt is not None: + input_data = { + "prompt": prompt, + "system_prompt": system_prompt + } + # Otherwise, use the prompt as is + else: input_data = { "prompt": prompt, **optional_params From 56e95197c6d8b28b546a246ae6a3bb1cbfef9190 Mon Sep 17 00:00:00 2001 From: estill01 Date: Sat, 2 Dec 2023 19:50:18 -0800 Subject: [PATCH 003/460] Enable setting default `model` value for `Completions` add `model` arg to `Completions` class; if you provide a value, it will be used when you create new completions from an instance of the class. --- litellm/main.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/litellm/main.py b/litellm/main.py index 850d25672..89bb27dd9 100644 --- a/litellm/main.py +++ b/litellm/main.py @@ -98,17 +98,23 @@ class Chat(): def __init__(self, params): self.params = params self.completions = Completions(self.params) - + class Completions(): - def __init__(self, params): + def __init__(self, model, params): self.params = params + self.model = model - def create(self, model, messages, **kwargs): + def create(self, messages, model=None, **kwargs): + if model is None: + if self.model is not None: + model = self.model + else: + raise ValueError("a value for `model` is required) for k, v in kwargs.items(): self.params[k] = v response = completion(model=model, messages=messages, **self.params) - return response + return response @client async def acompletion(*args, **kwargs): From 82fbbf67ca35bfac2b6b52b422d6647eb266eb68 Mon Sep 17 00:00:00 2001 From: estill01 Date: Sun, 3 Dec 2023 05:34:24 +0000 Subject: [PATCH 004/460] Fix; persistent 'model' default value --- litellm/main.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/litellm/main.py b/litellm/main.py index 89bb27dd9..ec5a8ce1c 100644 --- a/litellm/main.py +++ b/litellm/main.py @@ -103,16 +103,11 @@ class Completions(): def __init__(self, model, params): self.params = params - self.model = model def create(self, messages, model=None, **kwargs): - if model is None: - if self.model is not None: - model = self.model - else: - raise ValueError("a value for `model` is required) for k, v in kwargs.items(): self.params[k] = v + model = model or self.params.get('model') response = completion(model=model, messages=messages, **self.params) return response From 737abbb0c1341439307d2ffe3ff6db1914e6e6ae Mon Sep 17 00:00:00 2001 From: estill01 Date: Sun, 3 Dec 2023 05:37:57 +0000 Subject: [PATCH 005/460] fix --- litellm/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/main.py b/litellm/main.py index ec5a8ce1c..977f156ca 100644 --- a/litellm/main.py +++ b/litellm/main.py @@ -101,7 +101,7 @@ class Chat(): class Completions(): - def __init__(self, model, params): + def __init__(self, params): self.params = params def create(self, messages, model=None, **kwargs): From a66b4855a39f8778da13795ef12feae3032d46af Mon Sep 17 00:00:00 2001 From: Ayush Somani <25874080+geekyayush@users.noreply.github.com> Date: Sun, 3 Dec 2023 12:28:05 +0530 Subject: [PATCH 006/460] feat: add docker-compose file --- docker-compose.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 docker-compose.yml diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 000000000..35e283966 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,12 @@ +version: "3.9" +services: + litellm: + image: ghcr.io/berriai/litellm:main-v1.10.3 + ports: + - "8000:8000" # Map the container port to the host, change the host port if necessary + volumes: + - ./litellm-config.yaml:/app/config.yaml # Mount the local configuration file + # You can change the port or number of workers as per your requirements or pass any new supported CLI augument. Make sure the port passed here matches with the container port defined above in `ports` value + command: [ "--config", "/app/config.yaml", "--port", "8000", "--num_workers", "8" ] + +# ...rest of your docker-compose config if any From 28bd07657912a452f1951190ffd1a55c90506b19 Mon Sep 17 00:00:00 2001 From: Ayush Somani <25874080+geekyayush@users.noreply.github.com> Date: Sun, 3 Dec 2023 12:28:28 +0530 Subject: [PATCH 007/460] (docs) add docker compose guide --- docs/my-website/docs/proxy/quick_start.md | 37 +++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/docs/my-website/docs/proxy/quick_start.md b/docs/my-website/docs/proxy/quick_start.md index f2ae9ea22..a63e7d3ad 100644 --- a/docs/my-website/docs/proxy/quick_start.md +++ b/docs/my-website/docs/proxy/quick_start.md @@ -142,6 +142,43 @@ Here's how you can run the docker image and start litellm on port 8002 with `num docker run ghcr.io/berriai/litellm:main-v1.10.0 --port 8002 --num_workers 8 ``` +#### Run the Docker Image using docker compose + +**Step 1** + +(Recommended) Use the `docker-compose.yml` given in the project root. e.g. https://github.com/BerriAI/litellm/blob/main/docker-compose.yml + +Here's an example `docker-compose.yml` file +```yaml +version: "3.9" +services: + litellm: + image: ghcr.io/berriai/litellm:main-v1.10.3 + ports: + - "8000:8000" # Map the container port to the host, change the host port if necessary + volumes: + - ./litellm-config.yaml:/app/config.yaml # Mount the local configuration file + # You can change the port or number of workers as per your requirements or pass any new supported CLI augument. Make sure the port passed here matches with the container port defined above in `ports` value + command: [ "--config", "/app/config.yaml", "--port", "8000", "--num_workers", "8" ] + +# ...rest of your docker-compose config if any +``` + +**Step 2** + +Create a `litellm-config.yaml` file with your LiteLLM config relative to your `docker-compose.yml` file. + +Check the config doc [here](https://docs.litellm.ai/docs/proxy/configs) + +**Step 3** + +Run the command `docker-compose up` or `docker compose up` as per your docker installation. + +> Use `-d` flag to run the container in detached mode (background) e.g. `docker compose up -d` + + +Your LiteLLM container should be running now. + ## Server Endpoints - POST `/chat/completions` - chat completions endpoint to call 100+ LLMs - POST `/completions` - completions endpoint From 7d2078d89fec0d4eebbb973ccfb2759fe78cd0fb Mon Sep 17 00:00:00 2001 From: Ayush Somani <25874080+geekyayush@users.noreply.github.com> Date: Sun, 3 Dec 2023 12:29:18 +0530 Subject: [PATCH 008/460] (docs) update docker compose guide --- docs/my-website/docs/proxy/quick_start.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/my-website/docs/proxy/quick_start.md b/docs/my-website/docs/proxy/quick_start.md index a63e7d3ad..3751e45db 100644 --- a/docs/my-website/docs/proxy/quick_start.md +++ b/docs/my-website/docs/proxy/quick_start.md @@ -177,7 +177,7 @@ Run the command `docker-compose up` or `docker compose up` as per your docker in > Use `-d` flag to run the container in detached mode (background) e.g. `docker compose up -d` -Your LiteLLM container should be running now. +Your LiteLLM container should be running now on the defined port e.g. `8000`. ## Server Endpoints - POST `/chat/completions` - chat completions endpoint to call 100+ LLMs From f2625bca243e1bff96cb8a613173010084ece914 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 4 Dec 2023 08:07:04 -0800 Subject: [PATCH 009/460] (docs) quick start proxy --- docs/my-website/docs/proxy/quick_start.md | 125 +++++++++++----------- 1 file changed, 63 insertions(+), 62 deletions(-) diff --git a/docs/my-website/docs/proxy/quick_start.md b/docs/my-website/docs/proxy/quick_start.md index f2ae9ea22..f1749bc50 100644 --- a/docs/my-website/docs/proxy/quick_start.md +++ b/docs/my-website/docs/proxy/quick_start.md @@ -87,69 +87,8 @@ print(response) -## Quick Start - LiteLLM Proxy + Config.yaml -The config allows you to create a model list and set `api_base`, `max_tokens` (all litellm params). See more details about the config [here](https://docs.litellm.ai/docs/proxy/configs) -### Create a Config for LiteLLM Proxy -Example config - -```yaml -model_list: - - model_name: gpt-3.5-turbo - litellm_params: - model: azure/ - api_base: - api_key: - - model_name: gpt-3.5-turbo - litellm_params: - model: azure/gpt-turbo-small-ca - api_base: https://my-endpoint-canada-berri992.openai.azure.com/ - api_key: -``` - -### Run proxy with config - -```shell -litellm --config your_config.yaml -``` - -## Quick Start Docker Image: Github Container Registry - -### Pull the litellm ghcr docker image -See the latest available ghcr docker image here: -https://github.com/berriai/litellm/pkgs/container/litellm - -```shell -docker pull ghcr.io/berriai/litellm:main-v1.10.1 -``` - -### Run the Docker Image -```shell -docker run ghcr.io/berriai/litellm:main-v1.10.0 -``` - -#### Run the Docker Image with LiteLLM CLI args - -See all supported CLI args [here](https://docs.litellm.ai/docs/proxy/cli): - -Here's how you can run the docker image and pass your config to `litellm` -```shell -docker run ghcr.io/berriai/litellm:main-v1.10.0 --config your_config.yaml -``` - -Here's how you can run the docker image and start litellm on port 8002 with `num_workers=8` -```shell -docker run ghcr.io/berriai/litellm:main-v1.10.0 --port 8002 --num_workers 8 -``` - -## Server Endpoints -- POST `/chat/completions` - chat completions endpoint to call 100+ LLMs -- POST `/completions` - completions endpoint -- POST `/embeddings` - embedding endpoint for Azure, OpenAI, Huggingface endpoints -- GET `/models` - available models on server -- POST `/key/generate` - generate a key to access the proxy - -## Supported LLMs +### Supported LLMs All LiteLLM supported LLMs are supported on the Proxy. Seel all [supported llms](https://docs.litellm.ai/docs/providers) @@ -301,6 +240,68 @@ $ litellm --model command-nightly +## Quick Start - LiteLLM Proxy + Config.yaml +The config allows you to create a model list and set `api_base`, `max_tokens` (all litellm params). See more details about the config [here](https://docs.litellm.ai/docs/proxy/configs) + +### Create a Config for LiteLLM Proxy +Example config + +```yaml +model_list: + - model_name: gpt-3.5-turbo + litellm_params: + model: azure/ + api_base: + api_key: + - model_name: gpt-3.5-turbo + litellm_params: + model: azure/gpt-turbo-small-ca + api_base: https://my-endpoint-canada-berri992.openai.azure.com/ + api_key: +``` + +### Run proxy with config + +```shell +litellm --config your_config.yaml +``` + +## Quick Start Docker Image: Github Container Registry + +### Pull the litellm ghcr docker image +See the latest available ghcr docker image here: +https://github.com/berriai/litellm/pkgs/container/litellm + +```shell +docker pull ghcr.io/berriai/litellm:main-v1.10.1 +``` + +### Run the Docker Image +```shell +docker run ghcr.io/berriai/litellm:main-v1.10.0 +``` + +#### Run the Docker Image with LiteLLM CLI args + +See all supported CLI args [here](https://docs.litellm.ai/docs/proxy/cli): + +Here's how you can run the docker image and pass your config to `litellm` +```shell +docker run ghcr.io/berriai/litellm:main-v1.10.0 --config your_config.yaml +``` + +Here's how you can run the docker image and start litellm on port 8002 with `num_workers=8` +```shell +docker run ghcr.io/berriai/litellm:main-v1.10.0 --port 8002 --num_workers 8 +``` + +## Server Endpoints +- POST `/chat/completions` - chat completions endpoint to call 100+ LLMs +- POST `/completions` - completions endpoint +- POST `/embeddings` - embedding endpoint for Azure, OpenAI, Huggingface endpoints +- GET `/models` - available models on server +- POST `/key/generate` - generate a key to access the proxy + ## Using with OpenAI compatible projects Set `base_url` to the LiteLLM Proxy server From b1bd799be86cafdb008ae4360fe886e242708879 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 4 Dec 2023 08:26:06 -0800 Subject: [PATCH 010/460] (feat) proxy: use custom_logger --- litellm/proxy/custom_logger.py | 19 +++++++++++++++++++ litellm/proxy/proxy_config.yaml | 3 +++ 2 files changed, 22 insertions(+) create mode 100644 litellm/proxy/custom_logger.py diff --git a/litellm/proxy/custom_logger.py b/litellm/proxy/custom_logger.py new file mode 100644 index 000000000..8a1a824ac --- /dev/null +++ b/litellm/proxy/custom_logger.py @@ -0,0 +1,19 @@ +from litellm.integrations.custom_logger import CustomLogger +class MyCustomHandler(CustomLogger): + def log_pre_api_call(self, model, messages, kwargs): + print(f"Pre-API Call") + + def log_post_api_call(self, kwargs, response_obj, start_time, end_time): + # log: key, user, model, prompt, response, tokens, cost + print(f"Post-API Call") + + def log_stream_event(self, kwargs, response_obj, start_time, end_time): + print(f"On Stream") + + def log_success_event(self, kwargs, response_obj, start_time, end_time): + print(f"On Success") + + def log_failure_event(self, kwargs, response_obj, start_time, end_time): + print(f"On Failure") + +customHandler = MyCustomHandler() diff --git a/litellm/proxy/proxy_config.yaml b/litellm/proxy/proxy_config.yaml index e7848f0dc..2d45dd91b 100644 --- a/litellm/proxy/proxy_config.yaml +++ b/litellm/proxy/proxy_config.yaml @@ -3,6 +3,9 @@ model_list: litellm_params: model: gpt-3.5-turbo +litellm_settings: + callbacks: [custom_logger.customHandler] # sets litellm.callbacks = [module.module_variable] + general_settings: # otel: True # OpenTelemetry Logger # master_key: sk-1234 # [OPTIONAL] Only use this if you to require all calls to contain this key (Authorization: Bearer sk-1234) From ed8c666922796792af72ff7ce1fe1fc3e1d30f06 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 4 Dec 2023 08:44:20 -0800 Subject: [PATCH 011/460] (feat) proxy: custom_logger for I/O logging --- litellm/proxy/proxy_server.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index c9ba4c215..a2605dd55 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -117,7 +117,9 @@ app.add_middleware( allow_methods=["*"], allow_headers=["*"], ) -def log_input_output(request, response): +def log_input_output(request, response, custom_logger=None): + if custom_logger is not None: + custom_logger(request, response) global otel_logging if otel_logging != True: return From 65e00b438ea348560356fee47f6f0b3edcaa1667 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 4 Dec 2023 09:09:54 -0800 Subject: [PATCH 012/460] (feat) proxy-read litellm custom callback class --- litellm/proxy/custom_logger.py | 15 ++++++++++++++- litellm/proxy/proxy_server.py | 19 +++++++++++++++++++ pyproject.toml | 1 + 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/litellm/proxy/custom_logger.py b/litellm/proxy/custom_logger.py index 8a1a824ac..d30722bd9 100644 --- a/litellm/proxy/custom_logger.py +++ b/litellm/proxy/custom_logger.py @@ -1,4 +1,5 @@ from litellm.integrations.custom_logger import CustomLogger +import litellm class MyCustomHandler(CustomLogger): def log_pre_api_call(self, model, messages, kwargs): print(f"Pre-API Call") @@ -6,6 +7,16 @@ class MyCustomHandler(CustomLogger): def log_post_api_call(self, kwargs, response_obj, start_time, end_time): # log: key, user, model, prompt, response, tokens, cost print(f"Post-API Call") + print("\n kwargs\n") + print(kwargs) + model = kwargs["model"] + messages = kwargs["messages"] + cost = litellm.completion_cost(completion_response=response_obj) + + # tokens used in response + usage = response_obj.usage + print(usage) + def log_stream_event(self, kwargs, response_obj, start_time, end_time): print(f"On Stream") @@ -16,4 +27,6 @@ class MyCustomHandler(CustomLogger): def log_failure_event(self, kwargs, response_obj, start_time, end_time): print(f"On Failure") -customHandler = MyCustomHandler() +proxy_handler_instance = MyCustomHandler() + +# need to set litellm.callbacks = [customHandler] # on the proxy diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index a2605dd55..a0e9250ac 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -6,6 +6,7 @@ from typing import Optional, List import secrets, subprocess import hashlib, uuid import warnings +import importlib messages: list = [] sys.path.insert( 0, os.path.abspath("../..") @@ -556,6 +557,24 @@ def load_router_config(router: Optional[litellm.Router], config_file_path: str): port=cache_port, password=cache_password ) + elif key == "callbacks": + print(f"{blue_color_code}\nSetting custom callbacks on Proxy") + print() + passed_module, instance_name = value.split(".") + + # Dynamically import the module + module = importlib.import_module(passed_module) + # Get the instance from the module + instance = getattr(module, instance_name) + + methods = [method for method in dir(instance) if callable(getattr(instance, method))] + # Print the methods + print("Methods in the instance:") + for method in methods: + print(method) + + litellm.callbacks = [instance] + else: setattr(litellm, key, value) diff --git a/pyproject.toml b/pyproject.toml index 37f87fa45..2befc1383 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,6 +31,7 @@ proxy = [ "backoff", "rq", "orjson", + "importlib", ] extra_proxy = [ From 6599263a855c1172759f8824b10657b3b72434bd Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 4 Dec 2023 09:10:12 -0800 Subject: [PATCH 013/460] (feat) proxy: custom callbacks --- litellm/proxy/proxy_config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/proxy/proxy_config.yaml b/litellm/proxy/proxy_config.yaml index 2d45dd91b..8cf8ada65 100644 --- a/litellm/proxy/proxy_config.yaml +++ b/litellm/proxy/proxy_config.yaml @@ -4,7 +4,7 @@ model_list: model: gpt-3.5-turbo litellm_settings: - callbacks: [custom_logger.customHandler] # sets litellm.callbacks = [module.module_variable] + callbacks: custom_logger.proxy_handler_instance # sets litellm.callbacks = [module.module_variable] general_settings: # otel: True # OpenTelemetry Logger From 0d44f5e441364103de452cd85d7355d70f6beba6 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 4 Dec 2023 09:23:55 -0800 Subject: [PATCH 014/460] (feat) proxy:custom_logger --- litellm/proxy/custom_logger.py | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/litellm/proxy/custom_logger.py b/litellm/proxy/custom_logger.py index d30722bd9..544283723 100644 --- a/litellm/proxy/custom_logger.py +++ b/litellm/proxy/custom_logger.py @@ -5,24 +5,35 @@ class MyCustomHandler(CustomLogger): print(f"Pre-API Call") def log_post_api_call(self, kwargs, response_obj, start_time, end_time): - # log: key, user, model, prompt, response, tokens, cost print(f"Post-API Call") - print("\n kwargs\n") - print(kwargs) - model = kwargs["model"] - messages = kwargs["messages"] - cost = litellm.completion_cost(completion_response=response_obj) - # tokens used in response - usage = response_obj.usage - print(usage) - - def log_stream_event(self, kwargs, response_obj, start_time, end_time): print(f"On Stream") def log_success_event(self, kwargs, response_obj, start_time, end_time): print(f"On Success") + # log: key, user, model, prompt, response, tokens, cost + print("\n kwargs\n") + print(kwargs) + model = kwargs["model"] + messages = kwargs["messages"] + cost = litellm.completion_cost(completion_response=response_obj) + response = response_obj + # tokens used in response + usage = response_obj["usage"] + + print( + f""" + Model: {model}, + Messages: {messages}, + Usage: {usage}, + Cost: {cost}, + Response: {response} + """ + ) + + print(usage) + def log_failure_event(self, kwargs, response_obj, start_time, end_time): print(f"On Failure") From 31d9762b506ec5ce2783b38e02a9621846242ab2 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Mon, 4 Dec 2023 09:36:37 -0800 Subject: [PATCH 015/460] fix(model_management.md): add docs on model management on proxy --- docs/my-website/docs/proxy/configs.md | 142 +++++++----------- .../my-website/docs/proxy/model_management.md | 74 +++++++++ docs/my-website/docs/proxy/virtual_keys.md | 3 +- docs/my-website/sidebars.js | 1 + 4 files changed, 131 insertions(+), 89 deletions(-) create mode 100644 docs/my-website/docs/proxy/model_management.md diff --git a/docs/my-website/docs/proxy/configs.md b/docs/my-website/docs/proxy/configs.md index de95ce94a..71ce7de02 100644 --- a/docs/my-website/docs/proxy/configs.md +++ b/docs/my-website/docs/proxy/configs.md @@ -8,71 +8,46 @@ Set model list, `api_base`, `api_key`, `temperature` & proxy server settings (`m | `general_settings` | Server settings, example setting `master_key: sk-my_special_key` | | `environment_variables` | Environment Variables example, `REDIS_HOST`, `REDIS_PORT` | -#### Example Config +## Quick Start + +Set a model alias for your deployments. + +In the `config.yaml` the model_name parameter is the user-facing name to use for your deployment. + +In the config below requests with: +- `model=vllm-models` will route to `openai/facebook/opt-125m`. +- `model=gpt-3.5-turbo` will load balance between `azure/gpt-turbo-small-eu` and `azure/gpt-turbo-small-ca` + ```yaml model_list: - - model_name: gpt-3.5-turbo - litellm_params: + - model_name: gpt-3.5-turbo # user-facing model alias + litellm_params: # all params accepted by litellm.completion() - https://docs.litellm.ai/docs/completion/input model: azure/gpt-turbo-small-eu api_base: https://my-endpoint-europe-berri-992.openai.azure.com/ - api_key: + api_key: "os.environ/AZURE_API_KEY_EU" # does os.getenv("AZURE_API_KEY_EU") rpm: 6 # Rate limit for this deployment: in requests per minute (rpm) - model_name: gpt-3.5-turbo litellm_params: model: azure/gpt-turbo-small-ca api_base: https://my-endpoint-canada-berri992.openai.azure.com/ - api_key: + api_key: "os.environ/AZURE_API_KEY_CA" rpm: 6 - - model_name: gpt-3.5-turbo + - model_name: vllm-models litellm_params: - model: azure/gpt-turbo-large - api_base: https://openai-france-1234.openai.azure.com/ - api_key: + model: openai/facebook/opt-125m # the `openai/` prefix tells litellm it's openai compatible + api_base: http://0.0.0.0:8000 rpm: 1440 + model_info: + version: 2 -litellm_settings: +litellm_settings: # module level litellm settings - https://github.com/BerriAI/litellm/blob/main/litellm/__init__.py drop_params: True set_verbose: True general_settings: master_key: sk-1234 # [OPTIONAL] Only use this if you to require all calls to contain this key (Authorization: Bearer sk-1234) - - -environment_variables: - OPENAI_API_KEY: sk-123 - REPLICATE_API_KEY: sk-cohere-is-okay - REDIS_HOST: redis-16337.c322.us-east-1-2.ec2.cloud.redislabs.com - REDIS_PORT: "16337" - REDIS_PASSWORD: ``` -### Config for Multiple Models - GPT-4, Claude-2 - -Here's how you can use multiple llms with one proxy `config.yaml`. - -#### Step 1: Setup Config -```yaml -model_list: - - model_name: zephyr-alpha # the 1st model is the default on the proxy - litellm_params: # params for litellm.completion() - https://docs.litellm.ai/docs/completion/input#input---request-body - model: huggingface/HuggingFaceH4/zephyr-7b-alpha - api_base: http://0.0.0.0:8001 - - model_name: gpt-4 - litellm_params: - model: gpt-4 - api_key: sk-1233 - - model_name: claude-2 - litellm_params: - model: claude-2 - api_key: sk-claude -``` - -:::info - -The proxy uses the first model in the config as the default model - in this config the default model is `zephyr-alpha` -::: - - #### Step 2: Start Proxy with config ```shell @@ -96,32 +71,11 @@ curl --location 'http://0.0.0.0:8000/chat/completions' \ ' ``` -### Config for Embedding Models - xorbitsai/inference - -Here's how you can use multiple llms with one proxy `config.yaml`. -Here is how [LiteLLM calls OpenAI Compatible Embedding models](https://docs.litellm.ai/docs/embedding/supported_embedding#openai-compatible-embedding-models) - -#### Config -```yaml -model_list: - - model_name: custom_embedding_model - litellm_params: - model: openai/custom_embedding # the `openai/` prefix tells litellm it's openai compatible - api_base: http://0.0.0.0:8000/ - - model_name: custom_embedding_model - litellm_params: - model: openai/custom_embedding # the `openai/` prefix tells litellm it's openai compatible - api_base: http://0.0.0.0:8001/ -``` - -Run the proxy using this config -```shell -$ litellm --config /path/to/config.yaml -``` - -### Save Model-specific params (API Base, API Keys, Temperature, Headers etc.) +## Save Model-specific params (API Base, API Keys, Temperature, Headers etc.) You can use the config to save model-specific information like api_base, api_key, temperature, max_tokens, etc. +[**All input params**](https://docs.litellm.ai/docs/completion/input#input-params-1) + **Step 1**: Create a `config.yaml` file ```yaml model_list: @@ -152,9 +106,11 @@ model_list: $ litellm --config /path/to/config.yaml ``` -### Load API Keys from Vault +## Load API Keys -If you have secrets saved in Azure Vault, etc. and don't want to expose them in the config.yaml, here's how to load model-specific keys from the environment. +### Load API Keys from Environment + +If you have secrets saved in your environment, and don't want to expose them in the config.yaml, here's how to load model-specific keys from the environment. ```python os.environ["AZURE_NORTH_AMERICA_API_KEY"] = "your-azure-api-key" @@ -174,30 +130,42 @@ model_list: s/o to [@David Manouchehri](https://www.linkedin.com/in/davidmanouchehri/) for helping with this. -### Config for setting Model Aliases +### Load API Keys from Azure Vault -Set a model alias for your deployments. +1. Install Proxy dependencies +```bash +$ pip install litellm[proxy] litellm[extra_proxy] +``` -In the `config.yaml` the model_name parameter is the user-facing name to use for your deployment. - -In the config below requests with `model=gpt-4` will route to `ollama/llama2` +2. Save Azure details in your environment +```bash +export["AZURE_CLIENT_ID"]="your-azure-app-client-id" +export["AZURE_CLIENT_SECRET"]="your-azure-app-client-secret" +export["AZURE_TENANT_ID"]="your-azure-tenant-id" +export["AZURE_KEY_VAULT_URI"]="your-azure-key-vault-uri" +``` +3. Add to proxy config.yaml ```yaml -model_list: - - model_name: text-davinci-003 - litellm_params: - model: ollama/zephyr - - model_name: gpt-4 - litellm_params: - model: ollama/llama2 - - model_name: gpt-3.5-turbo - litellm_params: - model: ollama/llama2 +model_list: + - model_name: "my-azure-models" # model alias + litellm_params: + model: "azure/" + api_key: "os.environ/AZURE-API-KEY" # reads from key vault - get_secret("AZURE_API_KEY") + api_base: "os.environ/AZURE-API-BASE" # reads from key vault - get_secret("AZURE_API_BASE") + +general_settings: + use_azure_key_vault: True +``` + +You can now test this by starting your proxy: +```bash +litellm --config /path/to/config.yaml ``` ### Set Custom Prompt Templates -LiteLLM by default checks if a model has a [prompt template and applies it](./completion/prompt_formatting.md) (e.g. if a huggingface model has a saved chat template in it's tokenizer_config.json). However, you can also set a custom prompt template on your proxy in the `config.yaml`: +LiteLLM by default checks if a model has a [prompt template and applies it](../completion/prompt_formatting.md) (e.g. if a huggingface model has a saved chat template in it's tokenizer_config.json). However, you can also set a custom prompt template on your proxy in the `config.yaml`: **Step 1**: Save your prompt template in a `config.yaml` ```yaml diff --git a/docs/my-website/docs/proxy/model_management.md b/docs/my-website/docs/proxy/model_management.md new file mode 100644 index 000000000..0cd4ab829 --- /dev/null +++ b/docs/my-website/docs/proxy/model_management.md @@ -0,0 +1,74 @@ +# Model Management +Add new models + Get model info without restarting proxy. + +## Get Model Information + +Retrieve detailed information about each model listed in the `/models` endpoint, including descriptions from the `config.yaml` file, and additional model info (e.g. max tokens, cost per input token, etc.) pulled the model_info you set and the litellm model cost map. Sensitive details like API keys are excluded for security purposes. + + + + +```bash +curl -X GET "http://0.0.0.0:8000/model/info" \ + -H "accept: application/json" \ +``` + + + +## Add a New Model + +Add a new model to the list in the `config.yaml` by providing the model parameters. This allows you to update the model list without restarting the proxy. + + + + +```bash +curl -X POST "http://0.0.0.0:8000/model/new" \ + -H "accept: application/json" \ + -H "Content-Type: application/json" \ + -d '{ "model_name": "azure-gpt-turbo", "litellm_params": {"model": "azure/gpt-3.5-turbo", "api_key": "os.environ/AZURE_API_KEY", "api_base": "my-azure-api-base"} }' +``` + + + + +### Model Parameters Structure + +When adding a new model, your JSON payload should conform to the following structure: + +- `model_name`: The name of the new model (required). +- `litellm_params`: A dictionary containing parameters specific to the Litellm setup (required). +- `model_info`: An optional dictionary to provide additional information about the model. + +Here's an example of how to structure your `ModelParams`: + +```json +{ + "model_name": "my_awesome_model", + "litellm_params": { + "some_parameter": "some_value", + "another_parameter": "another_value" + }, + "model_info": { + "author": "Your Name", + "version": "1.0", + "description": "A brief description of the model." + } +} +``` +--- + +Keep in mind that as both endpoints are in [BETA], you may need to visit the associated GitHub issues linked in the API descriptions to check for updates or provide feedback: + +- Get Model Information: [Issue #933](https://github.com/BerriAI/litellm/issues/933) +- Add a New Model: [Issue #964](https://github.com/BerriAI/litellm/issues/964) + +Feedback on the beta endpoints is valuable and helps improve the API for all users. \ No newline at end of file diff --git a/docs/my-website/docs/proxy/virtual_keys.md b/docs/my-website/docs/proxy/virtual_keys.md index 26c22e47a..ac1cf54de 100644 --- a/docs/my-website/docs/proxy/virtual_keys.md +++ b/docs/my-website/docs/proxy/virtual_keys.md @@ -1,5 +1,4 @@ - -# Cost Tracking & Virtual Keys +# Key Management Track Spend and create virtual keys for the proxy Grant other's temporary access to your proxy, with keys that expire after a set duration. diff --git a/docs/my-website/sidebars.js b/docs/my-website/sidebars.js index dd9aa514f..11f81fa4d 100644 --- a/docs/my-website/sidebars.js +++ b/docs/my-website/sidebars.js @@ -99,6 +99,7 @@ const sidebars = { "proxy/configs", "proxy/load_balancing", "proxy/virtual_keys", + "proxy/model_management", "proxy/caching", "proxy/logging", "proxy/cli", From 93f5c266da15fdded0061bf148eb074543416f90 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 4 Dec 2023 09:45:03 -0800 Subject: [PATCH 016/460] (test) test completion: if 'user' passed to API --- litellm/tests/test_completion.py | 47 +++++++++++++++++++++++++++++--- litellm/utils.py | 3 +- 2 files changed, 45 insertions(+), 5 deletions(-) diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index 3fbbdea0e..54bc53326 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -442,9 +442,46 @@ def test_completion_text_openai(): pytest.fail(f"Error occurred: {e}") # test_completion_text_openai() +def custom_callback( + kwargs, # kwargs to completion + completion_response, # response from completion + start_time, end_time # start/end time +): + # Your custom code here + try: + print("LITELLM: in custom callback function") + print("\nkwargs\n", kwargs) + model = kwargs["model"] + messages = kwargs["messages"] + user = kwargs.get("user") + + ################################################# + + print( + f""" + Model: {model}, + Messages: {messages}, + User: {user}, + Seed: {kwargs["seed"]}, + temperature: {kwargs["temperature"]}, + """ + ) + + assert kwargs["user"] == "ishaans app" + assert kwargs["model"] == "gpt-3.5-turbo-1106" + assert kwargs["seed"] == 12 + assert kwargs["temperature"] == 0.5 + except Exception as e: + pytest.fail(f"Error occurred: {e}") + def test_completion_openai_with_optional_params(): + # [Proxy PROD TEST] WARNING: DO NOT DELETE THIS TEST + # assert that `user` gets passed to the completion call + # Note: This tests that we actually send the optional params to the completion call + # We use custom callbacks to test this try: litellm.set_verbose = True + litellm.success_callback = [custom_callback] response = completion( model="gpt-3.5-turbo-1106", messages=[ @@ -458,15 +495,17 @@ def test_completion_openai_with_optional_params(): seed=12, response_format={ "type": "json_object" }, logit_bias=None, + user = "ishaans app" ) # Add any assertions here to check the response + print(response) - except litellm.Timeout as e: - pass + litellm.success_callback = [] # unset callbacks + except Exception as e: pytest.fail(f"Error occurred: {e}") -# test_completion_openai_with_optional_params() +test_completion_openai_with_optional_params() def test_completion_openai_litellm_key(): try: @@ -1337,7 +1376,7 @@ def test_azure_cloudflare_api(): traceback.print_exc() pass -test_azure_cloudflare_api() +# test_azure_cloudflare_api() def test_completion_anyscale_2(): try: diff --git a/litellm/utils.py b/litellm/utils.py index 280a6342f..b756fc358 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -544,7 +544,8 @@ class Logging: "optional_params": self.optional_params, "litellm_params": self.litellm_params, "start_time": self.start_time, - "stream": self.stream + "stream": self.stream, + **self.optional_params } def pre_call(self, input, api_key, model=None, additional_args={}): From f3b939e603a85fdf9e3a67d4d134e26338dd8725 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 4 Dec 2023 09:50:34 -0800 Subject: [PATCH 017/460] (fix) access `user` in custom logger --- litellm/proxy/custom_logger.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/litellm/proxy/custom_logger.py b/litellm/proxy/custom_logger.py index 544283723..06d5fc127 100644 --- a/litellm/proxy/custom_logger.py +++ b/litellm/proxy/custom_logger.py @@ -15,8 +15,13 @@ class MyCustomHandler(CustomLogger): # log: key, user, model, prompt, response, tokens, cost print("\n kwargs\n") print(kwargs) + ### Access kwargs passed to litellm.completion() model = kwargs["model"] messages = kwargs["messages"] + user = kwargs.get("user") + ################################################# + + ### Calculate cost ####################### cost = litellm.completion_cost(completion_response=response_obj) response = response_obj # tokens used in response @@ -26,6 +31,7 @@ class MyCustomHandler(CustomLogger): f""" Model: {model}, Messages: {messages}, + User: {user}, Usage: {usage}, Cost: {cost}, Response: {response} From 88cec3b9ab07a7a58ea5777858cba5a5a39ab5f0 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 4 Dec 2023 10:17:56 -0800 Subject: [PATCH 018/460] (fix) proxy: don't overwrite `user` --- litellm/proxy/proxy_server.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index a0e9250ac..d1840073a 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -908,8 +908,9 @@ async def chat_completion(request: Request, model: Optional[str] = None, user_ap or model # for azure deployments or data["model"] # default passed in http request ) - - data["user"] = user_api_key_dict.get("user_id", None) + # users can pass in 'user' param to /chat/completions. Don't override it + if data["user"] is None: + data["user"] = user_api_key_dict.get("user_id", None) if "metadata" in data: data["metadata"]["user_api_key"] = user_api_key_dict["api_key"] From ebd9404cfde25ff9e0a5da0f05c884cfdf0c86fc Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 4 Dec 2023 10:19:35 -0800 Subject: [PATCH 019/460] (test) proxy: don't overwrite user --- litellm/tests/test_proxy_server.py | 49 ++++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/litellm/tests/test_proxy_server.py b/litellm/tests/test_proxy_server.py index 005de2762..53d9efaa9 100644 --- a/litellm/tests/test_proxy_server.py +++ b/litellm/tests/test_proxy_server.py @@ -45,7 +45,7 @@ def test_chat_completion(): pytest.fail("LiteLLM Proxy test failed. Exception", e) # Run the test -test_chat_completion() +# test_chat_completion() def test_chat_completion_azure(): @@ -119,4 +119,49 @@ def test_add_new_model(): except Exception as e: pytest.fail(f"LiteLLM Proxy test failed. Exception {str(e)}") -test_add_new_model() \ No newline at end of file +# test_add_new_model() + +from litellm.integrations.custom_logger import CustomLogger +class MyCustomHandler(CustomLogger): + def log_pre_api_call(self, model, messages, kwargs): + print(f"Pre-API Call") + + def log_success_event(self, kwargs, response_obj, start_time, end_time): + print(f"On Success") + assert kwargs["user"] == "proxy-user" + assert kwargs["model"] == "gpt-3.5-turbo" + assert kwargs["max_tokens"] == 10 + +customHandler = MyCustomHandler() + + +def test_chat_completion_optional_params(): + # [PROXY: PROD TEST] - DO NOT DELETE + # This tests if all the /chat/completion params are passed to litellm + + try: + # Your test data + litellm.set_verbose=True + test_data = { + "model": "gpt-3.5-turbo", + "messages": [ + { + "role": "user", + "content": "hi" + }, + ], + "max_tokens": 10, + "user": "proxy-user" + } + + litellm.callbacks = [customHandler] + print("testing proxy server: optional params") + response = client.post("/v1/chat/completions", json=test_data) + assert response.status_code == 200 + result = response.json() + print(f"Received response: {result}") + except Exception as e: + pytest.fail("LiteLLM Proxy test failed. Exception", e) + +# Run the test +test_chat_completion_optional_params() \ No newline at end of file From d7d8c5f6e6d5e1150d8d62dcd4f241704b105636 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 4 Dec 2023 10:23:55 -0800 Subject: [PATCH 020/460] (fix) proxy --- litellm/proxy/proxy_server.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index d1840073a..691f87939 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -908,8 +908,10 @@ async def chat_completion(request: Request, model: Optional[str] = None, user_ap or model # for azure deployments or data["model"] # default passed in http request ) + # users can pass in 'user' param to /chat/completions. Don't override it - if data["user"] is None: + if data.get("user", None) is None: + # if users are using user_api_key_auth, set `user` in `data` data["user"] = user_api_key_dict.get("user_id", None) if "metadata" in data: From 63e55f1865ec0a0d02348c2d2b26811d1b6291ca Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Mon, 4 Dec 2023 10:43:42 -0800 Subject: [PATCH 021/460] fix(proxy_server.py): fix /key/generate post endpoint --- litellm/proxy/proxy_server.py | 46 +++++++++-------- litellm/proxy/utils.py | 14 +++++- litellm/tests/test_config.yaml | 7 +++ litellm/tests/test_proxy_server.py | 2 +- litellm/tests/test_proxy_server_keys.py | 66 +++++++++++++++++++++++++ litellm/utils.py | 7 +-- 6 files changed, 115 insertions(+), 27 deletions(-) create mode 100644 litellm/tests/test_config.yaml create mode 100644 litellm/tests/test_proxy_server_keys.py diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 691f87939..9ebafe2dd 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -213,11 +213,11 @@ class GenerateKeyRequest(BaseModel): aliases: dict = {} config: dict = {} spend: int = 0 - user_id: Optional[str] + user_id: Optional[str] = None class GenerateKeyResponse(BaseModel): key: str - expires: str + expires: datetime user_id: str class _DeleteKeyObject(BaseModel): @@ -277,6 +277,8 @@ async def user_api_key_auth(request: Request, api_key: str = fastapi.Security(ap "api_key": None } try: + if api_key is None: + raise Exception("No api key passed in.") route = request.url.path # note: never string compare api keys, this is vulenerable to a time attack. Use secrets.compare_digest instead @@ -491,8 +493,9 @@ def load_router_config(router: Optional[litellm.Router], config_file_path: str): ## PRINT YAML FOR CONFIRMING IT WORKS printed_yaml = copy.deepcopy(config) printed_yaml.pop("environment_variables", None) - for model in printed_yaml["model_list"]: - model["litellm_params"].pop("api_key", None) + if "model_list" in printed_yaml: + for model in printed_yaml["model_list"]: + model["litellm_params"].pop("api_key", None) print(f"Loaded config YAML (api_key and environment_variables are not shown):\n{json.dumps(printed_yaml, indent=2)}") @@ -507,22 +510,24 @@ def load_router_config(router: Optional[litellm.Router], config_file_path: str): if general_settings is None: general_settings = {} if general_settings: - ### MASTER KEY ### - master_key = general_settings.get("master_key", None) - if master_key and master_key.startswith("os.environ/"): - master_key_env_name = master_key.replace("os.environ/", "") - master_key = os.getenv(master_key_env_name) + ### LOAD FROM AZURE KEY VAULT ### + use_azure_key_vault = general_settings.get("use_azure_key_vault", False) + load_from_azure_key_vault(use_azure_key_vault=use_azure_key_vault) + ### CONNECT TO DATABASE ### database_url = general_settings.get("database_url", None) + if database_url and database_url.startswith("os.environ/"): + database_url = litellm.get_secret(database_url) prisma_setup(database_url=database_url) ## COST TRACKING ## cost_tracking() ### START REDIS QUEUE ### use_queue = general_settings.get("use_queue", False) celery_setup(use_queue=use_queue) - ### LOAD FROM AZURE KEY VAULT ### - use_azure_key_vault = general_settings.get("use_azure_key_vault", False) - load_from_azure_key_vault(use_azure_key_vault=use_azure_key_vault) + ### MASTER KEY ### + master_key = general_settings.get("master_key", None) + if master_key and master_key.startswith("os.environ/"): + master_key = litellm.get_secret(master_key) #### OpenTelemetry Logging (OTEL) ######## otel_logging = general_settings.get("otel", False) @@ -540,9 +545,9 @@ def load_router_config(router: Optional[litellm.Router], config_file_path: str): print(f"{blue_color_code}\nSetting Cache on Proxy") from litellm.caching import Cache cache_type = value["type"] - cache_host = os.environ.get("REDIS_HOST") - cache_port = os.environ.get("REDIS_PORT") - cache_password = os.environ.get("REDIS_PASSWORD") + cache_host = litellm.get_secret("REDIS_HOST") + cache_port = litellm.get_secret("REDIS_PORT") + cache_password = litellm.get_secret("REDIS_PASSWORD") # Assuming cache_type, cache_host, cache_port, and cache_password are strings print(f"{blue_color_code}Cache Type:{reset_color_code} {cache_type}") @@ -794,12 +799,14 @@ def litellm_completion(*args, **kwargs): return StreamingResponse(data_generator(response), media_type='text/event-stream') return response -@app.on_event("startup") +@router.on_event("startup") async def startup_event(): global prisma_client, master_key import json worker_config = json.loads(os.getenv("WORKER_CONFIG")) + print(f"worker_config: {worker_config}") initialize(**worker_config) + print(f"prisma client - {prisma_client}") if prisma_client: await prisma_client.connect() @@ -807,7 +814,7 @@ async def startup_event(): # add master key to db await generate_key_helper_fn(duration_str=None, models=[], aliases={}, config={}, spend=0, token=master_key) -@app.on_event("shutdown") +@router.on_event("shutdown") async def shutdown_event(): global prisma_client if prisma_client: @@ -1022,8 +1029,7 @@ async def generate_key_fn(request: Request, data: GenerateKeyRequest): - key: The generated api key - expires: Datetime object for when key expires. """ - data = await request.json() - + # data = await request.json() duration_str = data.duration # Default to 1 hour if duration is not provided models = data.models # Default to an empty list (meaning allow token to call all models) aliases = data.aliases # Default to an empty dict (no alias mappings, on top of anything in the config.yaml model_list) @@ -1042,8 +1048,6 @@ async def generate_key_fn(request: Request, data: GenerateKeyRequest): @router.post("/key/delete", tags=["key management"], dependencies=[Depends(user_api_key_auth)]) async def delete_key_fn(request: Request, data: DeleteKeyRequest): try: - data = await request.json() - keys = data.keys deleted_keys = await delete_verification_token(tokens=keys) diff --git a/litellm/proxy/utils.py b/litellm/proxy/utils.py index 532321ad4..7acdd9b4b 100644 --- a/litellm/proxy/utils.py +++ b/litellm/proxy/utils.py @@ -5,8 +5,18 @@ class PrismaClient: def __init__(self, database_url: str): print("LiteLLM: DATABASE_URL Set in config, trying to 'pip install prisma'") os.environ["DATABASE_URL"] = database_url - subprocess.run(['prisma', 'generate']) - subprocess.run(['prisma', 'db', 'push', '--accept-data-loss']) # this looks like a weird edge case when prisma just wont start on render. we need to have the --accept-data-loss + # Save the current working directory + original_dir = os.getcwd() + # set the working directory to where this script is + abspath = os.path.abspath(__file__) + dname = os.path.dirname(abspath) + os.chdir(dname) + + try: + subprocess.run(['prisma', 'generate']) + subprocess.run(['prisma', 'db', 'push', '--accept-data-loss']) # this looks like a weird edge case when prisma just wont start on render. we need to have the --accept-data-loss + finally: + os.chdir(original_dir) # Now you can import the Prisma Client from prisma import Client self.db = Client() #Client to connect to Prisma db diff --git a/litellm/tests/test_config.yaml b/litellm/tests/test_config.yaml new file mode 100644 index 000000000..0e678d2d3 --- /dev/null +++ b/litellm/tests/test_config.yaml @@ -0,0 +1,7 @@ +litellm_settings: + drop_params: True + set_verbose: True + +general_settings: + master_key: "os.environ/PROXY_MASTER_KEY" + database_url: "os.environ/PROXY_DATABASE_URL" # [OPTIONAL] use for token-based auth to proxy diff --git a/litellm/tests/test_proxy_server.py b/litellm/tests/test_proxy_server.py index 53d9efaa9..805e2a860 100644 --- a/litellm/tests/test_proxy_server.py +++ b/litellm/tests/test_proxy_server.py @@ -164,4 +164,4 @@ def test_chat_completion_optional_params(): pytest.fail("LiteLLM Proxy test failed. Exception", e) # Run the test -test_chat_completion_optional_params() \ No newline at end of file +test_chat_completion_optional_params() diff --git a/litellm/tests/test_proxy_server_keys.py b/litellm/tests/test_proxy_server_keys.py new file mode 100644 index 000000000..b0e7d33bd --- /dev/null +++ b/litellm/tests/test_proxy_server_keys.py @@ -0,0 +1,66 @@ +import sys, os +import traceback +from dotenv import load_dotenv + +load_dotenv() +import os, io + +# this file is to test litellm/proxy + +sys.path.insert( + 0, os.path.abspath("../..") +) # Adds the parent directory to the system path +import pytest, logging +import litellm +from litellm import embedding, completion, completion_cost, Timeout +from litellm import RateLimitError +# Configure logging +logging.basicConfig( + level=logging.DEBUG, # Set the desired logging level + format="%(asctime)s - %(levelname)s - %(message)s", +) + +# test /chat/completion request to the proxy +from fastapi.testclient import TestClient +from fastapi import FastAPI +from litellm.proxy.proxy_server import router, save_worker_config, startup_event # Replace with the actual module where your FastAPI router is defined +cwd = os.getcwd() +config_fp = f"{cwd}/test_config.yaml" +save_worker_config(config=config_fp, model=None, alias=None, api_base=None, api_version=None, debug=False, temperature=None, max_tokens=None, request_timeout=600, max_budget=None, telemetry=False, drop_params=True, add_function_to_prompt=False, headers=None, save=False, use_queue=False) +app = FastAPI() +app.include_router(router) # Include your router in the test app +@app.on_event("startup") +async def wrapper_startup_event(): + await startup_event() + +# Here you create a fixture that will be used by your tests +# Make sure the fixture returns TestClient(app) +@pytest.fixture(autouse=True) +def client(): + with TestClient(app) as client: + yield client + +def test_add_new_key(client): + try: + # Your test data + test_data = { + "models": ["gpt-3.5-turbo", "gpt-4", "claude-2"], + "aliases": {"mistral-7b": "gpt-3.5-turbo"}, + "duration": "20m" + } + print("testing proxy server") + # Your bearer token + token = os.getenv("PROXY_MASTER_KEY") + + headers = { + "Authorization": f"Bearer {token}" + } + response = client.post("/key/generate", json=test_data, headers=headers) + print(f"response: {response.text}") + assert response.status_code == 200 + result = response.json() + print(f"Received response: {result}") + except Exception as e: + pytest.fail("LiteLLM Proxy test failed. Exception", e) + +# # Run the test - only runs via pytest \ No newline at end of file diff --git a/litellm/utils.py b/litellm/utils.py index b756fc358..dce259237 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -2421,8 +2421,7 @@ def get_llm_provider(model: str, custom_llm_provider: Optional[str] = None, api_ return model, custom_llm_provider, dynamic_api_key, api_base if api_key and api_key.startswith("os.environ/"): - api_key_env_name = api_key.replace("os.environ/", "") - dynamic_api_key = get_secret(api_key_env_name) + dynamic_api_key = get_secret(api_key) # check if llm provider part of model name if model.split("/",1)[0] in litellm.provider_list and model.split("/",1)[0] not in litellm.model_list: custom_llm_provider = model.split("/", 1)[0] @@ -4722,7 +4721,9 @@ def litellm_telemetry(data): ######### Secret Manager ############################ # checks if user has passed in a secret manager client # if passed in then checks the secret there -def get_secret(secret_name): +def get_secret(secret_name: str): + if secret_name.startswith("os.environ/"): + secret_name = secret_name.replace("os.environ/", "") if litellm.secret_manager_client is not None: # TODO: check which secret manager is being used # currently only supports Infisical From 9b1e02cdf1d5dd548455727d661a877107a79762 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 4 Dec 2023 10:48:22 -0800 Subject: [PATCH 022/460] (chore) rename: proxy-custom logger --- .../proxy/{custom_logger.py => custom_callbacks.py} | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) rename litellm/proxy/{custom_logger.py => custom_callbacks.py} (79%) diff --git a/litellm/proxy/custom_logger.py b/litellm/proxy/custom_callbacks.py similarity index 79% rename from litellm/proxy/custom_logger.py rename to litellm/proxy/custom_callbacks.py index 06d5fc127..bf4a837cd 100644 --- a/litellm/proxy/custom_logger.py +++ b/litellm/proxy/custom_callbacks.py @@ -1,5 +1,8 @@ from litellm.integrations.custom_logger import CustomLogger import litellm + +# This file includes the custom callbacks for LiteLLM Proxy +# Once defined, these can be passed in proxy_config.yaml class MyCustomHandler(CustomLogger): def log_pre_api_call(self, model, messages, kwargs): print(f"Pre-API Call") @@ -11,14 +14,17 @@ class MyCustomHandler(CustomLogger): print(f"On Stream") def log_success_event(self, kwargs, response_obj, start_time, end_time): - print(f"On Success") # log: key, user, model, prompt, response, tokens, cost + print("\nOn Success\n") print("\n kwargs\n") print(kwargs) ### Access kwargs passed to litellm.completion() model = kwargs["model"] messages = kwargs["messages"] - user = kwargs.get("user") + user = kwargs.get("user", None) + + litellm_params = kwargs.get("litellm_params", {}) + metadata = litellm_params.get("metadata", {}) # headers passed to LiteLLM proxy, can be found here ################################################# ### Calculate cost ####################### @@ -35,6 +41,7 @@ class MyCustomHandler(CustomLogger): Usage: {usage}, Cost: {cost}, Response: {response} + Proxy Metadata: {metadata} """ ) From ec579d48218548087f71bf81a313650ddede54d2 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 4 Dec 2023 10:48:36 -0800 Subject: [PATCH 023/460] (chore) rename proxy: custom_callbacks --- litellm/proxy/proxy_config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/proxy/proxy_config.yaml b/litellm/proxy/proxy_config.yaml index 8cf8ada65..071a82205 100644 --- a/litellm/proxy/proxy_config.yaml +++ b/litellm/proxy/proxy_config.yaml @@ -4,7 +4,7 @@ model_list: model: gpt-3.5-turbo litellm_settings: - callbacks: custom_logger.proxy_handler_instance # sets litellm.callbacks = [module.module_variable] + callbacks: custom_callbacks.proxy_handler_instance # sets litellm.callbacks = [module.module_variable] general_settings: # otel: True # OpenTelemetry Logger From e96a60893860623e1fa7e32285a6f4de77e50533 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 4 Dec 2023 10:48:59 -0800 Subject: [PATCH 024/460] (feat) proxy: set custom headers in metadata --- litellm/proxy/proxy_server.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 9ebafe2dd..1238fd8e2 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -923,9 +923,10 @@ async def chat_completion(request: Request, model: Optional[str] = None, user_ap if "metadata" in data: data["metadata"]["user_api_key"] = user_api_key_dict["api_key"] + data["metadata"]["headers"] = request.headers else: data["metadata"] = {"user_api_key": user_api_key_dict["api_key"]} - + data["metadata"]["headers"] = request.headers global user_temperature, user_request_timeout, user_max_tokens, user_api_base # override with user settings, these are params passed via cli if user_temperature: From bfe0172108ac6ff795db99964f87a8d8ebe3a3aa Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Mon, 4 Dec 2023 10:51:25 -0800 Subject: [PATCH 025/460] =?UTF-8?q?bump:=20version=201.10.2=20=E2=86=92=20?= =?UTF-8?q?1.10.3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 2befc1383..a9878ced7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "litellm" -version = "1.10.2" +version = "1.10.3" description = "Library to easily interface with LLM API providers" authors = ["BerriAI"] license = "MIT License" @@ -55,7 +55,7 @@ requires = ["poetry-core", "wheel"] build-backend = "poetry.core.masonry.api" [tool.commitizen] -version = "1.10.2" +version = "1.10.3" version_files = [ "pyproject.toml:^version" ] From c5b92837c2c2811e74a9afc555d04cbf14c5118b Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 4 Dec 2023 11:20:27 -0800 Subject: [PATCH 026/460] (docs) custom callbacks proxy --- docs/my-website/docs/proxy/logging.md | 124 +++++++++++++++++++++++++- litellm/proxy/custom_callbacks.py | 15 ++-- 2 files changed, 128 insertions(+), 11 deletions(-) diff --git a/docs/my-website/docs/proxy/logging.md b/docs/my-website/docs/proxy/logging.md index 21d53a7dc..851b8a4f1 100644 --- a/docs/my-website/docs/proxy/logging.md +++ b/docs/my-website/docs/proxy/logging.md @@ -1,5 +1,125 @@ -# Logging - OpenTelemetry, Langfuse, ElasticSearch -Log Proxy Input, Output, Exceptions to Langfuse, OpenTelemetry +# Logging - Custom Callbacks, OpenTelemetry, Langfuse, ElasticSearch +Log Proxy Input, Output, Exceptions using Custom Callbacks, Langfuse, OpenTelemetry + +## Custom Callbacks +Use this when you want to run custom callbacks in `python` + +### Step 1 - Create your custom `litellm` callback class +We use `litellm.integrations.custom_logger` for this, **more details about litellm custom callbacks [here](https://docs.litellm.ai/docs/observability/custom_callback)** + +Define your custom callback class in a python file. + +Here's an example custom logger for tracking `key, user, model, prompt, response, tokens, cost`. We create a file called `custom_callbacks.py` and initialize `proxy_handler_instance` + +```python +from litellm.integrations.custom_logger import CustomLogger +import litellm + +# This file includes the custom callbacks for LiteLLM Proxy +# Once defined, these can be passed in proxy_config.yaml +class MyCustomHandler(CustomLogger): + def log_pre_api_call(self, model, messages, kwargs): + print(f"Pre-API Call") + + def log_post_api_call(self, kwargs, response_obj, start_time, end_time): + print(f"Post-API Call") + + def log_stream_event(self, kwargs, response_obj, start_time, end_time): + print(f"On Stream") + + def log_success_event(self, kwargs, response_obj, start_time, end_time): + # log: key, user, model, prompt, response, tokens, cost + print("\nOn Success") + ### Access kwargs passed to litellm.completion() + model = kwargs.get("model", None) + messages = kwargs.get("messages", None) + user = kwargs.get("user", None) + + #### Access litellm_params passed to litellm.completion(), example access `metadata` + litellm_params = kwargs.get("litellm_params", {}) + metadata = litellm_params.get("metadata", {}) # headers passed to LiteLLM proxy, can be found here + ################################################# + + ##### Calculate cost using litellm.completion_cost() ####################### + cost = litellm.completion_cost(completion_response=response_obj) + response = response_obj + # tokens used in response + usage = response_obj["usage"] + + print( + f""" + Model: {model}, + Messages: {messages}, + User: {user}, + Usage: {usage}, + Cost: {cost}, + Response: {response} + Proxy Metadata: {metadata} + """ + ) + return + + def log_failure_event(self, kwargs, response_obj, start_time, end_time): + print(f"On Failure") + +proxy_handler_instance = MyCustomHandler() + +# need to set litellm.callbacks = [customHandler] # on the proxy + + +``` + +### Step 2 - Pass your custom callback class in `config.yaml` +We pass the custom callback class defined in **Step1** to the config.yaml. + +Set `callbacks` to `python_filename.logger_instance_name` + +In the config below, the custom callback is defined in a file`custom_callbacks.py` and has an instance of `proxy_handler_instance = MyCustomHandler()`. + +```yaml +model_list: + - model_name: gpt-3.5-turbo + litellm_params: + model: gpt-3.5-turbo + +litellm_settings: + callbacks: custom_callbacks.proxy_handler_instance # sets litellm.callbacks = [module.module_variable] + +``` + +### Step 3 - Start proxy + test request +```shell +litellm --config proxy_config.yaml +``` + +```shell +curl --location 'http://0.0.0.0:8000/chat/completions' \ + --header 'Authorization: Bearer sk-1234' \ + --data ' { + "model": "gpt-3.5-turbo", + "messages": [ + { + "role": "user", + "content": "good morning good sir" + } + ], + "user": "ishaan-app", + "temperature": 0.2 + }' +``` + +#### Resulting Log on Proxy +```shell +On Success + Model: gpt-3.5-turbo, + Messages: [{'role': 'user', 'content': 'good morning good sir'}], + User: ishaan-app, + Usage: {'completion_tokens': 10, 'prompt_tokens': 11, 'total_tokens': 21}, + Cost: 3.65e-05, + Response: {'id': 'chatcmpl-8S8avKJ1aVBg941y5xzGMSKrYCMvN', 'choices': [{'finish_reason': 'stop', 'index': 0, 'message': {'content': 'Good morning! How can I assist you today?', 'role': 'assistant'}}], 'created': 1701716913, 'model': 'gpt-3.5-turbo-0613', 'object': 'chat.completion', 'system_fingerprint': None, 'usage': {'completion_tokens': 10, 'prompt_tokens': 11, 'total_tokens': 21}} + Proxy Metadata: {'user_api_key': None, 'headers': Headers({'host': '0.0.0.0:8000', 'user-agent': 'curl/7.88.1', 'accept': '*/*', 'authorization': 'Bearer sk-1234', 'content-length': '199', 'content-type': 'application/x-www-form-urlencoded'}), 'model_group': 'gpt-3.5-turbo', 'deployment': 'gpt-3.5-turbo-ModelID-gpt-3.5-turbo'} +``` + ## OpenTelemetry, ElasticSearch ### Step 1 Start OpenTelemetry Collecter Docker Container diff --git a/litellm/proxy/custom_callbacks.py b/litellm/proxy/custom_callbacks.py index bf4a837cd..a991ff1d9 100644 --- a/litellm/proxy/custom_callbacks.py +++ b/litellm/proxy/custom_callbacks.py @@ -15,19 +15,18 @@ class MyCustomHandler(CustomLogger): def log_success_event(self, kwargs, response_obj, start_time, end_time): # log: key, user, model, prompt, response, tokens, cost - print("\nOn Success\n") - print("\n kwargs\n") - print(kwargs) + print("\nOn Success") ### Access kwargs passed to litellm.completion() - model = kwargs["model"] - messages = kwargs["messages"] + model = kwargs.get("model", None) + messages = kwargs.get("messages", None) user = kwargs.get("user", None) + #### Access litellm_params passed to litellm.completion(), example access `metadata` litellm_params = kwargs.get("litellm_params", {}) metadata = litellm_params.get("metadata", {}) # headers passed to LiteLLM proxy, can be found here ################################################# - ### Calculate cost ####################### + ##### Calculate cost using litellm.completion_cost() ####################### cost = litellm.completion_cost(completion_response=response_obj) response = response_obj # tokens used in response @@ -44,9 +43,7 @@ class MyCustomHandler(CustomLogger): Proxy Metadata: {metadata} """ ) - - print(usage) - + return def log_failure_event(self, kwargs, response_obj, start_time, end_time): print(f"On Failure") From 4ef0378e6ea7cbb80de4dd463ac3b41ff5faeee6 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 4 Dec 2023 11:29:26 -0800 Subject: [PATCH 027/460] (fix) proxy: custom callbacks --- litellm/proxy/proxy_server.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 1238fd8e2..ae3ec5298 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -564,7 +564,6 @@ def load_router_config(router: Optional[litellm.Router], config_file_path: str): ) elif key == "callbacks": print(f"{blue_color_code}\nSetting custom callbacks on Proxy") - print() passed_module, instance_name = value.split(".") # Dynamically import the module @@ -574,11 +573,12 @@ def load_router_config(router: Optional[litellm.Router], config_file_path: str): methods = [method for method in dir(instance) if callable(getattr(instance, method))] # Print the methods - print("Methods in the instance:") + print("Methods in the custom callbacks instance:") for method in methods: print(method) litellm.callbacks = [instance] + print() else: setattr(litellm, key, value) From 85ac2b179ad1c00f13e735621e33971413eb8038 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 4 Dec 2023 11:30:09 -0800 Subject: [PATCH 028/460] (docs) custom logger: proxy --- docs/my-website/docs/proxy/logging.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/docs/my-website/docs/proxy/logging.md b/docs/my-website/docs/proxy/logging.md index 851b8a4f1..33a72c3d9 100644 --- a/docs/my-website/docs/proxy/logging.md +++ b/docs/my-website/docs/proxy/logging.md @@ -1,4 +1,4 @@ -# Logging - Custom Callbacks, OpenTelemetry, Langfuse, ElasticSearch +# Logging - Custom Callbacks, OpenTelemetry, Langfuse Log Proxy Input, Output, Exceptions using Custom Callbacks, Langfuse, OpenTelemetry ## Custom Callbacks @@ -64,9 +64,7 @@ class MyCustomHandler(CustomLogger): proxy_handler_instance = MyCustomHandler() -# need to set litellm.callbacks = [customHandler] # on the proxy - - +# need to set litellm.callbacks = [proxy_handler_instance] # on the proxy ``` ### Step 2 - Pass your custom callback class in `config.yaml` @@ -83,7 +81,7 @@ model_list: model: gpt-3.5-turbo litellm_settings: - callbacks: custom_callbacks.proxy_handler_instance # sets litellm.callbacks = [module.module_variable] + callbacks: custom_callbacks.proxy_handler_instance # sets litellm.callbacks = [proxy_handler_instance] ``` From 15f54c3072240eca8b615868d2a5f1702963ab16 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 4 Dec 2023 11:30:53 -0800 Subject: [PATCH 029/460] (docs) default config proxy --- litellm/proxy/proxy_config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/proxy/proxy_config.yaml b/litellm/proxy/proxy_config.yaml index 071a82205..5f4f9fcad 100644 --- a/litellm/proxy/proxy_config.yaml +++ b/litellm/proxy/proxy_config.yaml @@ -4,7 +4,7 @@ model_list: model: gpt-3.5-turbo litellm_settings: - callbacks: custom_callbacks.proxy_handler_instance # sets litellm.callbacks = [module.module_variable] + # callbacks: custom_callbacks.proxy_handler_instance # sets litellm.callbacks = [proxy_handler_instance] general_settings: # otel: True # OpenTelemetry Logger From d0d8ba46c570726869a7dd376834076e0f794863 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Mon, 4 Dec 2023 11:35:36 -0800 Subject: [PATCH 030/460] test(test_proxy_server_keys.py): fix relative import --- litellm/tests/test_proxy_server_keys.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/litellm/tests/test_proxy_server_keys.py b/litellm/tests/test_proxy_server_keys.py index b0e7d33bd..806b5f43e 100644 --- a/litellm/tests/test_proxy_server_keys.py +++ b/litellm/tests/test_proxy_server_keys.py @@ -24,8 +24,8 @@ logging.basicConfig( from fastapi.testclient import TestClient from fastapi import FastAPI from litellm.proxy.proxy_server import router, save_worker_config, startup_event # Replace with the actual module where your FastAPI router is defined -cwd = os.getcwd() -config_fp = f"{cwd}/test_config.yaml" +filepath = os.path.dirname(os.path.abspath(__file__)) +config_fp = f"{filepath}/test_config.yaml" save_worker_config(config=config_fp, model=None, alias=None, api_base=None, api_version=None, debug=False, temperature=None, max_tokens=None, request_timeout=600, max_budget=None, telemetry=False, drop_params=True, add_function_to_prompt=False, headers=None, save=False, use_queue=False) app = FastAPI() app.include_router(router) # Include your router in the test app From 533b5bcc44a18c5f4ba8754cf3f6ec5736a0f096 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 4 Dec 2023 11:37:14 -0800 Subject: [PATCH 031/460] (docs) clean up proxy logging --- docs/my-website/docs/proxy/logging.md | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/docs/my-website/docs/proxy/logging.md b/docs/my-website/docs/proxy/logging.md index 33a72c3d9..4fea7a47e 100644 --- a/docs/my-website/docs/proxy/logging.md +++ b/docs/my-website/docs/proxy/logging.md @@ -28,23 +28,20 @@ class MyCustomHandler(CustomLogger): print(f"On Stream") def log_success_event(self, kwargs, response_obj, start_time, end_time): - # log: key, user, model, prompt, response, tokens, cost + # Logging key details: key, user, model, prompt, response, tokens, cost print("\nOn Success") - ### Access kwargs passed to litellm.completion() + # Access kwargs passed to litellm.completion() model = kwargs.get("model", None) messages = kwargs.get("messages", None) user = kwargs.get("user", None) - #### Access litellm_params passed to litellm.completion(), example access `metadata` + # Access litellm_params passed to litellm.completion(), example access `metadata` litellm_params = kwargs.get("litellm_params", {}) - metadata = litellm_params.get("metadata", {}) # headers passed to LiteLLM proxy, can be found here - ################################################# + metadata = litellm_params.get("metadata", {}) # Headers passed to LiteLLM proxy - ##### Calculate cost using litellm.completion_cost() ####################### + # Calculate cost using litellm.completion_cost() cost = litellm.completion_cost(completion_response=response_obj) - response = response_obj - # tokens used in response - usage = response_obj["usage"] + usage = response_obj["usage"] # Tokens used in response print( f""" @@ -64,6 +61,7 @@ class MyCustomHandler(CustomLogger): proxy_handler_instance = MyCustomHandler() +# Set litellm.callbacks = [proxy_handler_instance] on the proxy # need to set litellm.callbacks = [proxy_handler_instance] # on the proxy ``` From 333e77d161b4afb584a1374f33483c3f7d38ee9f Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 4 Dec 2023 11:44:12 -0800 Subject: [PATCH 032/460] (docs) custom logger --- docs/my-website/docs/proxy/logging.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/my-website/docs/proxy/logging.md b/docs/my-website/docs/proxy/logging.md index 4fea7a47e..95f6a83a9 100644 --- a/docs/my-website/docs/proxy/logging.md +++ b/docs/my-website/docs/proxy/logging.md @@ -67,10 +67,14 @@ proxy_handler_instance = MyCustomHandler() ### Step 2 - Pass your custom callback class in `config.yaml` We pass the custom callback class defined in **Step1** to the config.yaml. - Set `callbacks` to `python_filename.logger_instance_name` -In the config below, the custom callback is defined in a file`custom_callbacks.py` and has an instance of `proxy_handler_instance = MyCustomHandler()`. +In the config below, we pass +- python_filename: `custom_callbacks.py` +- logger_instance_name: `proxy_handler_instance`. This is defined in Step 1 + +`callbacks: custom_callbacks.proxy_handler_instance` + ```yaml model_list: From 6f8765125b28289e16bbeb890899e527f16e3480 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 4 Dec 2023 11:57:41 -0800 Subject: [PATCH 033/460] (docs) embedding: add api_base for HF --- docs/my-website/docs/embedding/supported_embedding.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/my-website/docs/embedding/supported_embedding.md b/docs/my-website/docs/embedding/supported_embedding.md index 009e5337b..3c13c5732 100644 --- a/docs/my-website/docs/embedding/supported_embedding.md +++ b/docs/my-website/docs/embedding/supported_embedding.md @@ -182,6 +182,17 @@ response = embedding( input=["good morning from litellm"] ) ``` +### Usage - Custom API Base +```python +from litellm import embedding +import os +os.environ['HUGGINGFACE_API_KEY'] = "" +response = embedding( + model='huggingface/microsoft/codebert-base', + input=["good morning from litellm"], + api_base = "https://p69xlsj6rpno5drq.us-east-1.aws.endpoints.huggingface.cloud" +) +``` | Model Name | Function Call | Required OS Variables | |-----------------------|--------------------------------------------------------------|-------------------------------------------------| From 90c13d39acd8fd980892c0a271de3b204ae26335 Mon Sep 17 00:00:00 2001 From: Krish Dholakia Date: Mon, 4 Dec 2023 12:01:22 -0800 Subject: [PATCH 034/460] Updated config.yml --- .circleci/config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index 13fe3d973..8f2a89846 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -35,6 +35,7 @@ jobs: pip install numpydoc pip install traceloop-sdk==0.0.69 pip install openai + pip install prisma - save_cache: paths: - ./venv From 728b879c33f85a6844c4c07ed4d6ccea5b2bb2fc Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Mon, 4 Dec 2023 12:38:15 -0800 Subject: [PATCH 035/460] fix(utils.py): fix azure streaming bug --- litellm/tests/test_config.yaml | 17 ++++++++++++ litellm/tests/test_proxy_server_cost.py | 27 +++++++++++++++++++ litellm/tests/test_stream_chunk_builder.py | 24 ++++++++++++++++- litellm/utils.py | 30 +++++++++++++++++----- 4 files changed, 91 insertions(+), 7 deletions(-) create mode 100644 litellm/tests/test_proxy_server_cost.py diff --git a/litellm/tests/test_config.yaml b/litellm/tests/test_config.yaml index 0e678d2d3..a38dc7615 100644 --- a/litellm/tests/test_config.yaml +++ b/litellm/tests/test_config.yaml @@ -1,3 +1,20 @@ +model_list: + - model_name: "azure-model" + litellm_params: + model: "azure/gpt-35-turbo" + api_key: "os.environ/AZURE_EUROPE_API_KEY" + api_base: "https://my-endpoint-europe-berri-992.openai.azure.com/" + - model_name: "azure-model" + litellm_params: + model: "azure/gpt-35-turbo" + api_key: "os.environ/AZURE_CANADA_API_KEY" + api_base: "https://my-endpoint-canada-berri992.openai.azure.com" + - model_name: "azure-model" + litellm_params: + model: "azure/gpt-turbo" + api_key: "os.environ/AZURE-FRANCE-API-KEY" + api_base: "https://openai-france-1234.openai.azure.com" + litellm_settings: drop_params: True set_verbose: True diff --git a/litellm/tests/test_proxy_server_cost.py b/litellm/tests/test_proxy_server_cost.py new file mode 100644 index 000000000..7688e5899 --- /dev/null +++ b/litellm/tests/test_proxy_server_cost.py @@ -0,0 +1,27 @@ +# #### What this tests #### +# # This tests the cost tracking function works with consecutive calls (~10 consecutive calls) + +# import sys, os +# import traceback +# import pytest +# sys.path.insert( +# 0, os.path.abspath("../..") +# ) # Adds the parent directory to the system path +# import litellm + +# async def test_proxy_cost_tracking(): +# """ +# Get expected cost. +# Create new key. +# Run 10 parallel calls. +# Check cost for key at the end. +# assert it's = expected cost. +# """ +# model = "gpt-3.5-turbo" +# messages = [{"role": "user", "content": "Hey, how's it going?"}] +# number_of_calls = 10 +# expected_cost = litellm.completion_cost(model=model, messages=messages) * number_of_calls +# async def litellm_acompletion(): + + + diff --git a/litellm/tests/test_stream_chunk_builder.py b/litellm/tests/test_stream_chunk_builder.py index 807e74cfb..23f67a2e8 100644 --- a/litellm/tests/test_stream_chunk_builder.py +++ b/litellm/tests/test_stream_chunk_builder.py @@ -110,4 +110,26 @@ def test_stream_chunk_builder_litellm_tool_call(): except Exception as e: pytest.fail(f"An exception occurred - {str(e)}") -test_stream_chunk_builder_litellm_tool_call() +# test_stream_chunk_builder_litellm_tool_call() + +def test_stream_chunk_builder_litellm_tool_call_regular_message(): + try: + messages = [{"role": "user", "content": "Hey, how's it going?"}] + litellm.set_verbose = False + response = litellm.completion( + model="azure/gpt-4-nov-release", + messages=messages, + tools=tools_schema, + stream=True, + api_key="os.environ/AZURE_FRANCE_API_KEY", + api_base="https://openai-france-1234.openai.azure.com", + complete_response = True + ) + + print(f"complete response: {response}") + print(f"complete response usage: {response.usage}") + assert response.system_fingerprint is not None + except Exception as e: + pytest.fail(f"An exception occurred - {str(e)}") + +test_stream_chunk_builder_litellm_tool_call_regular_message() diff --git a/litellm/utils.py b/litellm/utils.py index dce259237..3756337b6 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -5266,14 +5266,32 @@ class CustomStreamWrapper: print_verbose(f"model_response: {model_response}; completion_obj: {completion_obj}") print_verbose(f"model_response finish reason 3: {model_response.choices[0].finish_reason}") if len(completion_obj["content"]) > 0: # cannot set content of an OpenAI Object to be an empty string - hold, model_response_str = self.check_special_tokens(chunk=completion_obj["content"], finish_reason=model_response.choices[0].finish_reason) + hold, model_response_str = self.check_special_tokens(chunk=completion_obj["content"], finish_reason=model_response.choices[0].finish_reason) # filter out bos/eos tokens from openai-compatible hf endpoints print_verbose(f"hold - {hold}, model_response_str - {model_response_str}") if hold is False: - completion_obj["content"] = model_response_str - if self.sent_first_chunk == False: - completion_obj["role"] = "assistant" - self.sent_first_chunk = True - model_response.choices[0].delta = Delta(**completion_obj) + ## check if openai/azure chunk + original_chunk = response_obj.get("original_chunk", None) + if original_chunk: + model_response.id = original_chunk.id + if len(original_chunk.choices) > 0: + try: + delta = dict(original_chunk.choices[0].delta) + model_response.choices[0].delta = Delta(**delta) + except Exception as e: + model_response.choices[0].delta = Delta() + else: + return + model_response.system_fingerprint = original_chunk.system_fingerprint + if self.sent_first_chunk == False: + model_response.choices[0].delta["role"] = "assistant" + self.sent_first_chunk = True + else: + ## else + completion_obj["content"] = model_response_str + if self.sent_first_chunk == False: + completion_obj["role"] = "assistant" + self.sent_first_chunk = True + model_response.choices[0].delta = Delta(**completion_obj) # LOGGING threading.Thread(target=self.logging_obj.success_handler, args=(model_response,)).start() print_verbose(f"model_response: {model_response}") From f20bdc9b79a07b0a505b0ff08ca46c0c449e6b9a Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Mon, 4 Dec 2023 12:45:15 -0800 Subject: [PATCH 036/460] test: fix linting errors --- litellm/proxy/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/proxy/utils.py b/litellm/proxy/utils.py index 7acdd9b4b..1ea7f47a0 100644 --- a/litellm/proxy/utils.py +++ b/litellm/proxy/utils.py @@ -18,7 +18,7 @@ class PrismaClient: finally: os.chdir(original_dir) # Now you can import the Prisma Client - from prisma import Client + from prisma import Client # type: ignore self.db = Client() #Client to connect to Prisma db def hash_token(self, token: str): From de4a7b719d507259e6cd99d07d2c6a83215b1bd9 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 4 Dec 2023 13:16:19 -0800 Subject: [PATCH 037/460] (test) proxy: reading config.yaml --- .../proxy/example_config_yaml/simple_config.yaml | 4 ++++ litellm/tests/test_proxy_server.py | 15 ++++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 litellm/proxy/example_config_yaml/simple_config.yaml diff --git a/litellm/proxy/example_config_yaml/simple_config.yaml b/litellm/proxy/example_config_yaml/simple_config.yaml new file mode 100644 index 000000000..14b39a125 --- /dev/null +++ b/litellm/proxy/example_config_yaml/simple_config.yaml @@ -0,0 +1,4 @@ +model_list: + - model_name: gpt-3.5-turbo + litellm_params: + model: gpt-3.5-turbo \ No newline at end of file diff --git a/litellm/tests/test_proxy_server.py b/litellm/tests/test_proxy_server.py index 805e2a860..858277dee 100644 --- a/litellm/tests/test_proxy_server.py +++ b/litellm/tests/test_proxy_server.py @@ -164,4 +164,17 @@ def test_chat_completion_optional_params(): pytest.fail("LiteLLM Proxy test failed. Exception", e) # Run the test -test_chat_completion_optional_params() +# test_chat_completion_optional_params() + +# Test Reading config.yaml file +from litellm.proxy.proxy_server import load_router_config + +def test_load_router_config(): + try: + print("testing reading config") + result = load_router_config(router=None, config_file_path="../proxy/example_config_yaml/simple_config.yaml") + print(result) + assert len(result[1]) == 1 + except Exception as e: + pytest.fail("Proxy: Got exception reading config", e) +# test_load_router_config() From a99f471d29db0ef788ea8952fd746b82f661a6a0 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Mon, 4 Dec 2023 13:20:23 -0800 Subject: [PATCH 038/460] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7fad2d9da..cc5c1a3a5 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@

Call all LLM APIs using the OpenAI format [Bedrock, Huggingface, Cohere, TogetherAI, Azure, OpenAI, etc.]

-

OpenAI-Compatible Server

+

OpenAI Proxy Server

PyPI Version From 50284771b7cbbef0197ee1ac19f14ccae29ba40c Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 4 Dec 2023 13:24:35 -0800 Subject: [PATCH 039/460] (test) test_reading proxy --- litellm/proxy/example_config_yaml/azure_config.yaml | 10 ++++------ litellm/tests/test_proxy_server.py | 10 +++++++++- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/litellm/proxy/example_config_yaml/azure_config.yaml b/litellm/proxy/example_config_yaml/azure_config.yaml index 14e4a786f..fd5865cd7 100644 --- a/litellm/proxy/example_config_yaml/azure_config.yaml +++ b/litellm/proxy/example_config_yaml/azure_config.yaml @@ -4,14 +4,12 @@ model_list: model: azure/chatgpt-v-2 api_base: https://openai-gpt-4-test-v-1.openai.azure.com/ api_version: "2023-05-15" - azure_ad_token: eyJ0eXAiOiJ + api_key: os.environ/AZURE_API_KEY + tpm: 20_000 - model_name: gpt-4-team2 litellm_params: model: azure/gpt-4 - api_key: sk-123 + api_key: os.environ/AZURE_API_KEY api_base: https://openai-gpt-4-test-v-2.openai.azure.com/ - - model_name: gpt-4-team3 - litellm_params: - model: azure/gpt-4 - api_key: sk-123 + tpm: 100_000 diff --git a/litellm/tests/test_proxy_server.py b/litellm/tests/test_proxy_server.py index 858277dee..189cf6083 100644 --- a/litellm/tests/test_proxy_server.py +++ b/litellm/tests/test_proxy_server.py @@ -172,9 +172,17 @@ from litellm.proxy.proxy_server import load_router_config def test_load_router_config(): try: print("testing reading config") + # this is a basic config.yaml with only a model result = load_router_config(router=None, config_file_path="../proxy/example_config_yaml/simple_config.yaml") print(result) assert len(result[1]) == 1 + + # this is a load balancing config yaml + result = load_router_config(router=None, config_file_path="../proxy/example_config_yaml/azure_config.yaml") + print(result) + assert len(result[1]) == 2 + + except Exception as e: pytest.fail("Proxy: Got exception reading config", e) -# test_load_router_config() +test_load_router_config() From 07a20356516cf2eedddb2a4c22147fa9b32f6b93 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 4 Dec 2023 13:26:55 -0800 Subject: [PATCH 040/460] (chore) rm old config examples --- .../example_config_yaml/azure_config_with_tpm.yaml | 13 ------------- .../proxy/example_config_yaml/hosted_litellm.yaml | 8 -------- litellm/proxy/example_config_yaml/queue.yaml | 11 ----------- 3 files changed, 32 deletions(-) delete mode 100644 litellm/proxy/example_config_yaml/azure_config_with_tpm.yaml delete mode 100644 litellm/proxy/example_config_yaml/hosted_litellm.yaml delete mode 100644 litellm/proxy/example_config_yaml/queue.yaml diff --git a/litellm/proxy/example_config_yaml/azure_config_with_tpm.yaml b/litellm/proxy/example_config_yaml/azure_config_with_tpm.yaml deleted file mode 100644 index c1e3e0506..000000000 --- a/litellm/proxy/example_config_yaml/azure_config_with_tpm.yaml +++ /dev/null @@ -1,13 +0,0 @@ -model_list: - - model_name: gpt-3.5-turbo - litellm_params: - model: azure/gpt-35-1 - api_base: https://my-endpoint-canada-berri992.openai.azure.com/ - api_key: 73g - tpm: 80_000 - - model_name: gpt-3.5-turbo - litellm_params: - model: azure/gpt-35-2 - api_base: https://my-endpoint-europe-berri-992.openai.azure.com/ - api_key: 9kj - tpm: 80_000 \ No newline at end of file diff --git a/litellm/proxy/example_config_yaml/hosted_litellm.yaml b/litellm/proxy/example_config_yaml/hosted_litellm.yaml deleted file mode 100644 index 1ede81830..000000000 --- a/litellm/proxy/example_config_yaml/hosted_litellm.yaml +++ /dev/null @@ -1,8 +0,0 @@ - -litellm_settings: - set_verbose: True - -general_settings: - master_key: sk-hosted-litellm - use_queue: True - database_url: " # [OPTIONAL] use for token-based auth to proxy diff --git a/litellm/proxy/example_config_yaml/queue.yaml b/litellm/proxy/example_config_yaml/queue.yaml deleted file mode 100644 index 897586669..000000000 --- a/litellm/proxy/example_config_yaml/queue.yaml +++ /dev/null @@ -1,11 +0,0 @@ -model_list: - - model_name: gpt-3.5-turbo - litellm_params: - model: gpt-3.5-turbo - api_key: - - model_name: gpt-3.5-turbo - litellm_params: - model: azure/chatgpt-v-2 # actual model name - api_key: - api_version: 2023-07-01-preview - api_base: https://openai-gpt-4-test-v-1.openai.azure.com/ \ No newline at end of file From 32ecc1a6775afc5973a46a053cd415845e0be6fc Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 4 Dec 2023 13:43:03 -0800 Subject: [PATCH 041/460] (feat) replicate/deployments: add POST Req view --- litellm/llms/replicate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/llms/replicate.py b/litellm/llms/replicate.py index d639a8d1e..0f8e23e2a 100644 --- a/litellm/llms/replicate.py +++ b/litellm/llms/replicate.py @@ -100,7 +100,7 @@ def start_prediction(version_id, input_data, api_token, api_base, logging_obj, p logging_obj.pre_call( input=input_data["prompt"], api_key="", - additional_args={"complete_input_dict": initial_prediction_data, "headers": headers}, + additional_args={"complete_input_dict": initial_prediction_data, "headers": headers, "api_base": base_url}, ) response = requests.post(f"{base_url}/predictions", json=initial_prediction_data, headers=headers) From 533b93f7144cc968a66487e31fd5d5f1e228ae93 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 4 Dec 2023 14:49:59 -0800 Subject: [PATCH 042/460] (test) proxy: reading configs --- .../example_config_yaml/aliases_config.yaml | 30 +++++++++++++++++++ .../example_config_yaml/azure_config.yaml | 15 ++++++++++ .../example_config_yaml/langfuse_config.yaml | 7 +++++ .../example_config_yaml/load_balancer.yaml | 28 +++++++++++++++++ .../opentelemetry_config.yaml | 7 +++++ .../example_config_yaml/simple_config.yaml | 4 +++ litellm/tests/test_proxy_server.py | 10 +++++-- 7 files changed, 98 insertions(+), 3 deletions(-) create mode 100644 litellm/tests/example_config_yaml/aliases_config.yaml create mode 100644 litellm/tests/example_config_yaml/azure_config.yaml create mode 100644 litellm/tests/example_config_yaml/langfuse_config.yaml create mode 100644 litellm/tests/example_config_yaml/load_balancer.yaml create mode 100644 litellm/tests/example_config_yaml/opentelemetry_config.yaml create mode 100644 litellm/tests/example_config_yaml/simple_config.yaml diff --git a/litellm/tests/example_config_yaml/aliases_config.yaml b/litellm/tests/example_config_yaml/aliases_config.yaml new file mode 100644 index 000000000..266f6cf22 --- /dev/null +++ b/litellm/tests/example_config_yaml/aliases_config.yaml @@ -0,0 +1,30 @@ +model_list: + - model_name: text-davinci-003 + litellm_params: + model: ollama/zephyr + - model_name: gpt-4 + litellm_params: + model: ollama/llama2 + - model_name: gpt-3.5-turbo + litellm_params: + model: ollama/llama2 + temperature: 0.1 + max_tokens: 20 + + +# request to gpt-4, response from ollama/llama2 +# curl --location 'http://0.0.0.0:8000/chat/completions' \ +# --header 'Content-Type: application/json' \ +# --data ' { +# "model": "gpt-4", +# "messages": [ +# { +# "role": "user", +# "content": "what llm are you" +# } +# ], +# } +# ' +# + +# {"id":"chatcmpl-27c85cf0-ab09-4bcf-8cb1-0ee950520743","choices":[{"finish_reason":"stop","index":0,"message":{"content":" Hello! I'm just an AI, I don't have personal experiences or emotions like humans do. However, I can help you with any questions or tasks you may have! Is there something specific you'd like to know or discuss?","role":"assistant","_logprobs":null}}],"created":1700094955.373751,"model":"ollama/llama2","object":"chat.completion","system_fingerprint":null,"usage":{"prompt_tokens":12,"completion_tokens":47,"total_tokens":59},"_response_ms":8028.017999999999}% \ No newline at end of file diff --git a/litellm/tests/example_config_yaml/azure_config.yaml b/litellm/tests/example_config_yaml/azure_config.yaml new file mode 100644 index 000000000..fd5865cd7 --- /dev/null +++ b/litellm/tests/example_config_yaml/azure_config.yaml @@ -0,0 +1,15 @@ +model_list: + - model_name: gpt-4-team1 + litellm_params: + model: azure/chatgpt-v-2 + api_base: https://openai-gpt-4-test-v-1.openai.azure.com/ + api_version: "2023-05-15" + api_key: os.environ/AZURE_API_KEY + tpm: 20_000 + - model_name: gpt-4-team2 + litellm_params: + model: azure/gpt-4 + api_key: os.environ/AZURE_API_KEY + api_base: https://openai-gpt-4-test-v-2.openai.azure.com/ + tpm: 100_000 + diff --git a/litellm/tests/example_config_yaml/langfuse_config.yaml b/litellm/tests/example_config_yaml/langfuse_config.yaml new file mode 100644 index 000000000..c2a77b5ad --- /dev/null +++ b/litellm/tests/example_config_yaml/langfuse_config.yaml @@ -0,0 +1,7 @@ +model_list: + - model_name: gpt-3.5-turbo + +litellm_settings: + drop_params: True + success_callback: ["langfuse"] # https://docs.litellm.ai/docs/observability/langfuse_integration + diff --git a/litellm/tests/example_config_yaml/load_balancer.yaml b/litellm/tests/example_config_yaml/load_balancer.yaml new file mode 100644 index 000000000..502b90ff9 --- /dev/null +++ b/litellm/tests/example_config_yaml/load_balancer.yaml @@ -0,0 +1,28 @@ +litellm_settings: + drop_params: True + +# Model-specific settings +model_list: # use the same model_name for using the litellm router. LiteLLM will use the router between gpt-3.5-turbo + - model_name: gpt-3.5-turbo # litellm will + litellm_params: + model: gpt-3.5-turbo + api_key: sk-uj6F + tpm: 20000 # [OPTIONAL] REPLACE with your openai tpm + rpm: 3 # [OPTIONAL] REPLACE with your openai rpm + - model_name: gpt-3.5-turbo + litellm_params: + model: gpt-3.5-turbo + api_key: sk-Imn + tpm: 20000 # [OPTIONAL] REPLACE with your openai tpm + rpm: 3 # [OPTIONAL] REPLACE with your openai rpm + - model_name: gpt-3.5-turbo + litellm_params: + model: openrouter/gpt-3.5-turbo + - model_name: mistral-7b-instruct + litellm_params: + model: mistralai/mistral-7b-instruct + +environment_variables: + REDIS_HOST: localhost + REDIS_PASSWORD: + REDIS_PORT: \ No newline at end of file diff --git a/litellm/tests/example_config_yaml/opentelemetry_config.yaml b/litellm/tests/example_config_yaml/opentelemetry_config.yaml new file mode 100644 index 000000000..92d3454d7 --- /dev/null +++ b/litellm/tests/example_config_yaml/opentelemetry_config.yaml @@ -0,0 +1,7 @@ +model_list: + - model_name: gpt-3.5-turbo + litellm_params: + model: gpt-3.5-turbo + +general_settings: + otel: True # OpenTelemetry Logger this logs OTEL data to your collector diff --git a/litellm/tests/example_config_yaml/simple_config.yaml b/litellm/tests/example_config_yaml/simple_config.yaml new file mode 100644 index 000000000..14b39a125 --- /dev/null +++ b/litellm/tests/example_config_yaml/simple_config.yaml @@ -0,0 +1,4 @@ +model_list: + - model_name: gpt-3.5-turbo + litellm_params: + model: gpt-3.5-turbo \ No newline at end of file diff --git a/litellm/tests/test_proxy_server.py b/litellm/tests/test_proxy_server.py index 189cf6083..4a10ecbf8 100644 --- a/litellm/tests/test_proxy_server.py +++ b/litellm/tests/test_proxy_server.py @@ -173,16 +173,20 @@ def test_load_router_config(): try: print("testing reading config") # this is a basic config.yaml with only a model - result = load_router_config(router=None, config_file_path="../proxy/example_config_yaml/simple_config.yaml") + result = load_router_config(router=None, config_file_path="example_config_yaml/simple_config.yaml") print(result) assert len(result[1]) == 1 # this is a load balancing config yaml - result = load_router_config(router=None, config_file_path="../proxy/example_config_yaml/azure_config.yaml") + result = load_router_config(router=None, config_file_path="example_config_yaml/azure_config.yaml") print(result) assert len(result[1]) == 2 + # config with general settings - custom callbacks + result = load_router_config(router=None, config_file_path="example_config_yaml/azure_config.yaml") + print(result) + assert len(result[1]) == 2 except Exception as e: pytest.fail("Proxy: Got exception reading config", e) -test_load_router_config() +# test_load_router_config() From 3a4e512a7571d423791335964e4a7f5198a4443c Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 4 Dec 2023 15:06:52 -0800 Subject: [PATCH 043/460] (fix) palm: streaming --- litellm/utils.py | 1 + 1 file changed, 1 insertion(+) diff --git a/litellm/utils.py b/litellm/utils.py index 3756337b6..9505addf5 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -5232,6 +5232,7 @@ class CustomStreamWrapper: time.sleep(0.05) elif self.custom_llm_provider == "palm": # fake streaming + response_obj = {} if len(self.completion_stream)==0: if self.sent_last_chunk: raise StopIteration From 41365b6e475e3298c5ac70148431aaea960023c1 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 4 Dec 2023 15:07:07 -0800 Subject: [PATCH 044/460] (test) palm/stream --- litellm/tests/test_completion.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index 54bc53326..484586325 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -505,7 +505,7 @@ def test_completion_openai_with_optional_params(): except Exception as e: pytest.fail(f"Error occurred: {e}") -test_completion_openai_with_optional_params() +# test_completion_openai_with_optional_params() def test_completion_openai_litellm_key(): try: From 74d520b1b53b1bd29ebf30ceff69873385861287 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 4 Dec 2023 15:15:39 -0800 Subject: [PATCH 045/460] (docs) sagemaker - clarify max tokens --- docs/my-website/docs/completion/input.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/my-website/docs/completion/input.md b/docs/my-website/docs/completion/input.md index 30bd20f84..02e3d38d7 100644 --- a/docs/my-website/docs/completion/input.md +++ b/docs/my-website/docs/completion/input.md @@ -40,7 +40,7 @@ This list is constantly being updated. |AI21| ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | |VertexAI| ✅ | ✅ | | ✅ | | | | | | | |Bedrock| ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | -|Sagemaker| ✅ | ✅ | | ✅ | | | | | | | +|Sagemaker| ✅ | ✅ (only `jumpstart llama2`) | | ✅ | | | | | | | |TogetherAI| ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | |AlephAlpha| ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | |Palm| ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | From bc691cbbcda1fafe8fe1b930c7d14e017484bb1e Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 4 Dec 2023 15:19:47 -0800 Subject: [PATCH 046/460] (fix) streaming init response_obj as {} --- litellm/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/utils.py b/litellm/utils.py index 9505addf5..d3a9b8bb0 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -5125,7 +5125,7 @@ class CustomStreamWrapper: def chunk_creator(self, chunk): model_response = ModelResponse(stream=True, model=self.model) model_response.choices[0].finish_reason = None - response_obj = None + response_obj = {} try: # return this for all models completion_obj = {"content": ""} From b7281825d3c65c220178b6e33a84f09ffb8be59a Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 4 Dec 2023 15:20:06 -0800 Subject: [PATCH 047/460] (test) add streaming sagemaker test --- litellm/tests/test_completion.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index 484586325..15b547a85 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -1053,9 +1053,12 @@ def test_completion_chat_sagemaker(): response = completion( model="sagemaker/jumpstart-dft-meta-textgeneration-llama-2-7b-f", messages=messages, + stream=True, ) # Add any assertions here to check the response print(response) + for chunk in response: + print(chunk) except Exception as e: pytest.fail(f"Error occurred: {e}") # test_completion_chat_sagemaker() From 9b3a0c69f53f5a58879ba11de3b7c3a4f072cc13 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 4 Dec 2023 15:24:46 -0800 Subject: [PATCH 048/460] (fix) config testing --- litellm/tests/test_proxy_server.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/litellm/tests/test_proxy_server.py b/litellm/tests/test_proxy_server.py index 4a10ecbf8..a525f01bf 100644 --- a/litellm/tests/test_proxy_server.py +++ b/litellm/tests/test_proxy_server.py @@ -173,17 +173,18 @@ def test_load_router_config(): try: print("testing reading config") # this is a basic config.yaml with only a model - result = load_router_config(router=None, config_file_path="example_config_yaml/simple_config.yaml") + filepath = os.path.dirname(os.path.abspath(__file__)) + result = load_router_config(router=None, config_file_path=f"{filepath}/example_config_yaml/simple_config.yaml") print(result) assert len(result[1]) == 1 # this is a load balancing config yaml - result = load_router_config(router=None, config_file_path="example_config_yaml/azure_config.yaml") + result = load_router_config(router=None, config_file_path=f"{filepath}/example_config_yaml/azure_config.yaml") print(result) assert len(result[1]) == 2 # config with general settings - custom callbacks - result = load_router_config(router=None, config_file_path="example_config_yaml/azure_config.yaml") + result = load_router_config(router=None, config_file_path=f"{filepath}/example_config_yaml/azure_config.yaml") print(result) assert len(result[1]) == 2 From bbdfd143b899ea961f5cb611f38ad244c7afa743 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 4 Dec 2023 15:47:27 -0800 Subject: [PATCH 049/460] (docs) input --- docs/my-website/docs/completion/input.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/my-website/docs/completion/input.md b/docs/my-website/docs/completion/input.md index 02e3d38d7..7902275ab 100644 --- a/docs/my-website/docs/completion/input.md +++ b/docs/my-website/docs/completion/input.md @@ -6,7 +6,7 @@ import TabItem from '@theme/TabItem'; ## Common Params LiteLLM accepts and translates the [OpenAI Chat Completion params](https://platform.openai.com/docs/api-reference/chat/create) across all providers. -### usage +### Usage ```python import litellm @@ -23,7 +23,7 @@ response = litellm.completion( print(response) ``` -### translated OpenAI params +### Translated OpenAI params This is a list of openai params we translate across providers. This list is constantly being updated. From a9905bcd0a482995c6a3c564e36270335e3b4126 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 4 Dec 2023 16:00:04 -0800 Subject: [PATCH 050/460] (test) fix config --- litellm/tests/test_config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/tests/test_config.yaml b/litellm/tests/test_config.yaml index a38dc7615..34b3d928a 100644 --- a/litellm/tests/test_config.yaml +++ b/litellm/tests/test_config.yaml @@ -12,7 +12,7 @@ model_list: - model_name: "azure-model" litellm_params: model: "azure/gpt-turbo" - api_key: "os.environ/AZURE-FRANCE-API-KEY" + api_key: "os.environ/AZURE_FRANCE_API_KEY" api_base: "https://openai-france-1234.openai.azure.com" litellm_settings: From 1247afb7a4219664b999cc820e710c79f0357f6b Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 4 Dec 2023 16:09:31 -0800 Subject: [PATCH 051/460] (feat) router: set max_retries + timeout --- litellm/router.py | 37 +++++++++++++++++++++++++++++++++---- 1 file changed, 33 insertions(+), 4 deletions(-) diff --git a/litellm/router.py b/litellm/router.py index fad67cf6d..5ce0d409b 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -857,6 +857,23 @@ class Router: if api_version and api_version.startswith("os.environ/"): api_version_env_name = api_version.replace("os.environ/", "") api_version = litellm.get_secret(api_version_env_name) + + timeout = litellm_params.get("timeout") + if timeout and timeout.startswith("os.environ/"): + timeout_env_name = api_version.replace("os.environ/", "") + timeout = litellm.get_secret(timeout_env_name) + + stream_timeout = litellm_params.get("stream_timeout") + if stream_timeout and stream_timeout.startswith("os.environ/"): + stream_timeout_env_name = api_version.replace("os.environ/", "") + stream_timeout = litellm.get_secret(stream_timeout_env_name) + + max_retries = litellm_params.get("max_retries") + if max_retries and max_retries.startswith("os.environ/"): + max_retries_env_name = api_version.replace("os.environ/", "") + max_retries = litellm.get_secret(max_retries_env_name) + + self.print_verbose(f"Initializing OpenAI Client for {model_name}, {str(api_base)}") if "azure" in model_name: if api_version is None: @@ -869,32 +886,44 @@ class Router: model["async_client"] = openai.AsyncAzureOpenAI( api_key=api_key, base_url=api_base, - api_version=api_version + api_version=api_version, + timeout=timeout, + max_retries=max_retries ) model["client"] = openai.AzureOpenAI( api_key=api_key, base_url=api_base, - api_version=api_version + api_version=api_version, + timeout=timeout, + max_retries=max_retries ) else: model["async_client"] = openai.AsyncAzureOpenAI( api_key=api_key, azure_endpoint=api_base, - api_version=api_version + api_version=api_version, + timeout=timeout, + max_retries=max_retries ) model["client"] = openai.AzureOpenAI( api_key=api_key, azure_endpoint=api_base, - api_version=api_version + api_version=api_version, + timeout=timeout, + max_retries=max_retries ) else: model["async_client"] = openai.AsyncOpenAI( api_key=api_key, base_url=api_base, + timeout=timeout, + max_retries=max_retries ) model["client"] = openai.OpenAI( api_key=api_key, base_url=api_base, + timeout=timeout, + max_retries=max_retries ) ############ End of initializing Clients for OpenAI/Azure ################### model_id = "" From e0ccb281d8941ee0992bc26c4a5ad48616125eaf Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Mon, 4 Dec 2023 16:36:21 -0800 Subject: [PATCH 052/460] feat(utils.py): add async success callbacks for custom functions --- litellm/__init__.py | 1 + litellm/integrations/custom_logger.py | 22 ++++- litellm/proxy/proxy_server.py | 44 +++------ litellm/router.py | 2 + litellm/tests/test_custom_logger.py | 113 +++++---------------- litellm/tests/test_proxy_server_cost.py | 125 ++++++++++++++++++++++-- litellm/tests/test_proxy_server_keys.py | 1 + litellm/utils.py | 62 ++++++++++-- 8 files changed, 232 insertions(+), 138 deletions(-) diff --git a/litellm/__init__.py b/litellm/__init__.py index b494268ad..b9cf85a55 100644 --- a/litellm/__init__.py +++ b/litellm/__init__.py @@ -8,6 +8,7 @@ input_callback: List[Union[str, Callable]] = [] success_callback: List[Union[str, Callable]] = [] failure_callback: List[Union[str, Callable]] = [] callbacks: List[Callable] = [] +_async_success_callback: List[Callable] = [] # internal variable - async custom callbacks are routed here. pre_call_rules: List[Callable] = [] post_call_rules: List[Callable] = [] set_verbose = False diff --git a/litellm/integrations/custom_logger.py b/litellm/integrations/custom_logger.py index af3ea050f..e502439a9 100644 --- a/litellm/integrations/custom_logger.py +++ b/litellm/integrations/custom_logger.py @@ -8,7 +8,7 @@ dotenv.load_dotenv() # Loading env variables using dotenv import traceback -class CustomLogger: +class CustomLogger: # https://docs.litellm.ai/docs/observability/custom_callback#callback-class # Class variables or attributes def __init__(self): pass @@ -29,7 +29,7 @@ class CustomLogger: pass - #### DEPRECATED #### + #### SINGLE-USE #### - https://docs.litellm.ai/docs/observability/custom_callback#using-your-custom-callback-function def log_input_event(self, model, messages, kwargs, print_verbose, callback_func): try: @@ -63,3 +63,21 @@ class CustomLogger: # traceback.print_exc() print_verbose(f"Custom Logger Error - {traceback.format_exc()}") pass + + async def async_log_event(self, kwargs, response_obj, start_time, end_time, print_verbose, callback_func): + # Method definition + try: + kwargs["log_event_type"] = "post_api_call" + await callback_func( + kwargs, # kwargs to func + response_obj, + start_time, + end_time, + ) + print_verbose( + f"Custom Logger - final response object: {response_obj}" + ) + except: + # traceback.print_exc() + print_verbose(f"Custom Logger Error - {traceback.format_exc()}") + pass diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index ae3ec5298..8e9ddc9fa 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -272,10 +272,16 @@ api_key_header = APIKeyHeader(name="Authorization", auto_error=False) async def user_api_key_auth(request: Request, api_key: str = fastapi.Security(api_key_header)): global master_key, prisma_client, llm_model_list + print(f"master_key - {master_key}; api_key - {api_key}") if master_key is None: - return { - "api_key": None - } + if isinstance(api_key, str): + return { + "api_key": api_key.replace("Bearer ", "") + } + else: + return { + "api_key": api_key + } try: if api_key is None: raise Exception("No api key passed in.") @@ -382,8 +388,8 @@ def load_from_azure_key_vault(use_azure_key_vault: bool = False): print("Error when loading keys from Azure Key Vault. Ensure you run `pip install azure-identity azure-keyvault-secrets`") def cost_tracking(): - global prisma_client, master_key - if prisma_client is not None and master_key is not None: + global prisma_client + if prisma_client is not None: if isinstance(litellm.success_callback, list): print("setting litellm success callback to track cost") if (track_cost_callback) not in litellm.success_callback: # type: ignore @@ -391,7 +397,7 @@ def cost_tracking(): else: litellm.success_callback = track_cost_callback # type: ignore -def track_cost_callback( +async def track_cost_callback( kwargs, # kwargs to completion completion_response: litellm.ModelResponse, # response from completion start_time = None, @@ -420,31 +426,13 @@ def track_cost_callback( response_cost = litellm.completion_cost(completion_response=completion_response, completion=input_text) print("regular response_cost", response_cost) user_api_key = kwargs["litellm_params"]["metadata"].get("user_api_key", None) + print(f"user_api_key - {user_api_key}; prisma_client - {prisma_client}") if user_api_key and prisma_client: - # asyncio.run(update_prisma_database(user_api_key, response_cost)) - # Create new event loop for async function execution in the new thread - new_loop = asyncio.new_event_loop() - asyncio.set_event_loop(new_loop) - try: - # Run the async function using the newly created event loop - existing_spend_obj = new_loop.run_until_complete(prisma_client.get_data(token=user_api_key)) - if existing_spend_obj is None: - existing_spend = 0 - else: - existing_spend = existing_spend_obj.spend - # Calculate the new cost by adding the existing cost and response_cost - new_spend = existing_spend + response_cost - print(f"new cost: {new_spend}") - # Update the cost column for the given token - new_loop.run_until_complete(prisma_client.update_data(token=user_api_key, data={"spend": new_spend})) - print(f"Prisma database updated for token {user_api_key}. New cost: {new_spend}") - except Exception as e: - print(f"error in creating async loop - {str(e)}") + await update_prisma_database(token=user_api_key, response_cost=response_cost) except Exception as e: print(f"error in tracking cost callback - {str(e)}") async def update_prisma_database(token, response_cost): - try: print(f"Enters prisma db call, token: {token}") # Fetch the existing cost for the given token @@ -460,8 +448,6 @@ async def update_prisma_database(token, response_cost): print(f"new cost: {new_spend}") # Update the cost column for the given token await prisma_client.update_data(token=token, data={"spend": new_spend}) - print(f"Prisma database updated for token {token}. New cost: {new_spend}") - except Exception as e: print(f"Error updating Prisma database: {traceback.format_exc()}") pass @@ -648,7 +634,7 @@ async def generate_key_helper_fn(duration_str: Optional[str], models: list, alia except Exception as e: traceback.print_exc() raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR) - return {"token": new_verification_token.token, "expires": new_verification_token.expires, "user_id": user_id} + return {"token": token, "expires": new_verification_token.expires, "user_id": user_id} async def delete_verification_token(tokens: List): global prisma_client diff --git a/litellm/router.py b/litellm/router.py index 5ce0d409b..5bf06760e 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -876,6 +876,7 @@ class Router: self.print_verbose(f"Initializing OpenAI Client for {model_name}, {str(api_base)}") if "azure" in model_name: + self.print_verbose(f"Initializing Azure OpenAI Client for {model_name}, {str(api_base)}, {api_key}") if api_version is None: api_version = "2023-07-01-preview" if "gateway.ai.cloudflare.com" in api_base: @@ -913,6 +914,7 @@ class Router: max_retries=max_retries ) else: + self.print_verbose(f"Initializing OpenAI Client for {model_name}, {str(api_base)}") model["async_client"] = openai.AsyncOpenAI( api_key=api_key, base_url=api_base, diff --git a/litellm/tests/test_custom_logger.py b/litellm/tests/test_custom_logger.py index 7e134bd26..f88bc6868 100644 --- a/litellm/tests/test_custom_logger.py +++ b/litellm/tests/test_custom_logger.py @@ -1,5 +1,5 @@ ### What this tests #### -import sys, os, time +import sys, os, time, inspect, asyncio import pytest sys.path.insert(0, os.path.abspath('../..')) @@ -7,6 +7,7 @@ from litellm import completion, embedding import litellm from litellm.integrations.custom_logger import CustomLogger +async_success = False class MyCustomHandler(CustomLogger): success: bool = False failure: bool = False @@ -28,24 +29,29 @@ class MyCustomHandler(CustomLogger): print(f"On Failure") self.failure = True -# def test_chat_openai(): -# try: -# customHandler = MyCustomHandler() -# litellm.callbacks = [customHandler] -# response = completion(model="gpt-3.5-turbo", -# messages=[{ -# "role": "user", -# "content": "Hi 👋 - i'm openai" -# }], -# stream=True) -# time.sleep(1) -# assert customHandler.success == True -# except Exception as e: -# pytest.fail(f"An error occurred - {str(e)}") -# pass +async def async_test_logging_fn(kwargs, completion_obj, start_time, end_time): + global async_success + print(f"ON ASYNC LOGGING") + async_success = True -# test_chat_openai() +@pytest.mark.asyncio +async def test_chat_openai(): + try: + # litellm.set_verbose = True + litellm.success_callback = [async_test_logging_fn] + response = await litellm.acompletion(model="gpt-3.5-turbo", + messages=[{ + "role": "user", + "content": "Hi 👋 - i'm openai" + }], + stream=True) + async for chunk in response: + continue + assert async_success == True + except Exception as e: + print(e) + pytest.fail(f"An error occurred - {str(e)}") def test_completion_azure_stream_moderation_failure(): try: @@ -71,76 +77,3 @@ def test_completion_azure_stream_moderation_failure(): assert customHandler.failure == True except Exception as e: pytest.fail(f"Error occurred: {e}") - -# test_completion_azure_stream_moderation_failure() - - -# def custom_callback( -# kwargs, -# completion_response, -# start_time, -# end_time, -# ): -# print( -# "in custom callback func" -# ) -# print("kwargs", kwargs) -# print(completion_response) -# print(start_time) -# print(end_time) -# if "complete_streaming_response" in kwargs: -# print("\n\n complete response\n\n") -# complete_streaming_response = kwargs["complete_streaming_response"] -# print(kwargs["complete_streaming_response"]) -# usage = complete_streaming_response["usage"] -# print("usage", usage) -# def send_slack_alert( -# kwargs, -# completion_response, -# start_time, -# end_time, -# ): -# print( -# "in custom slack callback func" -# ) -# import requests -# import json - -# # Define the Slack webhook URL -# slack_webhook_url = os.environ['SLACK_WEBHOOK_URL'] # "https://hooks.slack.com/services/<>/<>/<>" - -# # Define the text payload, send data available in litellm custom_callbacks -# text_payload = f"""LiteLLM Logging: kwargs: {str(kwargs)}\n\n, response: {str(completion_response)}\n\n, start time{str(start_time)} end time: {str(end_time)} -# """ -# payload = { -# "text": text_payload -# } - -# # Set the headers -# headers = { -# "Content-type": "application/json" -# } - -# # Make the POST request -# response = requests.post(slack_webhook_url, json=payload, headers=headers) - -# # Check the response status -# if response.status_code == 200: -# print("Message sent successfully to Slack!") -# else: -# print(f"Failed to send message to Slack. Status code: {response.status_code}") -# print(response.json()) - -# def get_transformed_inputs( -# kwargs, -# ): -# params_to_model = kwargs["additional_args"]["complete_input_dict"] -# print("params to model", params_to_model) - -# litellm.success_callback = [custom_callback, send_slack_alert] -# litellm.failure_callback = [send_slack_alert] - - -# litellm.set_verbose = False - -# # litellm.input_callback = [get_transformed_inputs] diff --git a/litellm/tests/test_proxy_server_cost.py b/litellm/tests/test_proxy_server_cost.py index 7688e5899..b127e72e3 100644 --- a/litellm/tests/test_proxy_server_cost.py +++ b/litellm/tests/test_proxy_server_cost.py @@ -1,27 +1,138 @@ # #### What this tests #### # # This tests the cost tracking function works with consecutive calls (~10 consecutive calls) -# import sys, os +# import sys, os, asyncio # import traceback # import pytest # sys.path.insert( # 0, os.path.abspath("../..") # ) # Adds the parent directory to the system path +# import dotenv +# dotenv.load_dotenv() # import litellm +# from fastapi.testclient import TestClient +# from fastapi import FastAPI +# from litellm.proxy.proxy_server import router, save_worker_config, startup_event # Replace with the actual module where your FastAPI router is defined +# filepath = os.path.dirname(os.path.abspath(__file__)) +# config_fp = f"{filepath}/test_config.yaml" +# save_worker_config(config=config_fp, model=None, alias=None, api_base=None, api_version=None, debug=True, temperature=None, max_tokens=None, request_timeout=600, max_budget=None, telemetry=False, drop_params=True, add_function_to_prompt=False, headers=None, save=False, use_queue=False) +# app = FastAPI() +# app.include_router(router) # Include your router in the test app +# @app.on_event("startup") +# async def wrapper_startup_event(): +# await startup_event() -# async def test_proxy_cost_tracking(): +# # Here you create a fixture that will be used by your tests +# # Make sure the fixture returns TestClient(app) +# @pytest.fixture(autouse=True) +# def client(): +# with TestClient(app) as client: +# yield client + +# @pytest.mark.asyncio +# async def test_proxy_cost_tracking(client): # """ -# Get expected cost. +# Get min cost. # Create new key. # Run 10 parallel calls. # Check cost for key at the end. -# assert it's = expected cost. +# assert it's > min cost. # """ # model = "gpt-3.5-turbo" # messages = [{"role": "user", "content": "Hey, how's it going?"}] -# number_of_calls = 10 -# expected_cost = litellm.completion_cost(model=model, messages=messages) * number_of_calls -# async def litellm_acompletion(): +# number_of_calls = 1 +# min_cost = litellm.completion_cost(model=model, messages=messages) * number_of_calls +# try: +# ### CREATE NEW KEY ### +# test_data = { +# "models": ["azure-model"], +# } +# # Your bearer token +# token = os.getenv("PROXY_MASTER_KEY") +# headers = { +# "Authorization": f"Bearer {token}" +# } +# create_new_key = client.post("/key/generate", json=test_data, headers=headers) +# key = create_new_key.json()["key"] +# print(f"received key: {key}") +# ### MAKE PARALLEL CALLS ### +# async def test_chat_completions(): +# # Your test data +# test_data = { +# "model": "azure-model", +# "messages": messages +# } +# tmp_headers = { +# "Authorization": f"Bearer {key}" +# } +# response = client.post("/v1/chat/completions", json=test_data, headers=tmp_headers) + +# assert response.status_code == 200 +# result = response.json() +# print(f"Received response: {result}") +# tasks = [test_chat_completions() for _ in range(number_of_calls)] +# chat_completions = await asyncio.gather(*tasks) +# ### CHECK SPEND ### +# get_key_spend = client.get(f"/key/info?key={key}", headers=headers) + +# assert get_key_spend.json()["info"]["spend"] > min_cost +# # print(f"chat_completions: {chat_completions}") +# # except Exception as e: +# # pytest.fail(f"LiteLLM Proxy test failed. Exception - {str(e)}") + +# #### JUST TEST LOCAL PROXY SERVER + +# import requests, os +# from concurrent.futures import ThreadPoolExecutor +# import dotenv +# dotenv.load_dotenv() + +# api_url = "http://0.0.0.0:8000/chat/completions" + +# def make_api_call(api_url): +# # Your test data +# test_data = { +# "model": "azure-model", +# "messages": [ +# { +# "role": "user", +# "content": "hi" +# }, +# ], +# "max_tokens": 10, +# } +# # Your bearer token +# token = os.getenv("PROXY_MASTER_KEY") + +# headers = { +# "Authorization": f"Bearer {token}" +# } +# print("testing proxy server") +# response = requests.post(api_url, json=test_data, headers=headers) +# return response.json() + +# # Number of parallel API calls +# num_parallel_calls = 3 + +# # List to store results +# results = [] + +# # Create a ThreadPoolExecutor +# with ThreadPoolExecutor() as executor: +# # Submit the API calls concurrently +# futures = [executor.submit(make_api_call, api_url) for _ in range(num_parallel_calls)] + +# # Gather the results as they become available +# for future in futures: +# try: +# result = future.result() +# results.append(result) +# except Exception as e: +# print(f"Error: {e}") + +# # Print the results +# for idx, result in enumerate(results, start=1): +# print(f"Result {idx}: {result}") diff --git a/litellm/tests/test_proxy_server_keys.py b/litellm/tests/test_proxy_server_keys.py index 806b5f43e..a2dd396c0 100644 --- a/litellm/tests/test_proxy_server_keys.py +++ b/litellm/tests/test_proxy_server_keys.py @@ -59,6 +59,7 @@ def test_add_new_key(client): print(f"response: {response.text}") assert response.status_code == 200 result = response.json() + assert result["key"].startswith("sk-") print(f"Received response: {result}") except Exception as e: pytest.fail("LiteLLM Proxy test failed. Exception", e) diff --git a/litellm/utils.py b/litellm/utils.py index d3a9b8bb0..892fc010c 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -741,13 +741,9 @@ class Logging: f"LiteLLM.LoggingError: [Non-Blocking] Exception occurred while logging {traceback.format_exc()}" ) pass - - def success_handler(self, result=None, start_time=None, end_time=None, **kwargs): - print_verbose( - f"Logging Details LiteLLM-Success Call" - ) - try: + def _success_handler_helper_fn(self, result=None, start_time=None, end_time=None): + try: if start_time is None: start_time = self.start_time if end_time is None: @@ -776,6 +772,18 @@ class Logging: float_diff = float(time_diff) litellm._current_cost += litellm.completion_cost(model=self.model, prompt="", completion=result["content"], total_time=float_diff) + return start_time, end_time, result, complete_streaming_response + except: + pass + + def success_handler(self, result=None, start_time=None, end_time=None, **kwargs): + print_verbose( + f"Logging Details LiteLLM-Success Call" + ) + try: + start_time, end_time, result, complete_streaming_response = self._success_handler_helper_fn(start_time=start_time, end_time=end_time, result=result) + print_verbose(f"success callbacks: {litellm.success_callback}") + for callback in litellm.success_callback: try: if callback == "lite_debugger": @@ -969,6 +977,29 @@ class Logging: ) pass + async def async_success_handler(self, result=None, start_time=None, end_time=None, **kwargs): + """ + Implementing async callbacks, to handle asyncio event loop issues when custom integrations need to use async functions. + """ + start_time, end_time, result, complete_streaming_response = self._success_handler_helper_fn(start_time=start_time, end_time=end_time, result=result) + print_verbose(f"success callbacks: {litellm.success_callback}") + + for callback in litellm._async_success_callback: + try: + if callable(callback): # custom logger functions + await customLogger.async_log_event( + kwargs=self.model_call_details, + response_obj=result, + start_time=start_time, + end_time=end_time, + print_verbose=print_verbose, + callback_func=callback + ) + except: + print_verbose( + f"LiteLLM.LoggingError: [Non-Blocking] Exception occurred while success logging {traceback.format_exc()}" + ) + def failure_handler(self, exception, traceback_exception, start_time=None, end_time=None): print_verbose( f"Logging Details LiteLLM-Failure Call" @@ -1185,6 +1216,17 @@ def client(original_function): callback_list=callback_list, function_id=function_id ) + ## ASYNC CALLBACKS + if len(litellm.success_callback) > 0: + removed_async_items = [] + for index, callback in enumerate(litellm.success_callback): + if inspect.iscoroutinefunction(callback): + litellm._async_success_callback.append(callback) + removed_async_items.append(index) + + # Pop the async items from success_callback in reverse order to avoid index issues + for index in reversed(removed_async_items): + litellm.success_callback.pop(index) if add_breadcrumb: add_breadcrumb( category="litellm.llm_call", @@ -1373,7 +1415,6 @@ def client(original_function): start_time = datetime.datetime.now() result = None logging_obj = kwargs.get("litellm_logging_obj", None) - # only set litellm_call_id if its not in kwargs if "litellm_call_id" not in kwargs: kwargs["litellm_call_id"] = str(uuid.uuid4()) @@ -1426,8 +1467,8 @@ def client(original_function): # [OPTIONAL] ADD TO CACHE if litellm.caching or litellm.caching_with_models or litellm.cache != None: # user init a cache object litellm.cache.add_cache(result, *args, **kwargs) - - # LOG SUCCESS - handle streaming success logging in the _next_ object, remove `handle_success` once it's deprecated + # LOG SUCCESS - handle streaming success logging in the _next_ object + asyncio.create_task(logging_obj.async_success_handler(result, start_time, end_time)) threading.Thread(target=logging_obj.success_handler, args=(result, start_time, end_time)).start() # RETURN RESULT if isinstance(result, ModelResponse): @@ -1465,7 +1506,6 @@ def client(original_function): logging_obj.failure_handler(e, traceback_exception, start_time, end_time) # DO NOT MAKE THREADED - router retry fallback relies on this! raise e - # Use httpx to determine if the original function is a coroutine is_coroutine = inspect.iscoroutinefunction(original_function) # Return the appropriate wrapper based on the original function type @@ -5370,6 +5410,8 @@ class CustomStreamWrapper: processed_chunk = self.chunk_creator(chunk=chunk) if processed_chunk is None: continue + ## LOGGING + asyncio.create_task(self.logging_obj.async_success_handler(processed_chunk,)) return processed_chunk raise StopAsyncIteration else: # temporary patch for non-aiohttp async calls From 7adb8f493d0a9b3af16912075c2e45692e4209ea Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Mon, 4 Dec 2023 17:01:46 -0800 Subject: [PATCH 053/460] docs(custom_callback.md): add async callbacks to docs --- .../docs/observability/custom_callback.md | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/docs/my-website/docs/observability/custom_callback.md b/docs/my-website/docs/observability/custom_callback.md index 580bd819a..78b7499a8 100644 --- a/docs/my-website/docs/observability/custom_callback.md +++ b/docs/my-website/docs/observability/custom_callback.md @@ -85,6 +85,43 @@ print(response) ``` +## Async Callback Functions + +LiteLLM currently supports just async success callback functions for async completion/embedding calls. + +```python +import asyncio, litellm + +async def async_test_logging_fn(kwargs, completion_obj, start_time, end_time): + print(f"On Async Success!") + +async def test_chat_openai(): + try: + # litellm.set_verbose = True + litellm.success_callback = [async_test_logging_fn] + response = await litellm.acompletion(model="gpt-3.5-turbo", + messages=[{ + "role": "user", + "content": "Hi 👋 - i'm openai" + }], + stream=True) + async for chunk in response: + continue + except Exception as e: + print(e) + pytest.fail(f"An error occurred - {str(e)}") + +asyncio.run(test_chat_openai()) +``` + +:::info + +We're actively trying to expand this to other event types. [Tell us if you need this!](https://github.com/BerriAI/litellm/issues/1007) + + + +::: + ## What's in kwargs? Notice we pass in a kwargs argument to custom callback. From cba98cf530df53723873f1841ec7840218fbf302 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 4 Dec 2023 16:30:02 -0800 Subject: [PATCH 054/460] (test) init router with 4 clients --- litellm/tests/test_router_init.py | 51 +++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 litellm/tests/test_router_init.py diff --git a/litellm/tests/test_router_init.py b/litellm/tests/test_router_init.py new file mode 100644 index 000000000..806894081 --- /dev/null +++ b/litellm/tests/test_router_init.py @@ -0,0 +1,51 @@ +# this tests if the router is intiaized correctly +import sys, os, time +import traceback, asyncio +import pytest +sys.path.insert( + 0, os.path.abspath("../..") +) # Adds the parent directory to the system path +import litellm +from litellm import Router +from concurrent.futures import ThreadPoolExecutor +from collections import defaultdict +from dotenv import load_dotenv +load_dotenv() + + +# everytime we load the router we should have 4 clients: +# Async +# Sync +# Async + Stream +# Sync + Stream + + +def test_init_clients(): + litellm.set_verbose = True + try: + model_list = [ + { + "model_name": "gpt-3.5-turbo", + "litellm_params": { + "model": "azure/chatgpt-v-2", + "api_key": os.getenv("AZURE_API_KEY"), + "api_version": os.getenv("AZURE_API_VERSION"), + "api_base": os.getenv("AZURE_API_BASE") + }, + }, + ] + + + router = Router(model_list=model_list) + print(router.model_list) + for elem in router.model_list: + print(elem) + assert elem["client"] is not None + assert elem["async_client"] is not None + assert elem["stream_client"] is not None + assert elem["stream_async_client"] is not None + + except Exception as e: + traceback.print_exc() + pytest.fail(f"Error occurred: {e}") +# test_init_clients() From 886b52d4480495514be7aa9054af01b46b6aa7a6 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 4 Dec 2023 16:59:48 -0800 Subject: [PATCH 055/460] (test) init router clients --- litellm/tests/test_router_init.py | 97 ++++++++++++++++++++++--------- 1 file changed, 68 insertions(+), 29 deletions(-) diff --git a/litellm/tests/test_router_init.py b/litellm/tests/test_router_init.py index 806894081..542242976 100644 --- a/litellm/tests/test_router_init.py +++ b/litellm/tests/test_router_init.py @@ -1,4 +1,4 @@ -# this tests if the router is intiaized correctly +# this tests if the router is initialized correctly import sys, os, time import traceback, asyncio import pytest @@ -12,40 +12,79 @@ from collections import defaultdict from dotenv import load_dotenv load_dotenv() - -# everytime we load the router we should have 4 clients: +# every time we load the router we should have 4 clients: # Async # Sync # Async + Stream # Sync + Stream - def test_init_clients(): - litellm.set_verbose = True - try: - model_list = [ - { - "model_name": "gpt-3.5-turbo", - "litellm_params": { - "model": "azure/chatgpt-v-2", - "api_key": os.getenv("AZURE_API_KEY"), - "api_version": os.getenv("AZURE_API_VERSION"), - "api_base": os.getenv("AZURE_API_BASE") - }, - }, - ] + litellm.set_verbose = True + try: + print("testing init 4 clients with diff timeouts") + model_list = [ + { + "model_name": "gpt-3.5-turbo", + "litellm_params": { + "model": "azure/chatgpt-v-2", + "api_key": os.getenv("AZURE_API_KEY"), + "api_version": os.getenv("AZURE_API_VERSION"), + "api_base": os.getenv("AZURE_API_BASE"), + "timeout": 0.01, + "stream_timeout": 0.000_001, + "max_retries": 7 + }, + }, + ] + router = Router(model_list=model_list) + for elem in router.model_list: + assert elem["client"] is not None + assert elem["async_client"] is not None + assert elem["stream_client"] is not None + assert elem["stream_async_client"] is not None + + # check if timeout for stream/non stream clients is set correctly + async_client = elem["async_client"] + stream_async_client = elem["stream_async_client"] + + assert async_client.timeout == 0.01 + assert stream_async_client.timeout == 0.000_001 + print("PASSED !") + + except Exception as e: + traceback.print_exc() + pytest.fail(f"Error occurred: {e}") + +test_init_clients() - router = Router(model_list=model_list) - print(router.model_list) - for elem in router.model_list: - print(elem) - assert elem["client"] is not None - assert elem["async_client"] is not None - assert elem["stream_client"] is not None - assert elem["stream_async_client"] is not None +def test_init_clients_basic(): + litellm.set_verbose = True + try: + print("Test basic client init") + model_list = [ + { + "model_name": "gpt-3.5-turbo", + "litellm_params": { + "model": "azure/chatgpt-v-2", + "api_key": os.getenv("AZURE_API_KEY"), + "api_version": os.getenv("AZURE_API_VERSION"), + "api_base": os.getenv("AZURE_API_BASE"), + }, + }, + ] + router = Router(model_list=model_list) + for elem in router.model_list: + assert elem["client"] is not None + assert elem["async_client"] is not None + assert elem["stream_client"] is not None + assert elem["stream_async_client"] is not None + print("PASSED !") + + # see if we can init clients without timeout or max retries set + except Exception as e: + traceback.print_exc() + pytest.fail(f"Error occurred: {e}") + +test_init_clients_basic() - except Exception as e: - traceback.print_exc() - pytest.fail(f"Error occurred: {e}") -# test_init_clients() From 19646091fdc8c2e315d9e2e2c4e2489eabd521c6 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 4 Dec 2023 17:29:07 -0800 Subject: [PATCH 056/460] (feat) router: init stream, async stream, async, clients --- litellm/router.py | 97 +++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 85 insertions(+), 12 deletions(-) diff --git a/litellm/router.py b/litellm/router.py index 5bf06760e..edae794c9 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -188,7 +188,7 @@ class Router: data["model"] = original_model_string[:index_of_model_id] else: data["model"] = original_model_string - model_client = deployment.get("client", None) + model_client = self._get_client(deployment=deployment, kwargs=kwargs) return litellm.completion(**{**data, "messages": messages, "caching": self.cache_responses, "client": model_client, **kwargs}) except Exception as e: raise e @@ -234,7 +234,7 @@ class Router: data["model"] = original_model_string[:index_of_model_id] else: data["model"] = original_model_string - model_client = deployment.get("async_client", None) + model_client = self._get_client(deployment=deployment, kwargs=kwargs, client_type="async") self.total_calls[original_model_string] +=1 response = await litellm.acompletion(**{**data, "messages": messages, "caching": self.cache_responses, "client": model_client, **kwargs}) self.success_calls[original_model_string] +=1 @@ -303,7 +303,7 @@ class Router: data["model"] = original_model_string[:index_of_model_id] else: data["model"] = original_model_string - model_client = deployment.get("client", None) + model_client = self._get_client(deployment=deployment, kwargs=kwargs) # call via litellm.embedding() return litellm.embedding(**{**data, "input": input, "caching": self.cache_responses, "client": model_client, **kwargs}) @@ -328,7 +328,7 @@ class Router: data["model"] = original_model_string[:index_of_model_id] else: data["model"] = original_model_string - model_client = deployment.get("async_client", None) + model_client = self._get_client(deployment=deployment, kwargs=kwargs, client_type="async") return await litellm.aembedding(**{**data, "input": input, "caching": self.cache_responses, "client": model_client, **kwargs}) @@ -857,19 +857,19 @@ class Router: if api_version and api_version.startswith("os.environ/"): api_version_env_name = api_version.replace("os.environ/", "") api_version = litellm.get_secret(api_version_env_name) - - timeout = litellm_params.get("timeout") - if timeout and timeout.startswith("os.environ/"): + + timeout = litellm_params.pop("timeout", None) + if isinstance(timeout, str) and timeout.startswith("os.environ/"): timeout_env_name = api_version.replace("os.environ/", "") timeout = litellm.get_secret(timeout_env_name) - stream_timeout = litellm_params.get("stream_timeout") - if stream_timeout and stream_timeout.startswith("os.environ/"): + stream_timeout = litellm_params.pop("stream_timeout", timeout) # if no stream_timeout is set, default to timeout + if isinstance(stream_timeout, str) and stream_timeout.startswith("os.environ/"): stream_timeout_env_name = api_version.replace("os.environ/", "") stream_timeout = litellm.get_secret(stream_timeout_env_name) - - max_retries = litellm_params.get("max_retries") - if max_retries and max_retries.startswith("os.environ/"): + + max_retries = litellm_params.pop("max_retries", 2) + if isinstance(max_retries, str) and max_retries.startswith("os.environ/"): max_retries_env_name = api_version.replace("os.environ/", "") max_retries = litellm.get_secret(max_retries_env_name) @@ -898,6 +898,22 @@ class Router: timeout=timeout, max_retries=max_retries ) + + # streaming clients can have diff timeouts + model["stream_async_client"] = openai.AsyncAzureOpenAI( + api_key=api_key, + base_url=api_base, + api_version=api_version, + timeout=stream_timeout, + max_retries=max_retries + ) + model["stream_client"] = openai.AzureOpenAI( + api_key=api_key, + base_url=api_base, + api_version=api_version, + timeout=stream_timeout, + max_retries=max_retries + ) else: model["async_client"] = openai.AsyncAzureOpenAI( api_key=api_key, @@ -913,6 +929,23 @@ class Router: timeout=timeout, max_retries=max_retries ) + # streaming clients should have diff timeouts + model["stream_async_client"] = openai.AsyncAzureOpenAI( + api_key=api_key, + base_url=api_base, + api_version=api_version, + timeout=stream_timeout, + max_retries=max_retries + ) + + model["stream_client"] = openai.AzureOpenAI( + api_key=api_key, + base_url=api_base, + api_version=api_version, + timeout=stream_timeout, + max_retries=max_retries + ) + else: self.print_verbose(f"Initializing OpenAI Client for {model_name}, {str(api_base)}") model["async_client"] = openai.AsyncOpenAI( @@ -927,6 +960,23 @@ class Router: timeout=timeout, max_retries=max_retries ) + + # streaming clients should have diff timeouts + model["stream_async_client"] = openai.AsyncOpenAI( + api_key=api_key, + base_url=api_base, + timeout=stream_timeout, + max_retries=max_retries + ) + + # streaming clients should have diff timeouts + model["stream_client"] = openai.OpenAI( + api_key=api_key, + base_url=api_base, + timeout=stream_timeout, + max_retries=max_retries + ) + ############ End of initializing Clients for OpenAI/Azure ################### model_id = "" for key in model["litellm_params"]: @@ -947,6 +997,29 @@ class Router: def get_model_names(self): return self.model_names + def _get_client(self, deployment, kwargs, client_type=None): + """ + Returns the appropriate client based on the given deployment, kwargs, and client_type. + + Parameters: + deployment (dict): The deployment dictionary containing the clients. + kwargs (dict): The keyword arguments passed to the function. + client_type (str): The type of client to return. + + Returns: + The appropriate client based on the given client_type and kwargs. + """ + if client_type == "async": + if kwargs.get("stream") == True: + return deployment["stream_async_client"] + else: + return deployment["async_client"] + else: + if kwargs.get("stream") == True: + return deployment["stream_client"] + else: + return deployment["client"] + def print_verbose(self, print_statement): if self.set_verbose or litellm.set_verbose: print(f"LiteLLM.Router: {print_statement}") # noqa From fa5b453d395f99a0bcb0650f280c1e4714373cc4 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 4 Dec 2023 17:31:11 -0800 Subject: [PATCH 057/460] (test) init router --- litellm/tests/test_router_init.py | 104 +++++++++++++++++++++++++++++- 1 file changed, 102 insertions(+), 2 deletions(-) diff --git a/litellm/tests/test_router_init.py b/litellm/tests/test_router_init.py index 542242976..4d861365e 100644 --- a/litellm/tests/test_router_init.py +++ b/litellm/tests/test_router_init.py @@ -55,7 +55,7 @@ def test_init_clients(): traceback.print_exc() pytest.fail(f"Error occurred: {e}") -test_init_clients() +# test_init_clients() def test_init_clients_basic(): @@ -86,5 +86,105 @@ def test_init_clients_basic(): traceback.print_exc() pytest.fail(f"Error occurred: {e}") -test_init_clients_basic() +# test_init_clients_basic() + + +def test_timeouts_router(): + """ + Test the timeouts of the router with multiple clients. This HASas to raise a timeout error + """ + import openai + litellm.set_verbose = True + try: + print("testing init 4 clients with diff timeouts") + model_list = [ + { + "model_name": "gpt-3.5-turbo", + "litellm_params": { + "model": "azure/chatgpt-v-2", + "api_key": os.getenv("AZURE_API_KEY"), + "api_version": os.getenv("AZURE_API_VERSION"), + "api_base": os.getenv("AZURE_API_BASE"), + "timeout": 0.000001, + "stream_timeout": 0.000_001, + }, + }, + ] + router = Router(model_list=model_list) + + print("PASSED !") + async def test(): + try: + await router.acompletion( + model="gpt-3.5-turbo", + messages=[ + { + "role": "user", + "content": "hello, write a 20 pg essay" + } + ], + ) + except Exception as e: + raise e + asyncio.run(test()) + except openai.APITimeoutError as e: + print("Passed: Raised correct exception. Got openai.APITimeoutError\nGood Job", e) + print(type(e)) + pass + except Exception as e: + pytest.fail(f"Did not raise error `openai.APITimeoutError`. Instead raised error type: {type(e)}, Error: {e}") + +# test_timeouts_router() + + +def test_stream_timeouts_router(): + """ + Test the stream timeouts router. See if it selected the correct client with stream timeout + """ + import openai + + litellm.set_verbose = True + try: + print("testing init 4 clients with diff timeouts") + model_list = [ + { + "model_name": "gpt-3.5-turbo", + "litellm_params": { + "model": "azure/chatgpt-v-2", + "api_key": os.getenv("AZURE_API_KEY"), + "api_version": os.getenv("AZURE_API_VERSION"), + "api_base": os.getenv("AZURE_API_BASE"), + "timeout": 200, # regular calls will not timeout, stream calls will + "stream_timeout": 0.000_001, + }, + }, + ] + router = Router(model_list=model_list) + + print("PASSED !") + selected_client = router._get_client( + deployment=router.model_list[0], + kwargs={ + "model": "gpt-3.5-turbo", + "messages": [ + { + "role": "user", + "content": "hello, write a 20 pg essay" + } + ], + "stream": True + }, + client_type=None + ) + print("Select client timeout", selected_client.timeout) + assert selected_client.timeout == 0.000_001 + except openai.APITimeoutError as e: + print("Passed: Raised correct exception. Got openai.APITimeoutError\nGood Job", e) + print(type(e)) + pass + except Exception as e: + pytest.fail(f"Did not raise error `openai.APITimeoutError`. Instead raised error type: {type(e)}, Error: {e}") + +test_stream_timeouts_router() + From 3f541fe99991610df5e9ff8c8b88f98df8d17fab Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 4 Dec 2023 17:37:09 -0800 Subject: [PATCH 058/460] (docs) custom timeouts proxy --- docs/my-website/docs/proxy/load_balancing.md | 28 ++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/docs/my-website/docs/proxy/load_balancing.md b/docs/my-website/docs/proxy/load_balancing.md index d9215244e..0e1f58662 100644 --- a/docs/my-website/docs/proxy/load_balancing.md +++ b/docs/my-website/docs/proxy/load_balancing.md @@ -111,3 +111,31 @@ curl --location 'http://0.0.0.0:8000/chat/completions' \ } ' ``` + +## Custom Timeouts, Stream Timeouts - Per Model +For each model you can set `timeout` & `stream_timeout` under `litellm_params` +```yaml +model_list: + - model_name: gpt-3.5-turbo + litellm_params: + model: azure/gpt-turbo-small-eu + api_base: https://my-endpoint-europe-berri-992.openai.azure.com/ + api_key: + timeout: 0.1 # timeout in (seconds) + stream_timeout: 0.01 # timeout stream requests (seconds) + max_retries: 5 + - model_name: gpt-3.5-turbo + litellm_params: + model: azure/gpt-turbo-small-ca + api_base: https://my-endpoint-canada-berri992.openai.azure.com/ + api_key: + timeout: 0.1 # timeout in (seconds) + stream_timeout: 0.01 # timeout stream requests (seconds) + max_retries: 5 + +``` + +#### Start Proxy +```shell +$ litellm --config /path/to/config.yaml +``` From acd1678d14c14c8d21cb75254b5fcda2641341a0 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 4 Dec 2023 17:51:31 -0800 Subject: [PATCH 059/460] (docs) router --- docs/my-website/docs/proxy/load_balancing.md | 46 +++++++++++++++----- 1 file changed, 34 insertions(+), 12 deletions(-) diff --git a/docs/my-website/docs/proxy/load_balancing.md b/docs/my-website/docs/proxy/load_balancing.md index 0e1f58662..a73cfe332 100644 --- a/docs/my-website/docs/proxy/load_balancing.md +++ b/docs/my-website/docs/proxy/load_balancing.md @@ -3,38 +3,39 @@ Load balance multiple instances of the same model The proxy will handle routing requests (using LiteLLM's Router). **Set `rpm` in the config if you want maximize throughput** +## Quick Start - Load Balancing +### Step 1 - Set deployments on config -#### Example config -requests with `model=gpt-3.5-turbo` will be routed across multiple instances of `azure/gpt-3.5-turbo` +**Example config below**. Here requests with `model=gpt-3.5-turbo` will be routed across multiple instances of `azure/gpt-3.5-turbo` ```yaml model_list: - model_name: gpt-3.5-turbo litellm_params: - model: azure/gpt-turbo-small-eu - api_base: https://my-endpoint-europe-berri-992.openai.azure.com/ - api_key: + model: azure/ + api_base: + api_key: rpm: 6 # Rate limit for this deployment: in requests per minute (rpm) - model_name: gpt-3.5-turbo litellm_params: model: azure/gpt-turbo-small-ca api_base: https://my-endpoint-canada-berri992.openai.azure.com/ - api_key: + api_key: rpm: 6 - model_name: gpt-3.5-turbo litellm_params: model: azure/gpt-turbo-large api_base: https://openai-france-1234.openai.azure.com/ - api_key: + api_key: rpm: 1440 ``` -#### Step 2: Start Proxy with config +### Step 2: Start Proxy with config ```shell $ litellm --config /path/to/config.yaml ``` -#### Step 3: Use proxy +### Step 3: Use proxy - Call a model group [Load Balancing] Curl Command ```shell curl --location 'http://0.0.0.0:8000/chat/completions' \ @@ -51,7 +52,28 @@ curl --location 'http://0.0.0.0:8000/chat/completions' \ ' ``` -### Fallbacks + Cooldowns + Retries + Timeouts +### Usage - Call a specific model deployment +If you want to call a specific model defined in the `config.yaml`, you can call the `litellm_params: model` + +In this example it will call `azure/gpt-turbo-small-ca`. Defined in the config on Step 1 + +```bash +curl --location 'http://0.0.0.0:8000/chat/completions' \ +--header 'Content-Type: application/json' \ +--data ' { + "model": "azure/gpt-turbo-small-ca", + "messages": [ + { + "role": "user", + "content": "what llm are you" + } + ], + } +' +``` + + +## Fallbacks + Cooldowns + Retries + Timeouts If a call fails after num_retries, fall back to another model group. @@ -122,7 +144,7 @@ model_list: api_base: https://my-endpoint-europe-berri-992.openai.azure.com/ api_key: timeout: 0.1 # timeout in (seconds) - stream_timeout: 0.01 # timeout stream requests (seconds) + stream_timeout: 0.01 # timeout for stream requests (seconds) max_retries: 5 - model_name: gpt-3.5-turbo litellm_params: @@ -130,7 +152,7 @@ model_list: api_base: https://my-endpoint-canada-berri992.openai.azure.com/ api_key: timeout: 0.1 # timeout in (seconds) - stream_timeout: 0.01 # timeout stream requests (seconds) + stream_timeout: 0.01 # timeout for stream requests (seconds) max_retries: 5 ``` From 05f585153fdc4f79a483acdb621a25102c0436e0 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 4 Dec 2023 18:01:21 -0800 Subject: [PATCH 060/460] (docs) add health check on load balancing --- docs/my-website/docs/proxy/load_balancing.md | 40 +++++++++++++++++++- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/docs/my-website/docs/proxy/load_balancing.md b/docs/my-website/docs/proxy/load_balancing.md index a73cfe332..e2e3a7ee6 100644 --- a/docs/my-website/docs/proxy/load_balancing.md +++ b/docs/my-website/docs/proxy/load_balancing.md @@ -107,7 +107,7 @@ model_list: litellm_settings: num_retries: 3 # retry call 3 times on each model_name (e.g. zephyr-beta) - request_timeout: 10 # raise Timeout error if call takes longer than 10s + request_timeout: 10 # raise Timeout error if call takes longer than 10s. Sets litellm.request_timeout fallbacks: [{"zephyr-beta": ["gpt-3.5-turbo"]}] # fallback to gpt-3.5-turbo if call fails num_retries context_window_fallbacks: [{"zephyr-beta": ["gpt-3.5-turbo-16k"]}, {"gpt-3.5-turbo": ["gpt-3.5-turbo-16k"]}] # fallback to gpt-3.5-turbo-16k if context window error allowed_fails: 3 # cooldown model if it fails > 1 call in a minute. @@ -129,7 +129,7 @@ curl --location 'http://0.0.0.0:8000/chat/completions' \ "fallbacks": [{"zephyr-beta": ["gpt-3.5-turbo"]}], "context_window_fallbacks": [{"zephyr-beta": ["gpt-3.5-turbo"]}], "num_retries": 2, - "request_timeout": 10 + "timeout": 10 } ' ``` @@ -161,3 +161,39 @@ model_list: ```shell $ litellm --config /path/to/config.yaml ``` + + + +## Health Check LLMs on Proxy +Use this to health check all LLMs defined in your config.yaml +#### Request +Make a GET Request to `/health` on the proxy +```shell +curl --location 'http://0.0.0.0:8000/health' +``` + +You can also run `litellm -health` it makes a `get` request to `http://0.0.0.0:8000/health` for you +``` +litellm --health +``` +#### Response +```shell +{ + "healthy_endpoints": [ + { + "model": "azure/gpt-35-turbo", + "api_base": "https://my-endpoint-canada-berri992.openai.azure.com/" + }, + { + "model": "azure/gpt-35-turbo", + "api_base": "https://my-endpoint-europe-berri-992.openai.azure.com/" + } + ], + "unhealthy_endpoints": [ + { + "model": "azure/gpt-35-turbo", + "api_base": "https://openai-france-1234.openai.azure.com/" + } + ] +} +``` \ No newline at end of file From ac486a3c4ae5ff61e3b2035c83cb717773e6b6af Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 4 Dec 2023 18:08:57 -0800 Subject: [PATCH 061/460] (docs) add example config.yaml --- litellm/proxy/example_config_yaml/azure_config.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/litellm/proxy/example_config_yaml/azure_config.yaml b/litellm/proxy/example_config_yaml/azure_config.yaml index fd5865cd7..bd9ff9ac9 100644 --- a/litellm/proxy/example_config_yaml/azure_config.yaml +++ b/litellm/proxy/example_config_yaml/azure_config.yaml @@ -6,10 +6,16 @@ model_list: api_version: "2023-05-15" api_key: os.environ/AZURE_API_KEY tpm: 20_000 + timeout: 5 # 1 second timeout + stream_timeout: 0.5 # 0.5 second timeout for streaming requests + max_retries: 4 - model_name: gpt-4-team2 litellm_params: model: azure/gpt-4 api_key: os.environ/AZURE_API_KEY api_base: https://openai-gpt-4-test-v-2.openai.azure.com/ tpm: 100_000 + timeout: 5 # 1 second timeout + stream_timeout: 0.5 # 0.5 second timeout for streaming requests + max_retries: 4 From 51cddf1e975eb64ef68c150ff5d456fca79dd9a4 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 4 Dec 2023 18:09:25 -0800 Subject: [PATCH 062/460] =?UTF-8?q?bump:=20version=201.10.3=20=E2=86=92=20?= =?UTF-8?q?1.10.4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index a9878ced7..8c854d297 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "litellm" -version = "1.10.3" +version = "1.10.4" description = "Library to easily interface with LLM API providers" authors = ["BerriAI"] license = "MIT License" @@ -55,7 +55,7 @@ requires = ["poetry-core", "wheel"] build-backend = "poetry.core.masonry.api" [tool.commitizen] -version = "1.10.3" +version = "1.10.4" version_files = [ "pyproject.toml:^version" ] From 030bd220785765638b57d929a8e05b4be5303e45 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Mon, 4 Dec 2023 18:32:47 -0800 Subject: [PATCH 063/460] feat(proxy_server.py): allow user to override api key auth --- litellm/proxy/custom_auth.py | 14 ++ litellm/proxy/proxy_server.py | 158 +++++------------- litellm/proxy/types.py | 70 ++++++++ litellm/proxy/utils.py | 60 ++++++- litellm/tests/test_configs/custom_auth.py | 14 ++ .../tests/{ => test_configs}/test_config.yaml | 0 .../test_configs/test_config_custom_auth.yaml | 11 ++ litellm/tests/test_proxy_custom_auth.py | 63 +++++++ litellm/tests/test_proxy_server_keys.py | 2 +- 9 files changed, 274 insertions(+), 118 deletions(-) create mode 100644 litellm/proxy/custom_auth.py create mode 100644 litellm/proxy/types.py create mode 100644 litellm/tests/test_configs/custom_auth.py rename litellm/tests/{ => test_configs}/test_config.yaml (100%) create mode 100644 litellm/tests/test_configs/test_config_custom_auth.yaml create mode 100644 litellm/tests/test_proxy_custom_auth.py diff --git a/litellm/proxy/custom_auth.py b/litellm/proxy/custom_auth.py new file mode 100644 index 000000000..0cce561ca --- /dev/null +++ b/litellm/proxy/custom_auth.py @@ -0,0 +1,14 @@ +from litellm.proxy.types import UserAPIKeyAuth +from fastapi import Request +from dotenv import load_dotenv +import os + +load_dotenv() +async def user_api_key_auth(request: Request, api_key: str) -> UserAPIKeyAuth: + try: + modified_master_key = f"{os.getenv('PROXY_MASTER_KEY')}-1234" + if api_key == modified_master_key: + return UserAPIKeyAuth(api_key=api_key) + raise Exception + except: + raise Exception \ No newline at end of file diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 8e9ddc9fa..6f8e0f6ab 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -92,12 +92,16 @@ def generate_feedback_box(): import litellm from litellm.proxy.utils import ( - PrismaClient + PrismaClient, + get_instance_fn ) +import pydantic +from litellm.proxy.types import * from litellm.caching import DualCache litellm.suppress_debug_info = True from fastapi import FastAPI, Request, HTTPException, status, Depends, BackgroundTasks from fastapi.routing import APIRouter +from fastapi.security import OAuth2PasswordBearer from fastapi.encoders import jsonable_encoder from fastapi.responses import StreamingResponse, FileResponse, ORJSONResponse from fastapi.middleware.cors import CORSMiddleware @@ -163,70 +167,8 @@ def log_input_output(request, response, custom_logger=None): return True from typing import Dict -from pydantic import BaseModel -######### Request Class Definition ###### -class ProxyChatCompletionRequest(BaseModel): - model: str - messages: List[Dict[str, str]] - temperature: Optional[float] = None - top_p: Optional[float] = None - n: Optional[int] = None - stream: Optional[bool] = None - stop: Optional[List[str]] = None - max_tokens: Optional[int] = None - presence_penalty: Optional[float] = None - frequency_penalty: Optional[float] = None - logit_bias: Optional[Dict[str, float]] = None - user: Optional[str] = None - response_format: Optional[Dict[str, str]] = None - seed: Optional[int] = None - tools: Optional[List[str]] = None - tool_choice: Optional[str] = None - functions: Optional[List[str]] = None # soon to be deprecated - function_call: Optional[str] = None # soon to be deprecated - - # Optional LiteLLM params - caching: Optional[bool] = None - api_base: Optional[str] = None - api_version: Optional[str] = None - api_key: Optional[str] = None - num_retries: Optional[int] = None - context_window_fallback_dict: Optional[Dict[str, str]] = None - fallbacks: Optional[List[str]] = None - metadata: Optional[Dict[str, str]] = {} - deployment_id: Optional[str] = None - request_timeout: Optional[int] = None - - class Config: - extra='allow' # allow params not defined here, these fall in litellm.completion(**kwargs) - -class ModelParams(BaseModel): - model_name: str - litellm_params: dict - model_info: Optional[dict] - class Config: - protected_namespaces = () - -class GenerateKeyRequest(BaseModel): - duration: str = "1h" - models: list = [] - aliases: dict = {} - config: dict = {} - spend: int = 0 - user_id: Optional[str] = None - -class GenerateKeyResponse(BaseModel): - key: str - expires: datetime - user_id: str - -class _DeleteKeyObject(BaseModel): - key: str - -class DeleteKeyRequest(BaseModel): - keys: List[_DeleteKeyObject] - +oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token") user_api_base = None user_model = None user_debug = False @@ -249,6 +191,7 @@ master_key = None otel_logging = False prisma_client: Optional[PrismaClient] = None user_api_key_cache = DualCache() +user_custom_auth = None ### REDIS QUEUE ### async_result = None celery_app_conn = None @@ -268,21 +211,21 @@ def usage_telemetry( target=litellm.utils.litellm_telemetry, args=(data,), daemon=True ).start() -api_key_header = APIKeyHeader(name="Authorization", auto_error=False) -async def user_api_key_auth(request: Request, api_key: str = fastapi.Security(api_key_header)): - global master_key, prisma_client, llm_model_list - print(f"master_key - {master_key}; api_key - {api_key}") - if master_key is None: - if isinstance(api_key, str): - return { - "api_key": api_key.replace("Bearer ", "") - } - else: - return { - "api_key": api_key - } + +async def user_api_key_auth(request: Request, api_key: str = Depends(oauth2_scheme)) -> UserAPIKeyAuth: + global master_key, prisma_client, llm_model_list, user_custom_auth try: + ### USER-DEFINED AUTH FUNCTION ### + if user_custom_auth: + response = await user_custom_auth(request=request, api_key=api_key) + return UserAPIKeyAuth.model_validate(response) + + if master_key is None: + if isinstance(api_key, str): + return UserAPIKeyAuth(api_key=api_key.replace("Bearer ", "")) + else: + return UserAPIKeyAuth() if api_key is None: raise Exception("No api key passed in.") route = request.url.path @@ -290,9 +233,7 @@ async def user_api_key_auth(request: Request, api_key: str = fastapi.Security(ap # note: never string compare api keys, this is vulenerable to a time attack. Use secrets.compare_digest instead is_master_key_valid = secrets.compare_digest(api_key, master_key) or secrets.compare_digest(api_key, "Bearer " + master_key) if is_master_key_valid: - return { - "api_key": master_key - } + return UserAPIKeyAuth(api_key=master_key) if (route == "/key/generate" or route == "/key/delete" or route == "/key/info") and not is_master_key_valid: raise Exception(f"If master key is set, only master key can be used to generate, delete or get info for new keys") @@ -318,7 +259,7 @@ async def user_api_key_auth(request: Request, api_key: str = fastapi.Security(ap return_dict = {"api_key": valid_token.token} if valid_token.user_id: return_dict["user_id"] = valid_token.user_id - return return_dict + return UserAPIKeyAuth(**return_dict) else: data = await request.json() model = data.get("model", None) @@ -329,14 +270,14 @@ async def user_api_key_auth(request: Request, api_key: str = fastapi.Security(ap return_dict = {"api_key": valid_token.token} if valid_token.user_id: return_dict["user_id"] = valid_token.user_id - return return_dict + return UserAPIKeyAuth(**return_dict) else: raise Exception(f"Invalid token") except Exception as e: print(f"An exception occurred - {traceback.format_exc()}") raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, - detail={"error": "invalid user key"}, + detail="invalid user key", ) def prisma_setup(database_url: Optional[str]): @@ -464,7 +405,7 @@ def run_ollama_serve(): """) def load_router_config(router: Optional[litellm.Router], config_file_path: str): - global master_key, user_config_file_path, otel_logging + global master_key, user_config_file_path, otel_logging, user_custom_auth config = {} try: if os.path.exists(config_file_path): @@ -499,7 +440,6 @@ def load_router_config(router: Optional[litellm.Router], config_file_path: str): ### LOAD FROM AZURE KEY VAULT ### use_azure_key_vault = general_settings.get("use_azure_key_vault", False) load_from_azure_key_vault(use_azure_key_vault=use_azure_key_vault) - ### CONNECT TO DATABASE ### database_url = general_settings.get("database_url", None) if database_url and database_url.startswith("os.environ/"): @@ -514,12 +454,14 @@ def load_router_config(router: Optional[litellm.Router], config_file_path: str): master_key = general_settings.get("master_key", None) if master_key and master_key.startswith("os.environ/"): master_key = litellm.get_secret(master_key) - #### OpenTelemetry Logging (OTEL) ######## otel_logging = general_settings.get("otel", False) if otel_logging == True: print("\nOpenTelemetry Logging Activated") - + ### CUSTOM API KEY AUTH ### + custom_auth = general_settings.get("custom_auth", None) + if custom_auth: + user_custom_auth = get_instance_fn(value=custom_auth, config_file_path=config_file_path) ## LITELLM MODULE SETTINGS (e.g. litellm.drop_params=True,..) litellm_settings = config.get('litellm_settings', None) if litellm_settings: @@ -549,23 +491,7 @@ def load_router_config(router: Optional[litellm.Router], config_file_path: str): password=cache_password ) elif key == "callbacks": - print(f"{blue_color_code}\nSetting custom callbacks on Proxy") - passed_module, instance_name = value.split(".") - - # Dynamically import the module - module = importlib.import_module(passed_module) - # Get the instance from the module - instance = getattr(module, instance_name) - - methods = [method for method in dir(instance) if callable(getattr(instance, method))] - # Print the methods - print("Methods in the custom callbacks instance:") - for method in methods: - print(method) - - litellm.callbacks = [instance] - print() - + litellm.callbacks = [get_instance_fn(value=value)] else: setattr(litellm, key, value) @@ -844,7 +770,7 @@ def model_list(): @router.post("/v1/completions", dependencies=[Depends(user_api_key_auth)]) @router.post("/completions", dependencies=[Depends(user_api_key_auth)]) @router.post("/engines/{model:path}/completions", dependencies=[Depends(user_api_key_auth)]) -async def completion(request: Request, model: Optional[str] = None, user_api_key_dict: dict = Depends(user_api_key_auth)): +async def completion(request: Request, model: Optional[str] = None, user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth)): try: body = await request.body() body_str = body.decode() @@ -853,7 +779,7 @@ async def completion(request: Request, model: Optional[str] = None, user_api_key except: data = json.loads(body_str) - data["user"] = user_api_key_dict.get("user_id", None) + data["user"] = user_api_key_dict.user_id data["model"] = ( general_settings.get("completion_model", None) # server default or user_model # model name passed via cli args @@ -864,9 +790,9 @@ async def completion(request: Request, model: Optional[str] = None, user_api_key data["model"] = user_model data["call_type"] = "text_completion" if "metadata" in data: - data["metadata"]["user_api_key"] = user_api_key_dict["api_key"] + data["metadata"]["user_api_key"] = user_api_key_dict.api_key else: - data["metadata"] = {"user_api_key": user_api_key_dict["api_key"]} + data["metadata"] = {"user_api_key": user_api_key_dict.api_key} return litellm_completion( **data @@ -888,7 +814,7 @@ async def completion(request: Request, model: Optional[str] = None, user_api_key @router.post("/v1/chat/completions", dependencies=[Depends(user_api_key_auth)], tags=["chat/completions"]) @router.post("/chat/completions", dependencies=[Depends(user_api_key_auth)], tags=["chat/completions"]) @router.post("/openai/deployments/{model:path}/chat/completions", dependencies=[Depends(user_api_key_auth)], tags=["chat/completions"]) # azure compatible endpoint -async def chat_completion(request: Request, model: Optional[str] = None, user_api_key_dict: dict = Depends(user_api_key_auth), background_tasks: BackgroundTasks = BackgroundTasks()): +async def chat_completion(request: Request, model: Optional[str] = None, user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), background_tasks: BackgroundTasks = BackgroundTasks()): global general_settings, user_debug try: data = {} @@ -905,13 +831,13 @@ async def chat_completion(request: Request, model: Optional[str] = None, user_ap # users can pass in 'user' param to /chat/completions. Don't override it if data.get("user", None) is None: # if users are using user_api_key_auth, set `user` in `data` - data["user"] = user_api_key_dict.get("user_id", None) + data["user"] = user_api_key_dict.user_id if "metadata" in data: - data["metadata"]["user_api_key"] = user_api_key_dict["api_key"] + data["metadata"]["user_api_key"] = user_api_key_dict.api_key data["metadata"]["headers"] = request.headers else: - data["metadata"] = {"user_api_key": user_api_key_dict["api_key"]} + data["metadata"] = {"user_api_key": user_api_key_dict.api_key} data["metadata"]["headers"] = request.headers global user_temperature, user_request_timeout, user_max_tokens, user_api_base # override with user settings, these are params passed via cli @@ -962,14 +888,14 @@ async def chat_completion(request: Request, model: Optional[str] = None, user_ap @router.post("/v1/embeddings", dependencies=[Depends(user_api_key_auth)], response_class=ORJSONResponse) @router.post("/embeddings", dependencies=[Depends(user_api_key_auth)], response_class=ORJSONResponse) -async def embeddings(request: Request, user_api_key_dict: dict = Depends(user_api_key_auth), background_tasks: BackgroundTasks = BackgroundTasks()): +async def embeddings(request: Request, user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), background_tasks: BackgroundTasks = BackgroundTasks()): try: # Use orjson to parse JSON data, orjson speeds up requests significantly body = await request.body() data = orjson.loads(body) - data["user"] = user_api_key_dict.get("user_id", None) + data["user"] = user_api_key_dict.user_id data["model"] = ( general_settings.get("embedding_model", None) # server default or user_model # model name passed via cli args @@ -978,9 +904,9 @@ async def embeddings(request: Request, user_api_key_dict: dict = Depends(user_ap if user_model: data["model"] = user_model if "metadata" in data: - data["metadata"]["user_api_key"] = user_api_key_dict["api_key"] + data["metadata"]["user_api_key"] = user_api_key_dict.api_key else: - data["metadata"] = {"user_api_key": user_api_key_dict["api_key"]} + data["metadata"] = {"user_api_key": user_api_key_dict.api_key} ## ROUTE TO CORRECT ENDPOINT ## router_model_names = [m["model_name"] for m in llm_model_list] if llm_model_list is not None else [] diff --git a/litellm/proxy/types.py b/litellm/proxy/types.py new file mode 100644 index 000000000..fbee0732b --- /dev/null +++ b/litellm/proxy/types.py @@ -0,0 +1,70 @@ +from pydantic import BaseModel +from typing import Optional, List, Union, Dict +from datetime import datetime + +######### Request Class Definition ###### +class ProxyChatCompletionRequest(BaseModel): + model: str + messages: List[Dict[str, str]] + temperature: Optional[float] = None + top_p: Optional[float] = None + n: Optional[int] = None + stream: Optional[bool] = None + stop: Optional[List[str]] = None + max_tokens: Optional[int] = None + presence_penalty: Optional[float] = None + frequency_penalty: Optional[float] = None + logit_bias: Optional[Dict[str, float]] = None + user: Optional[str] = None + response_format: Optional[Dict[str, str]] = None + seed: Optional[int] = None + tools: Optional[List[str]] = None + tool_choice: Optional[str] = None + functions: Optional[List[str]] = None # soon to be deprecated + function_call: Optional[str] = None # soon to be deprecated + + # Optional LiteLLM params + caching: Optional[bool] = None + api_base: Optional[str] = None + api_version: Optional[str] = None + api_key: Optional[str] = None + num_retries: Optional[int] = None + context_window_fallback_dict: Optional[Dict[str, str]] = None + fallbacks: Optional[List[str]] = None + metadata: Optional[Dict[str, str]] = {} + deployment_id: Optional[str] = None + request_timeout: Optional[int] = None + + class Config: + extra='allow' # allow params not defined here, these fall in litellm.completion(**kwargs) + +class ModelParams(BaseModel): + model_name: str + litellm_params: dict + model_info: Optional[dict] + class Config: + protected_namespaces = () + +class GenerateKeyRequest(BaseModel): + duration: str = "1h" + models: list = [] + aliases: dict = {} + config: dict = {} + spend: int = 0 + user_id: Optional[str] = None + +class GenerateKeyResponse(BaseModel): + key: str + expires: datetime + user_id: str + +class _DeleteKeyObject(BaseModel): + key: str + +class DeleteKeyRequest(BaseModel): + keys: List[_DeleteKeyObject] + + +class UserAPIKeyAuth(BaseModel): # the expected response object for user api key auth + api_key: Optional[str] = None + user_id: Optional[str] = None \ No newline at end of file diff --git a/litellm/proxy/utils.py b/litellm/proxy/utils.py index 1ea7f47a0..5b2039543 100644 --- a/litellm/proxy/utils.py +++ b/litellm/proxy/utils.py @@ -1,6 +1,7 @@ from typing import Optional, List, Any -import os, subprocess, hashlib +import os, subprocess, hashlib, importlib +### DB CONNECTOR ### class PrismaClient: def __init__(self, database_url: str): print("LiteLLM: DATABASE_URL Set in config, trying to 'pip install prisma'") @@ -95,3 +96,60 @@ class PrismaClient: async def disconnect(self): await self.db.disconnect() +# ### CUSTOM FILE ### +# def get_instance_fn(value: str, config_file_path: Optional[str]=None): +# try: +# # Split the path by dots to separate module from instance +# parts = value.split(".") +# # The module path is all but the last part, and the instance is the last part +# module_path = ".".join(parts[:-1]) +# instance_name = parts[-1] + +# if config_file_path is not None: +# directory = os.path.dirname(config_file_path) +# module_path = os.path.join(directory, module_path) +# # Dynamically import the module +# module = importlib.import_module(module_path) + +# # Get the instance from the module +# instance = getattr(module, instance_name) + +# return instance +# except ImportError as e: +# print(e) +# raise ImportError(f"Could not import file at {value}") + +def get_instance_fn(value: str, config_file_path: Optional[str] = None) -> Any: + try: + print(f"value: {value}") + # Split the path by dots to separate module from instance + parts = value.split(".") + + # The module path is all but the last part, and the instance_name is the last part + module_name = ".".join(parts[:-1]) + instance_name = parts[-1] + + # If config_file_path is provided, use it to determine the module spec and load the module + if config_file_path is not None: + directory = os.path.dirname(config_file_path) + module_file_path = os.path.join(directory, *module_name.split('.')) + module_file_path += '.py' + + spec = importlib.util.spec_from_file_location(module_name, module_file_path) + if spec is None: + raise ImportError(f"Could not find a module specification for {module_file_path}") + module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + else: + # Dynamically import the module + module = importlib.import_module(module_name) + + # Get the instance from the module + instance = getattr(module, instance_name) + + return instance + except ImportError as e: + # Print the error message for easier debugging + print(e) + # Re-raise the exception with a user-friendly message + raise ImportError(f"Could not import {instance_name} from {module_name}") from e \ No newline at end of file diff --git a/litellm/tests/test_configs/custom_auth.py b/litellm/tests/test_configs/custom_auth.py new file mode 100644 index 000000000..f9de3a97a --- /dev/null +++ b/litellm/tests/test_configs/custom_auth.py @@ -0,0 +1,14 @@ +from litellm.proxy.types import UserAPIKeyAuth +from fastapi import Request +from dotenv import load_dotenv +import os + +load_dotenv() +async def user_api_key_auth(request: Request, api_key: str) -> UserAPIKeyAuth: + try: + print(f"api_key: {api_key}") + if api_key == f"{os.getenv('PROXY_MASTER_KEY')}-1234": + return UserAPIKeyAuth(api_key=api_key) + raise Exception + except: + raise Exception \ No newline at end of file diff --git a/litellm/tests/test_config.yaml b/litellm/tests/test_configs/test_config.yaml similarity index 100% rename from litellm/tests/test_config.yaml rename to litellm/tests/test_configs/test_config.yaml diff --git a/litellm/tests/test_configs/test_config_custom_auth.yaml b/litellm/tests/test_configs/test_config_custom_auth.yaml new file mode 100644 index 000000000..33088bd1c --- /dev/null +++ b/litellm/tests/test_configs/test_config_custom_auth.yaml @@ -0,0 +1,11 @@ +model_list: + - model_name: "openai-model" + litellm_params: + model: "gpt-3.5-turbo" + +litellm_settings: + drop_params: True + set_verbose: True + +general_settings: + custom_auth: custom_auth.user_api_key_auth \ No newline at end of file diff --git a/litellm/tests/test_proxy_custom_auth.py b/litellm/tests/test_proxy_custom_auth.py new file mode 100644 index 000000000..fa1b5f6dd --- /dev/null +++ b/litellm/tests/test_proxy_custom_auth.py @@ -0,0 +1,63 @@ +import sys, os +import traceback +from dotenv import load_dotenv + +load_dotenv() +import os, io + +# this file is to test litellm/proxy + +sys.path.insert( + 0, os.path.abspath("../..") +) # Adds the parent directory to the system path +import pytest +import litellm +from litellm import embedding, completion, completion_cost, Timeout +from litellm import RateLimitError + +# test /chat/completion request to the proxy +from fastapi.testclient import TestClient +from fastapi import FastAPI +from litellm.proxy.proxy_server import router, save_worker_config, startup_event # Replace with the actual module where your FastAPI router is defined +filepath = os.path.dirname(os.path.abspath(__file__)) +config_fp = f"{filepath}/test_configs/test_config_custom_auth.yaml" +save_worker_config(config=config_fp, model=None, alias=None, api_base=None, api_version=None, debug=False, temperature=None, max_tokens=None, request_timeout=600, max_budget=None, telemetry=False, drop_params=True, add_function_to_prompt=False, headers=None, save=False, use_queue=False) +app = FastAPI() +app.include_router(router) # Include your router in the test app +@app.on_event("startup") +async def wrapper_startup_event(): + await startup_event() + +# Here you create a fixture that will be used by your tests +# Make sure the fixture returns TestClient(app) +@pytest.fixture(autouse=True) +def client(): + with TestClient(app) as client: + yield client + +def test_custom_auth(client): + try: + # Your test data + test_data = { + "model": "openai-model", + "messages": [ + { + "role": "user", + "content": "hi" + }, + ], + "max_tokens": 10, + } + # Your bearer token + token = os.getenv("PROXY_MASTER_KEY") + + headers = { + "Authorization": f"Bearer {token}" + } + response = client.post("/chat/completions", json=test_data, headers=headers) + print(f"response: {response.text}") + assert response.status_code == 401 + result = response.json() + print(f"Received response: {result}") + except Exception as e: + pytest.fail("LiteLLM Proxy test failed. Exception", e) \ No newline at end of file diff --git a/litellm/tests/test_proxy_server_keys.py b/litellm/tests/test_proxy_server_keys.py index a2dd396c0..fb0ec2f3c 100644 --- a/litellm/tests/test_proxy_server_keys.py +++ b/litellm/tests/test_proxy_server_keys.py @@ -25,7 +25,7 @@ from fastapi.testclient import TestClient from fastapi import FastAPI from litellm.proxy.proxy_server import router, save_worker_config, startup_event # Replace with the actual module where your FastAPI router is defined filepath = os.path.dirname(os.path.abspath(__file__)) -config_fp = f"{filepath}/test_config.yaml" +config_fp = f"{filepath}/test_configs/test_config.yaml" save_worker_config(config=config_fp, model=None, alias=None, api_base=None, api_version=None, debug=False, temperature=None, max_tokens=None, request_timeout=600, max_budget=None, telemetry=False, drop_params=True, add_function_to_prompt=False, headers=None, save=False, use_queue=False) app = FastAPI() app.include_router(router) # Include your router in the test app From 31f3187670d22a72affd55717e8adb7d9b782980 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Mon, 4 Dec 2023 18:43:01 -0800 Subject: [PATCH 064/460] test: fix linting errors --- litellm/proxy/utils.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/litellm/proxy/utils.py b/litellm/proxy/utils.py index 5b2039543..9c6a2c17e 100644 --- a/litellm/proxy/utils.py +++ b/litellm/proxy/utils.py @@ -139,7 +139,7 @@ def get_instance_fn(value: str, config_file_path: Optional[str] = None) -> Any: if spec is None: raise ImportError(f"Could not find a module specification for {module_file_path}") module = importlib.util.module_from_spec(spec) - spec.loader.exec_module(module) + spec.loader.exec_module(module) # type: ignore else: # Dynamically import the module module = importlib.import_module(module_name) @@ -149,7 +149,7 @@ def get_instance_fn(value: str, config_file_path: Optional[str] = None) -> Any: return instance except ImportError as e: - # Print the error message for easier debugging - print(e) # Re-raise the exception with a user-friendly message - raise ImportError(f"Could not import {instance_name} from {module_name}") from e \ No newline at end of file + raise ImportError(f"Could not import {instance_name} from {module_name}") from e + except Exception as e: + raise e \ No newline at end of file From 9ba17657ad664a21b5e91259a152db58540be024 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 4 Dec 2023 20:50:06 -0800 Subject: [PATCH 065/460] (feat) init redis cache with **kwargs --- litellm/caching.py | 10 ++++++---- litellm/tests/test_caching.py | 27 +++++++++++++++++++++++++-- 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/litellm/caching.py b/litellm/caching.py index 5e8fcf447..d9b94b958 100644 --- a/litellm/caching.py +++ b/litellm/caching.py @@ -69,10 +69,10 @@ class InMemoryCache(BaseCache): class RedisCache(BaseCache): - def __init__(self, host, port, password): + def __init__(self, host, port, password, **kwargs): import redis # if users don't provider one, use the default litellm cache - self.redis_client = redis.Redis(host=host, port=port, password=password) + self.redis_client = redis.Redis(host=host, port=port, password=password, **kwargs) def set_cache(self, key, value, **kwargs): ttl = kwargs.get("ttl", None) @@ -168,7 +168,8 @@ class Cache: type="local", host=None, port=None, - password=None + password=None, + **kwargs ): """ Initializes the cache based on the given type. @@ -178,6 +179,7 @@ class Cache: host (str, optional): The host address for the Redis cache. Required if type is "redis". port (int, optional): The port number for the Redis cache. Required if type is "redis". password (str, optional): The password for the Redis cache. Required if type is "redis". + **kwargs: Additional keyword arguments for redis.Redis() cache Raises: ValueError: If an invalid cache type is provided. @@ -186,7 +188,7 @@ class Cache: None """ if type == "redis": - self.cache = RedisCache(host, port, password) + self.cache = RedisCache(host, port, password, **kwargs) if type == "local": self.cache = InMemoryCache() if "cache" not in litellm.input_callback: diff --git a/litellm/tests/test_caching.py b/litellm/tests/test_caching.py index ab24d3e70..713f97b3e 100644 --- a/litellm/tests/test_caching.py +++ b/litellm/tests/test_caching.py @@ -90,7 +90,7 @@ def test_embedding_caching(): print(f"embedding2: {embedding2}") pytest.fail("Error occurred: Embedding caching failed") -test_embedding_caching() +# test_embedding_caching() def test_embedding_caching_azure(): @@ -190,7 +190,7 @@ def test_redis_cache_completion(): print(f"response4: {response4}") pytest.fail(f"Error occurred:") -test_redis_cache_completion() +# test_redis_cache_completion() # redis cache with custom keys def custom_get_cache_key(*args, **kwargs): @@ -231,6 +231,29 @@ def test_custom_redis_cache_with_key(): # test_custom_redis_cache_with_key() + +def test_custom_redis_cache_params(): + # test if we can init redis with **kwargs + try: + litellm.cache = Cache( + type="redis", + host=os.environ['REDIS_HOST'], + port=os.environ['REDIS_PORT'], + password=os.environ['REDIS_PASSWORD'], + db = 0, + ssl=True, + ssl_certfile="./redis_user.crt", + ssl_keyfile="./redis_user_private.key", + ssl_ca_certs="./redis_ca.pem", + ) + + print(litellm.cache.cache.redis_client) + litellm.cache = None + except Exception as e: + pytest.fail(f"Error occurred:", e) + +# test_custom_redis_cache_params() + # def test_redis_cache_with_ttl(): # cache = Cache(type="redis", host=os.environ['REDIS_HOST'], port=os.environ['REDIS_PORT'], password=os.environ['REDIS_PASSWORD']) # sample_model_response_object_str = """{ From 1ff8f757527693f5d002ed84113fd55ddc64ced9 Mon Sep 17 00:00:00 2001 From: Krish Dholakia Date: Mon, 4 Dec 2023 21:19:32 -0800 Subject: [PATCH 066/460] Updated config.yml --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 8f2a89846..caf0e8396 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -45,7 +45,7 @@ jobs: command: | cd litellm python -m pip install types-requests types-setuptools types-redis - if ! python -m mypy . --ignore-missing-imports --explicit-package-bases; then + if ! python -m mypy . --ignore-missing-imports; then echo "mypy detected errors" exit 1 fi From 71e64c34cb403f1d550145f2cf370f612871ce04 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 5 Dec 2023 07:28:03 -0800 Subject: [PATCH 067/460] fix(huggingface_restapi.py): raise better exceptions for unprocessable hf responses --- litellm/llms/huggingface_restapi.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/litellm/llms/huggingface_restapi.py b/litellm/llms/huggingface_restapi.py index 25aa1c574..c347910f8 100644 --- a/litellm/llms/huggingface_restapi.py +++ b/litellm/llms/huggingface_restapi.py @@ -170,6 +170,11 @@ class Huggingface(BaseLLM): "content" ] = completion_response["generated_text"] # type: ignore elif task == "text-generation-inference": + if (not isinstance(completion_response, list) + or not isinstance(completion_response[0], dict) + or "generated_text" not in completion_response[0]): + raise HuggingfaceError(status_code=422, message=f"response is not in expected format - {completion_response}") + if len(completion_response[0]["generated_text"]) > 0: model_response["choices"][0]["message"][ "content" From 943bf53b0bd7c2b5ad8a77788674635e5919d5df Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 5 Dec 2023 07:28:14 -0800 Subject: [PATCH 068/460] =?UTF-8?q?bump:=20version=201.10.4=20=E2=86=92=20?= =?UTF-8?q?1.10.5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 8c854d297..2e4b11e82 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "litellm" -version = "1.10.4" +version = "1.10.5" description = "Library to easily interface with LLM API providers" authors = ["BerriAI"] license = "MIT License" @@ -55,7 +55,7 @@ requires = ["poetry-core", "wheel"] build-backend = "poetry.core.masonry.api" [tool.commitizen] -version = "1.10.4" +version = "1.10.5" version_files = [ "pyproject.toml:^version" ] From 13261287ecbbcf8af1e8956a476bb90f67f2f96a Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 5 Dec 2023 09:05:53 -0800 Subject: [PATCH 069/460] (fix) proxy: bug non OpenAI LLMs --- litellm/router.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/litellm/router.py b/litellm/router.py index edae794c9..75fd5afd9 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -1011,14 +1011,14 @@ class Router: """ if client_type == "async": if kwargs.get("stream") == True: - return deployment["stream_async_client"] + return deployment.get("stream_async_client", None) else: - return deployment["async_client"] + return deployment.get("async_client", None) else: if kwargs.get("stream") == True: - return deployment["stream_client"] + return deployment.get("stream_client", None) else: - return deployment["client"] + return deployment.get("client", None) def print_verbose(self, print_statement): if self.set_verbose or litellm.set_verbose: From 3bdf61f02a5232db7dfcdddf9f24b8852ee2cdb8 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 5 Dec 2023 09:35:08 -0800 Subject: [PATCH 070/460] (test) test bedrock on router --- litellm/tests/test_router.py | 37 +++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/litellm/tests/test_router.py b/litellm/tests/test_router.py index 8024c9dd2..ae9a06c41 100644 --- a/litellm/tests/test_router.py +++ b/litellm/tests/test_router.py @@ -329,4 +329,39 @@ def test_azure_aembedding_on_router(): except Exception as e: traceback.print_exc() pytest.fail(f"Error occurred: {e}") -# test_azure_aembedding_on_router() \ No newline at end of file +# test_azure_aembedding_on_router() + + +def test_bedrock_on_router(): + litellm.set_verbose = True + print("\n Testing bedrock on router\n") + try: + model_list = [ + { + "model_name": "claude-v1", + "litellm_params": { + "model": "bedrock/anthropic.claude-instant-v1", + }, + "tpm": 100000, + "rpm": 10000, + }, + ] + + async def test(): + router = Router(model_list=model_list) + response = await router.acompletion( + model="claude-v1", + messages=[ + { + "role": "user", + "content": "hello from litellm test", + } + ] + ) + print(response) + router.reset() + asyncio.run(test()) + except Exception as e: + traceback.print_exc() + pytest.fail(f"Error occurred: {e}") +# test_bedrock_on_router() \ No newline at end of file From 732a049513af21681e63c757e7c25d4a9293914c Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 5 Dec 2023 09:36:38 -0800 Subject: [PATCH 071/460] (fix) patch max_retries for non openai llms --- litellm/utils.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/litellm/utils.py b/litellm/utils.py index 892fc010c..ea0b4002f 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -1985,6 +1985,8 @@ def get_optional_params( # use the openai defaults if k not in supported_params: if k == "n" and n == 1: # langchain sends n=1 as a default value pass + if k == "max_retries": # TODO: This is a patch. We support max retries for OpenAI, Azure. For non OpenAI LLMs we need to add support for max retries + pass # Always keeps this in elif code blocks else: unsupported_params[k] = non_default_params[k] From 33cf5a3371b393d8453c02ded12dcc128e9aafa3 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 5 Dec 2023 09:36:59 -0800 Subject: [PATCH 072/460] =?UTF-8?q?bump:=20version=201.10.5=20=E2=86=92=20?= =?UTF-8?q?1.10.6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 2e4b11e82..029e925a7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "litellm" -version = "1.10.5" +version = "1.10.6" description = "Library to easily interface with LLM API providers" authors = ["BerriAI"] license = "MIT License" @@ -55,7 +55,7 @@ requires = ["poetry-core", "wheel"] build-backend = "poetry.core.masonry.api" [tool.commitizen] -version = "1.10.5" +version = "1.10.6" version_files = [ "pyproject.toml:^version" ] From a602d59645f573b9cb6d3467c4da13f9b3451888 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 5 Dec 2023 10:00:54 -0800 Subject: [PATCH 073/460] (fix) bug in completion: _check_valid_arg --- litellm/utils.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/litellm/utils.py b/litellm/utils.py index ea0b4002f..84cd20729 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -1984,9 +1984,9 @@ def get_optional_params( # use the openai defaults for k in non_default_params.keys(): if k not in supported_params: if k == "n" and n == 1: # langchain sends n=1 as a default value - pass + continue # skip this param if k == "max_retries": # TODO: This is a patch. We support max retries for OpenAI, Azure. For non OpenAI LLMs we need to add support for max retries - pass + continue # skip this param # Always keeps this in elif code blocks else: unsupported_params[k] = non_default_params[k] From b46c73a46e3dd76391be21a8a66753cb9352681b Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 5 Dec 2023 11:13:09 -0800 Subject: [PATCH 074/460] fix: fix proxy testing --- litellm/proxy/proxy_server.py | 38 +++++++++------- litellm/tests/test_configs/test_config.yaml | 49 +++++++++++---------- litellm/tests/test_proxy_custom_auth.py | 4 +- litellm/tests/test_proxy_server.py | 35 +++++++++------ 4 files changed, 73 insertions(+), 53 deletions(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 6f8e0f6ab..9d597ac01 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -168,7 +168,7 @@ def log_input_output(request, response, custom_logger=None): from typing import Dict -oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token") +api_key_header = APIKeyHeader(name="Authorization", auto_error=False) user_api_base = None user_model = None user_debug = False @@ -213,9 +213,13 @@ def usage_telemetry( -async def user_api_key_auth(request: Request, api_key: str = Depends(oauth2_scheme)) -> UserAPIKeyAuth: +async def user_api_key_auth(request: Request, api_key: str = fastapi.Security(api_key_header)) -> UserAPIKeyAuth: global master_key, prisma_client, llm_model_list, user_custom_auth try: + if isinstance(api_key, str): + assert api_key.startswith("Bearer ") # ensure Bearer token passed in + api_key = api_key.replace("Bearer ", "") # extract the token + print(f"api_key: {api_key}; master_key: {master_key}; user_custom_auth: {user_custom_auth}") ### USER-DEFINED AUTH FUNCTION ### if user_custom_auth: response = await user_custom_auth(request=request, api_key=api_key) @@ -223,15 +227,16 @@ async def user_api_key_auth(request: Request, api_key: str = Depends(oauth2_sche if master_key is None: if isinstance(api_key, str): - return UserAPIKeyAuth(api_key=api_key.replace("Bearer ", "")) - else: - return UserAPIKeyAuth() - if api_key is None: + return UserAPIKeyAuth(api_key=api_key) + else: + return UserAPIKeyAuth() + + if api_key is None: # only require api key if master key is set raise Exception("No api key passed in.") route = request.url.path # note: never string compare api keys, this is vulenerable to a time attack. Use secrets.compare_digest instead - is_master_key_valid = secrets.compare_digest(api_key, master_key) or secrets.compare_digest(api_key, "Bearer " + master_key) + is_master_key_valid = secrets.compare_digest(api_key, master_key) if is_master_key_valid: return UserAPIKeyAuth(api_key=master_key) @@ -241,9 +246,9 @@ async def user_api_key_auth(request: Request, api_key: str = Depends(oauth2_sche if prisma_client: ## check for cache hit (In-Memory Cache) valid_token = user_api_key_cache.get_cache(key=api_key) - if valid_token is None and "Bearer " in api_key: + if valid_token is None: ## check db - cleaned_api_key = api_key[len("Bearer "):] + cleaned_api_key = api_key valid_token = await prisma_client.get_data(token=cleaned_api_key, expires=datetime.utcnow()) user_api_key_cache.set_cache(key=api_key, value=valid_token, ttl=60) elif valid_token is not None: @@ -275,10 +280,10 @@ async def user_api_key_auth(request: Request, api_key: str = Depends(oauth2_sche raise Exception(f"Invalid token") except Exception as e: print(f"An exception occurred - {traceback.format_exc()}") - raise HTTPException( - status_code=status.HTTP_401_UNAUTHORIZED, - detail="invalid user key", - ) + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail="invalid user key", + ) def prisma_setup(database_url: Optional[str]): global prisma_client @@ -597,13 +602,17 @@ def initialize( config, use_queue ): - global user_model, user_api_base, user_debug, user_max_tokens, user_request_timeout, user_temperature, user_telemetry, user_headers, experimental, llm_model_list, llm_router, general_settings + global user_model, user_api_base, user_debug, user_max_tokens, user_request_timeout, user_temperature, user_telemetry, user_headers, experimental, llm_model_list, llm_router, general_settings, master_key, user_custom_auth generate_feedback_box() user_model = model user_debug = debug dynamic_config = {"general": {}, user_model: {}} if config: llm_router, llm_model_list, general_settings = load_router_config(router=llm_router, config_file_path=config) + else: + # reset auth if config not passed, needed for consecutive tests on proxy + master_key = None + user_custom_auth = None if headers: # model-specific param user_headers = headers dynamic_config[user_model]["headers"] = headers @@ -810,7 +819,6 @@ async def completion(request: Request, model: Optional[str] = None, user_api_key detail=error_msg ) - @router.post("/v1/chat/completions", dependencies=[Depends(user_api_key_auth)], tags=["chat/completions"]) @router.post("/chat/completions", dependencies=[Depends(user_api_key_auth)], tags=["chat/completions"]) @router.post("/openai/deployments/{model:path}/chat/completions", dependencies=[Depends(user_api_key_auth)], tags=["chat/completions"]) # azure compatible endpoint diff --git a/litellm/tests/test_configs/test_config.yaml b/litellm/tests/test_configs/test_config.yaml index 34b3d928a..fa2079666 100644 --- a/litellm/tests/test_configs/test_config.yaml +++ b/litellm/tests/test_configs/test_config.yaml @@ -1,24 +1,27 @@ -model_list: - - model_name: "azure-model" - litellm_params: - model: "azure/gpt-35-turbo" - api_key: "os.environ/AZURE_EUROPE_API_KEY" - api_base: "https://my-endpoint-europe-berri-992.openai.azure.com/" - - model_name: "azure-model" - litellm_params: - model: "azure/gpt-35-turbo" - api_key: "os.environ/AZURE_CANADA_API_KEY" - api_base: "https://my-endpoint-canada-berri992.openai.azure.com" - - model_name: "azure-model" - litellm_params: - model: "azure/gpt-turbo" - api_key: "os.environ/AZURE_FRANCE_API_KEY" - api_base: "https://openai-france-1234.openai.azure.com" - -litellm_settings: - drop_params: True - set_verbose: True - general_settings: - master_key: "os.environ/PROXY_MASTER_KEY" - database_url: "os.environ/PROXY_DATABASE_URL" # [OPTIONAL] use for token-based auth to proxy + database_url: os.environ/PROXY_DATABASE_URL + master_key: os.environ/PROXY_MASTER_KEY +litellm_settings: + drop_params: true + set_verbose: true +model_list: +- litellm_params: + api_base: https://my-endpoint-europe-berri-992.openai.azure.com/ + api_key: os.environ/AZURE_EUROPE_API_KEY + model: azure/gpt-35-turbo + model_name: azure-model +- litellm_params: + api_base: https://my-endpoint-canada-berri992.openai.azure.com + api_key: os.environ/AZURE_CANADA_API_KEY + model: azure/gpt-35-turbo + model_name: azure-model +- litellm_params: + api_base: https://openai-france-1234.openai.azure.com + api_key: os.environ/AZURE_FRANCE_API_KEY + model: azure/gpt-turbo + model_name: azure-model +- litellm_params: + model: gpt-3.5-turbo + model_info: + description: this is a test openai model + model_name: test_openai_models diff --git a/litellm/tests/test_proxy_custom_auth.py b/litellm/tests/test_proxy_custom_auth.py index fa1b5f6dd..5708b1c41 100644 --- a/litellm/tests/test_proxy_custom_auth.py +++ b/litellm/tests/test_proxy_custom_auth.py @@ -18,7 +18,7 @@ from litellm import RateLimitError # test /chat/completion request to the proxy from fastapi.testclient import TestClient from fastapi import FastAPI -from litellm.proxy.proxy_server import router, save_worker_config, startup_event # Replace with the actual module where your FastAPI router is defined +from litellm.proxy.proxy_server import router, save_worker_config, initialize # Replace with the actual module where your FastAPI router is defined filepath = os.path.dirname(os.path.abspath(__file__)) config_fp = f"{filepath}/test_configs/test_config_custom_auth.yaml" save_worker_config(config=config_fp, model=None, alias=None, api_base=None, api_version=None, debug=False, temperature=None, max_tokens=None, request_timeout=600, max_budget=None, telemetry=False, drop_params=True, add_function_to_prompt=False, headers=None, save=False, use_queue=False) @@ -26,7 +26,7 @@ app = FastAPI() app.include_router(router) # Include your router in the test app @app.on_event("startup") async def wrapper_startup_event(): - await startup_event() + initialize(config=config_fp, model=None, alias=None, api_base=None, api_version=None, debug=False, temperature=None, max_tokens=None, request_timeout=600, max_budget=None, telemetry=False, drop_params=True, add_function_to_prompt=False, headers=None, save=False, use_queue=False) # Here you create a fixture that will be used by your tests # Make sure the fixture returns TestClient(app) diff --git a/litellm/tests/test_proxy_server.py b/litellm/tests/test_proxy_server.py index a525f01bf..b15ee8307 100644 --- a/litellm/tests/test_proxy_server.py +++ b/litellm/tests/test_proxy_server.py @@ -18,11 +18,22 @@ from litellm import RateLimitError # test /chat/completion request to the proxy from fastapi.testclient import TestClient from fastapi import FastAPI -from litellm.proxy.proxy_server import router # Replace with the actual module where your FastAPI router is defined +from litellm.proxy.proxy_server import router, save_worker_config, initialize # Replace with the actual module where your FastAPI router is defined +save_worker_config(config=None, model=None, alias=None, api_base=None, api_version=None, debug=False, temperature=None, max_tokens=None, request_timeout=600, max_budget=None, telemetry=False, drop_params=True, add_function_to_prompt=False, headers=None, save=False, use_queue=False) app = FastAPI() app.include_router(router) # Include your router in the test app -client = TestClient(app) -def test_chat_completion(): +@app.on_event("startup") +async def wrapper_startup_event(): # required to reset config on app init - b/c pytest collects across multiple files - which sets the fastapi client + WORKER CONFIG to whatever was collected last + initialize(config=None, model=None, alias=None, api_base=None, api_version=None, debug=False, temperature=None, max_tokens=None, request_timeout=600, max_budget=None, telemetry=False, drop_params=True, add_function_to_prompt=False, headers=None, save=False, use_queue=False) + +# Here you create a fixture that will be used by your tests +# Make sure the fixture returns TestClient(app) +@pytest.fixture(autouse=True) +def client(): + with TestClient(app) as client: + yield client + +def test_chat_completion(client): try: # Your test data test_data = { @@ -37,18 +48,16 @@ def test_chat_completion(): } print("testing proxy server") response = client.post("/v1/chat/completions", json=test_data) - + print(f"response - {response.text}") assert response.status_code == 200 result = response.json() print(f"Received response: {result}") except Exception as e: - pytest.fail("LiteLLM Proxy test failed. Exception", e) + pytest.fail(f"LiteLLM Proxy test failed. Exception - {str(e)}") # Run the test -# test_chat_completion() - -def test_chat_completion_azure(): +def test_chat_completion_azure(client): try: # Your test data test_data = { @@ -69,13 +78,13 @@ def test_chat_completion_azure(): print(f"Received response: {result}") assert len(result["choices"][0]["message"]["content"]) > 0 except Exception as e: - pytest.fail("LiteLLM Proxy test failed. Exception", e) + pytest.fail(f"LiteLLM Proxy test failed. Exception - {str(e)}") # Run the test # test_chat_completion_azure() -def test_embedding(): +def test_embedding(client): try: test_data = { "model": "azure/azure-embedding-model", @@ -89,13 +98,13 @@ def test_embedding(): print(len(result["data"][0]["embedding"])) assert len(result["data"][0]["embedding"]) > 10 # this usually has len==1536 so except Exception as e: - pytest.fail("LiteLLM Proxy test failed. Exception", e) + pytest.fail(f"LiteLLM Proxy test failed. Exception - {str(e)}") # Run the test # test_embedding() -def test_add_new_model(): +def test_add_new_model(client): try: test_data = { "model_name": "test_openai_models", @@ -135,7 +144,7 @@ class MyCustomHandler(CustomLogger): customHandler = MyCustomHandler() -def test_chat_completion_optional_params(): +def test_chat_completion_optional_params(client): # [PROXY: PROD TEST] - DO NOT DELETE # This tests if all the /chat/completion params are passed to litellm From ddea62fdb1538c59d17f9867a27a8470fc86c36d Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 5 Dec 2023 11:14:16 -0800 Subject: [PATCH 075/460] refactor(proxy_server.py): clean up print statements in proxy server --- litellm/proxy/proxy_server.py | 1 - 1 file changed, 1 deletion(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 9d597ac01..ecd4ab8d6 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -219,7 +219,6 @@ async def user_api_key_auth(request: Request, api_key: str = fastapi.Security(ap if isinstance(api_key, str): assert api_key.startswith("Bearer ") # ensure Bearer token passed in api_key = api_key.replace("Bearer ", "") # extract the token - print(f"api_key: {api_key}; master_key: {master_key}; user_custom_auth: {user_custom_auth}") ### USER-DEFINED AUTH FUNCTION ### if user_custom_auth: response = await user_custom_auth(request=request, api_key=api_key) From f0c704f3c2fca2ffec6f1d2a8d5eceebc581b470 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 5 Dec 2023 11:45:07 -0800 Subject: [PATCH 076/460] (docs) add example on using proxy with OpenAI --- docs/my-website/docs/proxy/quick_start.md | 66 +++++++++++------------ 1 file changed, 32 insertions(+), 34 deletions(-) diff --git a/docs/my-website/docs/proxy/quick_start.md b/docs/my-website/docs/proxy/quick_start.md index f1749bc50..6ea6433df 100644 --- a/docs/my-website/docs/proxy/quick_start.md +++ b/docs/my-website/docs/proxy/quick_start.md @@ -43,7 +43,7 @@ litellm --test This will now automatically route any requests for gpt-3.5-turbo to bigcode starcoder, hosted on huggingface inference endpoints. -### Using LiteLLM Proxy - Curl Request, OpenAI Package +### Using LiteLLM Proxy - Curl Request, OpenAI Package, Langchain, Langchain JS @@ -84,7 +84,38 @@ print(response) ``` + +```python +from langchain.chat_models import ChatOpenAI +from langchain.prompts.chat import ( + ChatPromptTemplate, + HumanMessagePromptTemplate, + SystemMessagePromptTemplate, +) +from langchain.schema import HumanMessage, SystemMessage + +chat = ChatOpenAI( + openai_api_base="http://0.0.0.0:8000", + model = "gpt-3.5-turbo", + temperature=0.1 +) + +messages = [ + SystemMessage( + content="You are a helpful assistant that im using to make a test request to." + ), + HumanMessage( + content="test from litellm. tell me why it's amazing in 1 sentence" + ), +] +response = chat(messages) + +print(response) + +``` + + @@ -474,37 +505,4 @@ curl -X POST \ https://api.openai.com/v1/chat/completions \ -H 'content-type: application/json' -H 'Authorization: Bearer sk-qnWGUIW9****************************************' \ -d '{"model": "gpt-3.5-turbo", "messages": [{"role": "user", "content": "this is a test request, write a short poem"}]}' -``` - -## Health Check LLMs on Proxy -Use this to health check all LLMs defined in your config.yaml -#### Request -```shell -curl --location 'http://0.0.0.0:8000/health' -``` - -You can also run `litellm -health` it makes a `get` request to `http://0.0.0.0:8000/health` for you -``` -litellm --health -``` -#### Response -```shell -{ - "healthy_endpoints": [ - { - "model": "azure/gpt-35-turbo", - "api_base": "https://my-endpoint-canada-berri992.openai.azure.com/" - }, - { - "model": "azure/gpt-35-turbo", - "api_base": "https://my-endpoint-europe-berri-992.openai.azure.com/" - } - ], - "unhealthy_endpoints": [ - { - "model": "azure/gpt-35-turbo", - "api_base": "https://openai-france-1234.openai.azure.com/" - } - ] -} ``` \ No newline at end of file From a0f8bf23abcc61ec7c67f25b313016cfe4ac45e6 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 5 Dec 2023 11:45:34 -0800 Subject: [PATCH 077/460] (test) proxy: langchain compatible --- litellm/proxy/tests/test_langchain_request.py | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 litellm/proxy/tests/test_langchain_request.py diff --git a/litellm/proxy/tests/test_langchain_request.py b/litellm/proxy/tests/test_langchain_request.py new file mode 100644 index 000000000..af6691f3c --- /dev/null +++ b/litellm/proxy/tests/test_langchain_request.py @@ -0,0 +1,28 @@ +from langchain.chat_models import ChatOpenAI +from langchain.prompts.chat import ( + ChatPromptTemplate, + HumanMessagePromptTemplate, + SystemMessagePromptTemplate, +) +from langchain.schema import HumanMessage, SystemMessage + +chat = ChatOpenAI( + openai_api_base="http://0.0.0.0:8000", + model = "gpt-3.5-turbo", + temperature=0.1 +) + +messages = [ + SystemMessage( + content="You are a helpful assistant that im using to make a test request to." + ), + HumanMessage( + content="test from litellm. tell me why it's amazing in 1 sentence" + ), +] +response = chat(messages) + +print(response) + + + From 41075dc977c1529af88c92f0b1e83452022e406b Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 5 Dec 2023 11:46:42 -0800 Subject: [PATCH 078/460] (docs) litellm proxy + langchain --- docs/my-website/docs/proxy/quick_start.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/my-website/docs/proxy/quick_start.md b/docs/my-website/docs/proxy/quick_start.md index 6ea6433df..b88e2b610 100644 --- a/docs/my-website/docs/proxy/quick_start.md +++ b/docs/my-website/docs/proxy/quick_start.md @@ -96,7 +96,7 @@ from langchain.prompts.chat import ( from langchain.schema import HumanMessage, SystemMessage chat = ChatOpenAI( - openai_api_base="http://0.0.0.0:8000", + openai_api_base="http://0.0.0.0:8000", # set openai_api_base to the LiteLLM Proxy model = "gpt-3.5-turbo", temperature=0.1 ) @@ -112,7 +112,6 @@ messages = [ response = chat(messages) print(response) - ``` From a85a9d7e0004df077f237d0052eae69afad989aa Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 5 Dec 2023 11:55:02 -0800 Subject: [PATCH 079/460] (docs) using proxy with curl, OpenAI, langchain --- docs/my-website/docs/proxy/configs.md | 75 +++++++++++++++++++++++++-- 1 file changed, 72 insertions(+), 3 deletions(-) diff --git a/docs/my-website/docs/proxy/configs.md b/docs/my-website/docs/proxy/configs.md index 71ce7de02..ed5424b1a 100644 --- a/docs/my-website/docs/proxy/configs.md +++ b/docs/my-website/docs/proxy/configs.md @@ -1,3 +1,7 @@ +import Image from '@theme/IdealImage'; +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + # Proxy Config.yaml Set model list, `api_base`, `api_key`, `temperature` & proxy server settings (`master-key`) on the config.yaml. @@ -26,6 +30,9 @@ model_list: api_base: https://my-endpoint-europe-berri-992.openai.azure.com/ api_key: "os.environ/AZURE_API_KEY_EU" # does os.getenv("AZURE_API_KEY_EU") rpm: 6 # Rate limit for this deployment: in requests per minute (rpm) + - model_name: bedrock-claude-v1 + litellm_params: + model: bedrock/anthropic.claude-instant-v1 - model_name: gpt-3.5-turbo litellm_params: model: azure/gpt-turbo-small-ca @@ -54,13 +61,18 @@ general_settings: $ litellm --config /path/to/config.yaml ``` -#### Step 3: Use proxy -Curl Command + +### Using Proxy - Curl Request, OpenAI Package, Langchain, Langchain JS +Calling a model group + + + + ```shell curl --location 'http://0.0.0.0:8000/chat/completions' \ --header 'Content-Type: application/json' \ --data ' { - "model": "zephyr-alpha", + "model": "gpt-3.5-turbo", "messages": [ { "role": "user", @@ -70,6 +82,63 @@ curl --location 'http://0.0.0.0:8000/chat/completions' \ } ' ``` + + + +```python +import openai +client = openai.OpenAI( + api_key="anything", + base_url="http://0.0.0.0:8000" +) + +# request sent to model set on litellm proxy, `litellm --model` +response = client.chat.completions.create(model="gpt-3.5-turbo", messages = [ + { + "role": "user", + "content": "this is a test request, write a short poem" + } +]) + +print(response) + + +``` + + + + +```python +from langchain.chat_models import ChatOpenAI +from langchain.prompts.chat import ( + ChatPromptTemplate, + HumanMessagePromptTemplate, + SystemMessagePromptTemplate, +) +from langchain.schema import HumanMessage, SystemMessage + +chat = ChatOpenAI( + openai_api_base="http://0.0.0.0:8000", # set openai_api_base to the LiteLLM Proxy + model = "gpt-3.5-turbo", + temperature=0.1 +) + +messages = [ + SystemMessage( + content="You are a helpful assistant that im using to make a test request to." + ), + HumanMessage( + content="test from litellm. tell me why it's amazing in 1 sentence" + ), +] +response = chat(messages) + +print(response) +``` + + + + ## Save Model-specific params (API Base, API Keys, Temperature, Headers etc.) You can use the config to save model-specific information like api_base, api_key, temperature, max_tokens, etc. From e615f2670a16baca1aac190420c19ee169687afd Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 5 Dec 2023 12:02:35 -0800 Subject: [PATCH 080/460] (docs) proxy + configs --- docs/my-website/docs/proxy/configs.md | 35 ++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/docs/my-website/docs/proxy/configs.md b/docs/my-website/docs/proxy/configs.md index ed5424b1a..305280bdd 100644 --- a/docs/my-website/docs/proxy/configs.md +++ b/docs/my-website/docs/proxy/configs.md @@ -68,6 +68,10 @@ Calling a model group +Sends request to model where `model_name=gpt-3.5-turbo` on config.yaml. + +If multiple with `model_name=gpt-3.5-turbo` does [Load Balancing](https://docs.litellm.ai/docs/proxy/load_balancing) + ```shell curl --location 'http://0.0.0.0:8000/chat/completions' \ --header 'Content-Type: application/json' \ @@ -83,6 +87,26 @@ curl --location 'http://0.0.0.0:8000/chat/completions' \ ' ``` + + + +Sends this request to model where `model_name=bedrock-claude-v1` on config.yaml + +```shell +curl --location 'http://0.0.0.0:8000/chat/completions' \ +--header 'Content-Type: application/json' \ +--data ' { + "model": "bedrock-claude-v1", + "messages": [ + { + "role": "user", + "content": "what llm are you" + } + ], + } +' +``` + ```python @@ -92,7 +116,7 @@ client = openai.OpenAI( base_url="http://0.0.0.0:8000" ) -# request sent to model set on litellm proxy, `litellm --model` +# Sends request to model where `model_name=gpt-3.5-turbo` on config.yaml. response = client.chat.completions.create(model="gpt-3.5-turbo", messages = [ { "role": "user", @@ -102,6 +126,15 @@ response = client.chat.completions.create(model="gpt-3.5-turbo", messages = [ print(response) +# Sends this request to model where `model_name=bedrock-claude-v1` on config.yaml +response = client.chat.completions.create(model="bedrock-claude-v1", messages = [ + { + "role": "user", + "content": "this is a test request, write a short poem" + } +]) + +print(response) ``` From 88c95ca259f8677b1eb1e2a356e81bf50e87add1 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 5 Dec 2023 12:16:33 -0800 Subject: [PATCH 081/460] fix(_redis.py): support additional params for redis --- litellm/_redis.py | 85 +++++++++++++++++++++++++++++++++++ litellm/caching.py | 16 ++++++- litellm/proxy/proxy_server.py | 7 +-- litellm/router.py | 22 +++++---- litellm/utils.py | 34 +++++++------- 5 files changed, 135 insertions(+), 29 deletions(-) create mode 100644 litellm/_redis.py diff --git a/litellm/_redis.py b/litellm/_redis.py new file mode 100644 index 000000000..82e0ab0ec --- /dev/null +++ b/litellm/_redis.py @@ -0,0 +1,85 @@ +# +-----------------------------------------------+ +# | | +# | Give Feedback / Get Help | +# | https://github.com/BerriAI/litellm/issues/new | +# | | +# +-----------------------------------------------+ +# +# Thank you users! We ❤️ you! - Krrish & Ishaan + +# s/o [@Frank Colson](https://www.linkedin.com/in/frank-colson-422b9b183/) for this redis implementation +import os +import inspect +import redis, litellm + +def _get_redis_kwargs(): + arg_spec = inspect.getfullargspec(redis.Redis) + + # Only allow primitive arguments + exclude_args = { + "self", + "connection_pool", + "retry", + } + + + include_args = [ + "url" + ] + + available_args = [ + x for x in arg_spec.args if x not in exclude_args + ] + include_args + + return available_args + +def _get_redis_env_kwarg_mapping(): + PREFIX = "REDIS_" + + return { + f"{PREFIX}{x.upper()}": x for x in _get_redis_kwargs() + } + + +def _redis_kwargs_from_environment(): + mapping = _get_redis_env_kwarg_mapping() + + return_dict = {} + for k, v in mapping.items(): + value = litellm.get_secret(k, default_value=None) # check os.environ/key vault + if value is not None: + return_dict[v] = value + return return_dict + + +def get_redis_url_from_environment(): + if "REDIS_URL" in os.environ: + return os.environ["REDIS_URL"] + + if "REDIS_HOST" not in os.environ or "REDIS_PORT" not in os.environ: + raise ValueError("Either 'REDIS_URL' or both 'REDIS_HOST' and 'REDIS_PORT' must be specified for Redis.") + + if "REDIS_PASSWORD" in os.environ: + redis_password = f":{os.environ['REDIS_PASSWORD']}@" + else: + redis_password = "" + + return f"redis://{redis_password}{os.environ['REDIS_HOST']}:{os.environ['REDIS_PORT']}" + +def get_redis_client(**env_overrides): + redis_kwargs = { + **_redis_kwargs_from_environment(), + **env_overrides, + } + + if "url" in redis_kwargs and redis_kwargs['url'] is not None: + redis_kwargs.pop("host", None) + redis_kwargs.pop("port", None) + redis_kwargs.pop("db", None) + redis_kwargs.pop("password", None) + + return redis.Redis.from_url(**redis_kwargs) + elif "host" not in redis_kwargs or redis_kwargs['host'] is None: + raise ValueError("Either 'host' or 'url' must be specified for redis.") + + return redis.Redis(**redis_kwargs) \ No newline at end of file diff --git a/litellm/caching.py b/litellm/caching.py index d9b94b958..1b6963cc6 100644 --- a/litellm/caching.py +++ b/litellm/caching.py @@ -69,10 +69,22 @@ class InMemoryCache(BaseCache): class RedisCache(BaseCache): - def __init__(self, host, port, password, **kwargs): + def __init__(self, host=None, port=None, password=None, **kwargs): import redis # if users don't provider one, use the default litellm cache - self.redis_client = redis.Redis(host=host, port=port, password=password, **kwargs) + from ._redis import get_redis_client + + redis_kwargs = {} + if host is not None: + redis_kwargs["host"] = host + if port is not None: + redis_kwargs["port"] = port + if password is not None: + redis_kwargs["password"] = password + + redis_kwargs.update(kwargs) + + self.redis_client = get_redis_client(**redis_kwargs) def set_cache(self, key, value, **kwargs): ttl = kwargs.get("ttl", None) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index ecd4ab8d6..3f94f90b9 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -477,9 +477,9 @@ def load_router_config(router: Optional[litellm.Router], config_file_path: str): print(f"{blue_color_code}\nSetting Cache on Proxy") from litellm.caching import Cache cache_type = value["type"] - cache_host = litellm.get_secret("REDIS_HOST") - cache_port = litellm.get_secret("REDIS_PORT") - cache_password = litellm.get_secret("REDIS_PASSWORD") + cache_host = litellm.get_secret("REDIS_HOST", None) + cache_port = litellm.get_secret("REDIS_PORT", None) + cache_password = litellm.get_secret("REDIS_PASSWORD", None) # Assuming cache_type, cache_host, cache_port, and cache_password are strings print(f"{blue_color_code}Cache Type:{reset_color_code} {cache_type}") @@ -488,6 +488,7 @@ def load_router_config(router: Optional[litellm.Router], config_file_path: str): print(f"{blue_color_code}Cache Password:{reset_color_code} {cache_password}") print() + ## to pass a complete url, just set it as `os.environ[REDIS_URL] = `, _redis.py checks for REDIS specific environment variables litellm.cache = Cache( type=cache_type, host=cache_host, diff --git a/litellm/router.py b/litellm/router.py index 75fd5afd9..478b5dd23 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -60,10 +60,14 @@ class Router: def __init__(self, model_list: Optional[list] = None, + ## CACHING ## + redis_url: Optional[str] = None, redis_host: Optional[str] = None, redis_port: Optional[int] = None, redis_password: Optional[str] = None, cache_responses: bool = False, + cache_kwargs: dict = {}, # additional kwargs to pass to RedisCache (see caching.py) + ## RELIABILITY ## num_retries: int = 0, timeout: Optional[float] = None, default_litellm_params = {}, # default params for Router.chat.completion.create @@ -107,21 +111,21 @@ class Router: if self.routing_strategy == "least-busy": self._start_health_check_thread() ### CACHING ### + cache_type = "local" # default to an in-memory cache redis_cache = None - if redis_host is not None and redis_port is not None and redis_password is not None: + cache_config = {} + if redis_url is not None or (redis_host is not None and redis_port is not None and redis_password is not None): + cache_type = "redis" cache_config = { - 'type': 'redis', + 'url': redis_url, 'host': redis_host, 'port': redis_port, - 'password': redis_password - } - redis_cache = RedisCache(host=redis_host, port=redis_port, password=redis_password) - else: # use an in-memory cache - cache_config = { - "type": "local" + 'password': redis_password, + **cache_kwargs } + redis_cache = RedisCache(**cache_config) if cache_responses: - litellm.cache = litellm.Cache(**cache_config) # use Redis for caching completion requests + litellm.cache = litellm.Cache(type=cache_type, **cache_config) self.cache_responses = cache_responses self.cache = DualCache(redis_cache=redis_cache, in_memory_cache=InMemoryCache()) # use a dual cache (Redis+In-Memory) for tracking cooldowns, usage, etc. ## USAGE TRACKING ## diff --git a/litellm/utils.py b/litellm/utils.py index 84cd20729..c89e690d7 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -4763,23 +4763,27 @@ def litellm_telemetry(data): ######### Secret Manager ############################ # checks if user has passed in a secret manager client # if passed in then checks the secret there -def get_secret(secret_name: str): +def get_secret(secret_name: str, default_value: Optional[str]=None): if secret_name.startswith("os.environ/"): secret_name = secret_name.replace("os.environ/", "") - if litellm.secret_manager_client is not None: - # TODO: check which secret manager is being used - # currently only supports Infisical - try: - client = litellm.secret_manager_client - if type(client).__module__ + '.' + type(client).__name__ == 'azure.keyvault.secrets._client.SecretClient': # support Azure Secret Client - from azure.keyvault.secrets import SecretClient - secret = retrieved_secret = client.get_secret(secret_name).value - else: # assume the default is infisicial client - secret = client.get_secret(secret_name).secret_value - except: # check if it's in os.environ - secret = os.environ.get(secret_name) - return secret - else: - return os.environ.get(secret_name) + try: + if litellm.secret_manager_client is not None: + try: + client = litellm.secret_manager_client + if type(client).__module__ + '.' + type(client).__name__ == 'azure.keyvault.secrets._client.SecretClient': # support Azure Secret Client - from azure.keyvault.secrets import SecretClient + secret = retrieved_secret = client.get_secret(secret_name).value + else: # assume the default is infisicial client + secret = client.get_secret(secret_name).secret_value + except: # check if it's in os.environ + secret = os.environ.get(secret_name) + return secret + else: + return os.environ.get(secret_name) + except Exception as e: + if default_value is not None: + return default_value + else: + raise e ######## Streaming Class ############################ From 951bcfc043131288e8f1f410c0311feb92e39fb8 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 5 Dec 2023 12:07:18 -0800 Subject: [PATCH 082/460] (fix) router init: raise error Azure API Base not set --- litellm/router.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/litellm/router.py b/litellm/router.py index 478b5dd23..70ac4efe6 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -880,6 +880,8 @@ class Router: self.print_verbose(f"Initializing OpenAI Client for {model_name}, {str(api_base)}") if "azure" in model_name: + if api_base is None: + raise ValueError("api_base is required for Azure OpenAI. Set it on your config") self.print_verbose(f"Initializing Azure OpenAI Client for {model_name}, {str(api_base)}, {api_key}") if api_version is None: api_version = "2023-07-01-preview" From 4f9f53f7dc87ade8a1948b439530f6f64f6c2f9b Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 5 Dec 2023 12:20:12 -0800 Subject: [PATCH 083/460] (docs) proxy: config example with langchain --- docs/my-website/docs/proxy/configs.md | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/docs/my-website/docs/proxy/configs.md b/docs/my-website/docs/proxy/configs.md index 305280bdd..490da2294 100644 --- a/docs/my-website/docs/proxy/configs.md +++ b/docs/my-website/docs/proxy/configs.md @@ -139,7 +139,7 @@ print(response) ``` - + ```python from langchain.chat_models import ChatOpenAI @@ -150,12 +150,6 @@ from langchain.prompts.chat import ( ) from langchain.schema import HumanMessage, SystemMessage -chat = ChatOpenAI( - openai_api_base="http://0.0.0.0:8000", # set openai_api_base to the LiteLLM Proxy - model = "gpt-3.5-turbo", - temperature=0.1 -) - messages = [ SystemMessage( content="You are a helpful assistant that im using to make a test request to." @@ -164,8 +158,25 @@ messages = [ content="test from litellm. tell me why it's amazing in 1 sentence" ), ] -response = chat(messages) +# Sends request to model where `model_name=gpt-3.5-turbo` on config.yaml. +chat = ChatOpenAI( + openai_api_base="http://0.0.0.0:8000", # set openai base to the proxy + model = "gpt-3.5-turbo", + temperature=0.1 +) + +response = chat(messages) +print(response) + +# Sends request to model where `model_name=bedrock-claude-v1` on config.yaml. +claude_chat = ChatOpenAI( + openai_api_base="http://0.0.0.0:8000", # set openai base to the proxy + model = "bedrock-claude-v1", + temperature=0.1 +) + +response = claude_chat(messages) print(response) ``` From d5f67a0a257cd08232960f6eac1f75c0cab085cc Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 5 Dec 2023 12:20:29 -0800 Subject: [PATCH 084/460] (docs) proxy + langchain --- litellm/proxy/tests/test_langchain_request.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/litellm/proxy/tests/test_langchain_request.py b/litellm/proxy/tests/test_langchain_request.py index af6691f3c..2306ffaf7 100644 --- a/litellm/proxy/tests/test_langchain_request.py +++ b/litellm/proxy/tests/test_langchain_request.py @@ -24,5 +24,16 @@ response = chat(messages) print(response) +claude_chat = ChatOpenAI( + openai_api_base="http://0.0.0.0:8000", + model = "claude-v1", + temperature=0.1 +) + +response = claude_chat(messages) + +print(response) + + From ef7795add6680591a60b5cb71c7134c3571a4657 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 5 Dec 2023 12:26:10 -0800 Subject: [PATCH 085/460] fix(utils.py): set text if empty string --- litellm/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/utils.py b/litellm/utils.py index c89e690d7..6518d8852 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -414,7 +414,7 @@ class TextChoices(OpenAIObject): else: self.finish_reason = "stop" self.index = index - if text: + if text is not None: self.text = text else: self.text = None From 55b34f969c32ca147a884f31a1a7c32b4d1753ab Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 5 Dec 2023 12:26:36 -0800 Subject: [PATCH 086/460] =?UTF-8?q?bump:=20version=201.10.6=20=E2=86=92=20?= =?UTF-8?q?1.10.7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 029e925a7..ea9117e7b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "litellm" -version = "1.10.6" +version = "1.10.7" description = "Library to easily interface with LLM API providers" authors = ["BerriAI"] license = "MIT License" @@ -55,7 +55,7 @@ requires = ["poetry-core", "wheel"] build-backend = "poetry.core.masonry.api" [tool.commitizen] -version = "1.10.6" +version = "1.10.7" version_files = [ "pyproject.toml:^version" ] From 2a02fcbffbd311f5eda0789844324f87d3b839b6 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 5 Dec 2023 12:38:18 -0800 Subject: [PATCH 087/460] fix(utils.py): map cohere finish reasons --- litellm/utils.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/litellm/utils.py b/litellm/utils.py index 6518d8852..e8e2b57b3 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -123,6 +123,15 @@ def map_finish_reason(finish_reason: str): # openai supports 5 stop sequences - # anthropic mapping if finish_reason == "stop_sequence": return "stop" + # cohere mapping - https://docs.cohere.com/reference/generate + elif finish_reason == "COMPLETE": + return "stop" + elif finish_reason == "MAX_TOKENS": + return "length" + elif finish_reason == "ERROR_TOXIC": + return "content_filter" + elif finish_reason == "ERROR": # openai currently doesn't support an 'error' finish reason + return "stop" return finish_reason class FunctionCall(OpenAIObject): From a9b50a12c5c56ff4a83dbb2ea01799eb6a38abf8 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 5 Dec 2023 12:38:42 -0800 Subject: [PATCH 088/460] =?UTF-8?q?bump:=20version=201.10.7=20=E2=86=92=20?= =?UTF-8?q?1.10.8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index ea9117e7b..3490408c2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "litellm" -version = "1.10.7" +version = "1.10.8" description = "Library to easily interface with LLM API providers" authors = ["BerriAI"] license = "MIT License" @@ -55,7 +55,7 @@ requires = ["poetry-core", "wheel"] build-backend = "poetry.core.masonry.api" [tool.commitizen] -version = "1.10.7" +version = "1.10.8" version_files = [ "pyproject.toml:^version" ] From 397eefabe114c84f9b82f465168597d7fb8d017a Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 5 Dec 2023 12:45:52 -0800 Subject: [PATCH 089/460] test: remove local test --- litellm/proxy/tests/test_langchain_request.py | 59 ++++++++++--------- 1 file changed, 30 insertions(+), 29 deletions(-) diff --git a/litellm/proxy/tests/test_langchain_request.py b/litellm/proxy/tests/test_langchain_request.py index 2306ffaf7..1841b4968 100644 --- a/litellm/proxy/tests/test_langchain_request.py +++ b/litellm/proxy/tests/test_langchain_request.py @@ -1,38 +1,39 @@ -from langchain.chat_models import ChatOpenAI -from langchain.prompts.chat import ( - ChatPromptTemplate, - HumanMessagePromptTemplate, - SystemMessagePromptTemplate, -) -from langchain.schema import HumanMessage, SystemMessage +## LOCAL TEST +# from langchain.chat_models import ChatOpenAI +# from langchain.prompts.chat import ( +# ChatPromptTemplate, +# HumanMessagePromptTemplate, +# SystemMessagePromptTemplate, +# ) +# from langchain.schema import HumanMessage, SystemMessage -chat = ChatOpenAI( - openai_api_base="http://0.0.0.0:8000", - model = "gpt-3.5-turbo", - temperature=0.1 -) +# chat = ChatOpenAI( +# openai_api_base="http://0.0.0.0:8000", +# model = "gpt-3.5-turbo", +# temperature=0.1 +# ) -messages = [ - SystemMessage( - content="You are a helpful assistant that im using to make a test request to." - ), - HumanMessage( - content="test from litellm. tell me why it's amazing in 1 sentence" - ), -] -response = chat(messages) +# messages = [ +# SystemMessage( +# content="You are a helpful assistant that im using to make a test request to." +# ), +# HumanMessage( +# content="test from litellm. tell me why it's amazing in 1 sentence" +# ), +# ] +# response = chat(messages) -print(response) +# print(response) -claude_chat = ChatOpenAI( - openai_api_base="http://0.0.0.0:8000", - model = "claude-v1", - temperature=0.1 -) +# claude_chat = ChatOpenAI( +# openai_api_base="http://0.0.0.0:8000", +# model = "claude-v1", +# temperature=0.1 +# ) -response = claude_chat(messages) +# response = claude_chat(messages) -print(response) +# print(response) From d9f083b5f8b71cc0ca35198e5cc40a1d6107696e Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 5 Dec 2023 12:46:09 -0800 Subject: [PATCH 090/460] (fix) router: remove misleading print statement --- litellm/router.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/litellm/router.py b/litellm/router.py index 70ac4efe6..0f8a6b948 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -877,8 +877,6 @@ class Router: max_retries_env_name = api_version.replace("os.environ/", "") max_retries = litellm.get_secret(max_retries_env_name) - - self.print_verbose(f"Initializing OpenAI Client for {model_name}, {str(api_base)}") if "azure" in model_name: if api_base is None: raise ValueError("api_base is required for Azure OpenAI. Set it on your config") From 3f84ab04c4d283c457d9813c9e7a4fb2c78cf754 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 5 Dec 2023 12:53:20 -0800 Subject: [PATCH 091/460] (fix) router: Azure Client Init --- litellm/router.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/litellm/router.py b/litellm/router.py index 0f8a6b948..881d89deb 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -936,7 +936,7 @@ class Router: # streaming clients should have diff timeouts model["stream_async_client"] = openai.AsyncAzureOpenAI( api_key=api_key, - base_url=api_base, + azure_endpoint=api_base, api_version=api_version, timeout=stream_timeout, max_retries=max_retries @@ -944,7 +944,7 @@ class Router: model["stream_client"] = openai.AzureOpenAI( api_key=api_key, - base_url=api_base, + azure_endpoint=api_base, api_version=api_version, timeout=stream_timeout, max_retries=max_retries From 5829227d863f4c63bc4cd76f011fe1500706426f Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 5 Dec 2023 12:53:52 -0800 Subject: [PATCH 092/460] (test) router streaming + azure --- litellm/tests/test_router.py | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/litellm/tests/test_router.py b/litellm/tests/test_router.py index ae9a06c41..4c806291a 100644 --- a/litellm/tests/test_router.py +++ b/litellm/tests/test_router.py @@ -74,7 +74,8 @@ def test_exception_raising(): def test_reading_key_from_model_list(): - # this tests if the router raises an exception when invalid params are set + # [PROD TEST CASE] + # this tests if the router can read key from model list and make completion call, and completion + stream call. This is 90% of the router use case # DO NOT REMOVE THIS TEST. It's an IMP ONE. Speak to Ishaan, if you are tring to remove this litellm.set_verbose=False import openai @@ -112,6 +113,23 @@ def test_reading_key_from_model_list(): } ] ) + print("\n response", response) + + print("\n Testing streaming response") + response = router.completion( + model="gpt-3.5-turbo", + messages=[ + { + "role": "user", + "content": "hello this request will fail" + } + ], + stream=True + ) + for chunk in response: + if chunk is not None: + print(chunk) + print("\n Passed Streaming") os.environ["AZURE_API_KEY"] = old_api_key router.reset() except Exception as e: From 58ab0a3f03a7e48ac02375f292d42bd1d2073655 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 5 Dec 2023 12:54:20 -0800 Subject: [PATCH 093/460] fix(router.py): fix cache init --- litellm/router.py | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/litellm/router.py b/litellm/router.py index 881d89deb..203cc419e 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -116,13 +116,21 @@ class Router: cache_config = {} if redis_url is not None or (redis_host is not None and redis_port is not None and redis_password is not None): cache_type = "redis" - cache_config = { - 'url': redis_url, - 'host': redis_host, - 'port': redis_port, - 'password': redis_password, - **cache_kwargs - } + + if redis_url is not None: + cache_config['url'] = redis_url + + if redis_host is not None: + cache_config['host'] = redis_host + + if redis_port is not None: + cache_config['port'] = redis_port + + if redis_password is not None: + cache_config['password'] = redis_password + + # Add additional key-value pairs from cache_kwargs + cache_config.update(cache_kwargs) redis_cache = RedisCache(**cache_config) if cache_responses: litellm.cache = litellm.Cache(type=cache_type, **cache_config) From e579918dd93d3c33a17077b7cd374b0338eebd35 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 5 Dec 2023 13:22:27 -0800 Subject: [PATCH 094/460] (test) Router: Test Azure acompletion, stream --- litellm/tests/test_router.py | 83 ++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) diff --git a/litellm/tests/test_router.py b/litellm/tests/test_router.py index 4c806291a..5f6ef2e21 100644 --- a/litellm/tests/test_router.py +++ b/litellm/tests/test_router.py @@ -139,6 +139,89 @@ def test_reading_key_from_model_list(): # test_reading_key_from_model_list() + +def test_router_azure_acompletion(): + # [PROD TEST CASE] + # This is 90% of the router use case, makes an acompletion call, acompletion + stream call and verifies it got a response + # DO NOT REMOVE THIS TEST. It's an IMP ONE. Speak to Ishaan, if you are tring to remove this + litellm.set_verbose=False + import openai + try: + print("Router Test Azure - Acompletion, Acompletion with stream") + + # remove api key from env to repro how proxy passes key to router + old_api_key = os.environ["AZURE_API_KEY"] + os.environ.pop("AZURE_API_KEY", None) + + model_list = [ + { + "model_name": "gpt-3.5-turbo", # openai model name + "litellm_params": { # params for litellm completion/embedding call + "model": "azure/chatgpt-v-2", + "api_key": old_api_key, + "api_version": os.getenv("AZURE_API_VERSION"), + "api_base": os.getenv("AZURE_API_BASE") + }, + "tpm": 240000, + "rpm": 1800 + }, + { + "model_name": "gpt-3.5-turbo", # openai model name + "litellm_params": { # params for litellm completion/embedding call + "model": "azure/chatgpt-v-2", + "api_key": old_api_key, + "api_version": os.getenv("AZURE_API_VERSION"), + "api_base": os.getenv("AZURE_API_BASE") + }, + "tpm": 240000, + "rpm": 1800 + } + ] + + router = Router(model_list=model_list, + routing_strategy="simple-shuffle", + set_verbose=True + ) # type: ignore + + async def test1(): + + response = await router.acompletion( + model="gpt-3.5-turbo", + messages=[ + { + "role": "user", + "content": "hello this request will fail" + } + ] + ) + print("\n response", response) + asyncio.run(test1()) + + print("\n Testing streaming response") + async def test2(): + response = await router.acompletion( + model="gpt-3.5-turbo", + messages=[ + { + "role": "user", + "content": "hello this request will fail" + } + ], + stream=True + ) + async for chunk in response: + if chunk is not None: + print(chunk) + asyncio.run(test2()) + print("\n Passed Streaming") + os.environ["AZURE_API_KEY"] = old_api_key + router.reset() + except Exception as e: + os.environ["AZURE_API_KEY"] = old_api_key + print(f"FAILED TEST") + pytest.fail(f"Got unexpected exception on router! - {e}") +test_router_azure_acompletion() + ### FUNCTION CALLING def test_function_calling(): From 4e3040b3577affc74cbe577abfab806a57890481 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 5 Dec 2023 13:23:35 -0800 Subject: [PATCH 095/460] (chore) linting fix --- litellm/proxy/queue/celery_app.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/proxy/queue/celery_app.py b/litellm/proxy/queue/celery_app.py index 47c9c868f..b9006f13e 100644 --- a/litellm/proxy/queue/celery_app.py +++ b/litellm/proxy/queue/celery_app.py @@ -45,7 +45,7 @@ celery_app.conf.update( @celery_app.task(name='process_job', max_retries=3) def process_job(*args, **kwargs): try: - llm_router: litellm.Router = litellm.Router(model_list=kwargs.pop("llm_model_list")) + llm_router: litellm.Router = litellm.Router(model_list=kwargs.pop("llm_model_list")) # type: ignore response = llm_router.completion(*args, **kwargs) # type: ignore if isinstance(response, litellm.ModelResponse): response = response.model_dump_json() From 1463cc6023800cc2ebebc9cec92d394ed6c728d6 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 5 Dec 2023 13:28:07 -0800 Subject: [PATCH 096/460] (test) router Azure regular chat completion call --- litellm/tests/test_router.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/litellm/tests/test_router.py b/litellm/tests/test_router.py index 5f6ef2e21..82ae1646b 100644 --- a/litellm/tests/test_router.py +++ b/litellm/tests/test_router.py @@ -162,18 +162,16 @@ def test_router_azure_acompletion(): "api_version": os.getenv("AZURE_API_VERSION"), "api_base": os.getenv("AZURE_API_BASE") }, - "tpm": 240000, "rpm": 1800 }, { "model_name": "gpt-3.5-turbo", # openai model name "litellm_params": { # params for litellm completion/embedding call - "model": "azure/chatgpt-v-2", - "api_key": old_api_key, + "model": "azure/gpt-turbo", + "api_key": os.getenv("AZURE_FRANCE_API_KEY"), "api_version": os.getenv("AZURE_API_VERSION"), - "api_base": os.getenv("AZURE_API_BASE") + "api_base": "https://openai-france-1234.openai.azure.com" }, - "tpm": 240000, "rpm": 1800 } ] From 63939c0a1112ddf8b0ddf21b7add90cae5b782e3 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 5 Dec 2023 13:30:12 -0800 Subject: [PATCH 097/460] (fix) linting --- litellm/router.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/router.py b/litellm/router.py index 203cc419e..f4b825eb2 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -124,7 +124,7 @@ class Router: cache_config['host'] = redis_host if redis_port is not None: - cache_config['port'] = redis_port + cache_config['port'] = int(redis_port) if redis_password is not None: cache_config['password'] = redis_password From d606a9cb4c23575aef529cbc4df454a0e7d954a8 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 5 Dec 2023 13:33:44 -0800 Subject: [PATCH 098/460] refactor(router.py): linting fixes --- litellm/router.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/router.py b/litellm/router.py index f4b825eb2..be6cbd917 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -124,7 +124,7 @@ class Router: cache_config['host'] = redis_host if redis_port is not None: - cache_config['port'] = int(redis_port) + cache_config['port'] = str(redis_port) # type: ignore if redis_password is not None: cache_config['password'] = redis_password From 0d1b42eda5f40fbdfafc496f5d50c754c66f9c87 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 5 Dec 2023 13:35:03 -0800 Subject: [PATCH 099/460] (test) azure - test async + sync embedding --- litellm/tests/test_router.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/litellm/tests/test_router.py b/litellm/tests/test_router.py index 82ae1646b..0a14e166f 100644 --- a/litellm/tests/test_router.py +++ b/litellm/tests/test_router.py @@ -400,7 +400,10 @@ def test_aembedding_on_router(): # test_aembedding_on_router() -def test_azure_aembedding_on_router(): +def test_azure_embedding_on_router(): + """ + [PROD Use Case] - Makes an aembedding call + embedding call + """ litellm.set_verbose = True try: model_list = [ @@ -415,20 +418,28 @@ def test_azure_aembedding_on_router(): "rpm": 10000, }, ] + router = Router(model_list=model_list) async def embedding_call(): - router = Router(model_list=model_list) response = await router.aembedding( model="text-embedding-ada-002", input=["good morning from litellm"] ) print(response) - router.reset() asyncio.run(embedding_call()) + + print("\n Making sync Azure Embedding call\n") + + response = router.embedding( + model="text-embedding-ada-002", + input=["test 2 from litellm. async embedding"] + ) + print(response) + router.reset() except Exception as e: traceback.print_exc() pytest.fail(f"Error occurred: {e}") -# test_azure_aembedding_on_router() +test_azure_embedding_on_router() def test_bedrock_on_router(): From bc70a6fba8aac08a890d4b3fd8ea5927fa99a55e Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 5 Dec 2023 13:59:27 -0800 Subject: [PATCH 100/460] (test) router: add tests for azure completion, acompletion --- litellm/tests/test_router.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/litellm/tests/test_router.py b/litellm/tests/test_router.py index 0a14e166f..e64b55959 100644 --- a/litellm/tests/test_router.py +++ b/litellm/tests/test_router.py @@ -114,6 +114,9 @@ def test_reading_key_from_model_list(): ] ) print("\n response", response) + str_response = response.choices[0].message.content + print("\n str_response", str_response) + assert len(str_response) > 0 print("\n Testing streaming response") response = router.completion( @@ -126,9 +129,13 @@ def test_reading_key_from_model_list(): ], stream=True ) + completed_response = "" for chunk in response: if chunk is not None: print(chunk) + completed_response += chunk.choices[0].delta.content or "" + print("\n completed_response", completed_response) + assert len(completed_response) > 0 print("\n Passed Streaming") os.environ["AZURE_API_KEY"] = old_api_key router.reset() @@ -183,15 +190,18 @@ def test_router_azure_acompletion(): async def test1(): - response = await router.acompletion( + response: litellm.ModelResponse = await router.acompletion( model="gpt-3.5-turbo", messages=[ { "role": "user", - "content": "hello this request will fail" + "content": "hello this request will pass" } ] ) + str_response = response.choices[0].message.content + print("\n str_response", str_response) + assert len(str_response) > 0 print("\n response", response) asyncio.run(test1()) @@ -207,9 +217,13 @@ def test_router_azure_acompletion(): ], stream=True ) + completed_response = "" async for chunk in response: if chunk is not None: print(chunk) + completed_response += chunk.choices[0].delta.content or "" + print("\n completed_response", completed_response) + assert len(completed_response) > 0 asyncio.run(test2()) print("\n Passed Streaming") os.environ["AZURE_API_KEY"] = old_api_key From 3ff57493f437d6c1b07e1baaea4e6b2e996c51e0 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 5 Dec 2023 14:21:37 -0800 Subject: [PATCH 101/460] (test) router: openai async, sync, stream, no stream --- litellm/tests/test_router.py | 89 +++++++++++++++++++++++++++++++++++- 1 file changed, 88 insertions(+), 1 deletion(-) diff --git a/litellm/tests/test_router.py b/litellm/tests/test_router.py index e64b55959..6572b9cd1 100644 --- a/litellm/tests/test_router.py +++ b/litellm/tests/test_router.py @@ -488,4 +488,91 @@ def test_bedrock_on_router(): except Exception as e: traceback.print_exc() pytest.fail(f"Error occurred: {e}") -# test_bedrock_on_router() \ No newline at end of file +# test_bedrock_on_router() + + +def test_openai_completion_on_router(): + # [PROD Use Case] - Makes an acompletion call + async acompletion call, and sync acompletion call, sync completion + stream + # 4 LLM API calls made here. If it fails, add retries. Do not remove this test. + litellm.set_verbose = True + print("\n Testing OpenAI on router\n") + try: + model_list = [ + { + "model_name": "gpt-3.5-turbo", + "litellm_params": { + "model": "gpt-3.5-turbo", + }, + }, + ] + router = Router(model_list=model_list) + + async def test(): + response = await router.acompletion( + model="gpt-3.5-turbo", + messages=[ + { + "role": "user", + "content": "hello from litellm test", + } + ] + ) + print(response) + assert len(response.choices[0].message.content) > 0 + + print("\n streaming + acompletion test") + response = await router.acompletion( + model="gpt-3.5-turbo", + messages=[ + { + "role": "user", + "content": "hello from litellm test", + } + ], + stream=True + ) + complete_response = "" + print(response) + async for chunk in response: + print(chunk) + complete_response += chunk.choices[0].delta.content or "" + print("\n complete response: ", complete_response) + assert len(complete_response) > 0 + + asyncio.run(test()) + print("\n Testing Sync completion calls \n") + response = router.completion( + model="gpt-3.5-turbo", + messages=[ + { + "role": "user", + "content": "hello from litellm test2", + } + ] + ) + print(response) + assert len(response.choices[0].message.content) > 0 + + print("\n streaming + completion test") + response = router.completion( + model="gpt-3.5-turbo", + messages=[ + { + "role": "user", + "content": "hello from litellm test3", + } + ], + stream=True + ) + complete_response = "" + print(response) + for chunk in response: + print(chunk) + complete_response += chunk.choices[0].delta.content or "" + print("\n complete response: ", complete_response) + assert len(complete_response) > 0 + router.reset() + except Exception as e: + traceback.print_exc() + pytest.fail(f"Error occurred: {e}") +# test_openai_completion_on_router() \ No newline at end of file From c717ed4d052dfda88aa4db3cf2f1ae6f0e493452 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 5 Dec 2023 14:28:23 -0800 Subject: [PATCH 102/460] (test) router: test async embedding + embedding --- litellm/tests/test_router.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/litellm/tests/test_router.py b/litellm/tests/test_router.py index 6572b9cd1..085fcc82a 100644 --- a/litellm/tests/test_router.py +++ b/litellm/tests/test_router.py @@ -398,20 +398,26 @@ def test_aembedding_on_router(): "rpm": 10000, }, ] - + router = Router(model_list=model_list) async def embedding_call(): - router = Router(model_list=model_list) response = await router.aembedding( model="text-embedding-ada-002", input=["good morning from litellm", "this is another item"], ) print(response) - router.reset() asyncio.run(embedding_call()) + + print("\n Making sync Embedding call\n") + response = router.embedding( + model="text-embedding-ada-002", + input=["good morning from litellm 2"], + ) + print("sync embedding response: ", response) + router.reset() except Exception as e: traceback.print_exc() pytest.fail(f"Error occurred: {e}") -# test_aembedding_on_router() +test_aembedding_on_router() def test_azure_embedding_on_router(): From 4d7ff1b33b9991dcf38d821266290631d9bcd2dd Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 5 Dec 2023 14:33:28 -0800 Subject: [PATCH 103/460] fix(proxy_server.py): don't override exceptions if they're of type httpexception --- litellm/proxy/proxy_server.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 3f94f90b9..c70d67bf1 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -279,10 +279,13 @@ async def user_api_key_auth(request: Request, api_key: str = fastapi.Security(ap raise Exception(f"Invalid token") except Exception as e: print(f"An exception occurred - {traceback.format_exc()}") - raise HTTPException( - status_code=status.HTTP_401_UNAUTHORIZED, - detail="invalid user key", - ) + if isinstance(e, HTTPException): + raise e + else: + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail="invalid user key", + ) def prisma_setup(database_url: Optional[str]): global prisma_client From 68ca2a28d41701218b5111e7e3f05eae3e3dd370 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 5 Dec 2023 15:08:00 -0800 Subject: [PATCH 104/460] docs: adds redis url to router + proxy docs --- docs/my-website/docs/caching/redis_cache.md | 10 +++++++++- docs/my-website/docs/proxy/caching.md | 14 ++++++++++++-- docs/my-website/docs/routing.md | 10 ++++++++++ litellm/tests/test_caching.py | 2 +- 4 files changed, 32 insertions(+), 4 deletions(-) diff --git a/docs/my-website/docs/caching/redis_cache.md b/docs/my-website/docs/caching/redis_cache.md index f0fcc6952..521c4d00f 100644 --- a/docs/my-website/docs/caching/redis_cache.md +++ b/docs/my-website/docs/caching/redis_cache.md @@ -1,11 +1,14 @@ # Redis Cache + +[**See Code**](https://github.com/BerriAI/litellm/blob/4d7ff1b33b9991dcf38d821266290631d9bcd2dd/litellm/caching.py#L71) + ### Pre-requisites Install redis ``` pip install redis ``` For the hosted version you can setup your own Redis DB here: https://app.redislabs.com/ -### Usage +### Quick Start ```python import litellm from litellm import completion @@ -55,6 +58,11 @@ litellm.cache = cache # set litellm.cache to your cache ### Detecting Cached Responses For resposes that were returned as cache hit, the response includes a param `cache` = True +:::info + +Only valid for OpenAI <= 0.28.1 [Let us know if you still need this](https://github.com/BerriAI/litellm/issues/new?assignees=&labels=bug&projects=&template=bug_report.yml&title=%5BBug%5D%3A+) +::: + Example response with cache hit ```python { diff --git a/docs/my-website/docs/proxy/caching.md b/docs/my-website/docs/proxy/caching.md index d052102db..56e4b4c1c 100644 --- a/docs/my-website/docs/proxy/caching.md +++ b/docs/my-website/docs/proxy/caching.md @@ -12,17 +12,27 @@ model_list: litellm_settings: set_verbose: True cache: # init cache - type: redis # tell litellm to use redis caching + type: redis # tell litellm to use redis caching (Also: `pip install redis`) ``` #### Step 2: Add Redis Credentials to .env -LiteLLM requires the following REDIS credentials in your env to enable caching +Set either `REDIS_URL` or the `REDIS_HOST` in your os environment, to enable caching. ```shell + REDIS_URL = "" # REDIS_URL='redis://username:password@hostname:port/database' + ## OR ## REDIS_HOST = "" # REDIS_HOST='redis-18841.c274.us-east-1-3.ec2.cloud.redislabs.com' REDIS_PORT = "" # REDIS_PORT='18841' REDIS_PASSWORD = "" # REDIS_PASSWORD='liteLlmIsAmazing' ``` + +**Additional kwargs** +You can pass in any additional redis.Redis arg, by storing the variable + value in your os environment, like this: +```shell +REDIS_ = "" +``` + +[**See how it's read from the environment**](https://github.com/BerriAI/litellm/blob/4d7ff1b33b9991dcf38d821266290631d9bcd2dd/litellm/_redis.py#L40) #### Step 3: Run proxy with config ```shell $ litellm --config /path/to/config.yaml diff --git a/docs/my-website/docs/routing.md b/docs/my-website/docs/routing.md index c0ca93b25..3f55ae28e 100644 --- a/docs/my-website/docs/routing.md +++ b/docs/my-website/docs/routing.md @@ -356,6 +356,16 @@ router = Router(model_list=model_list, print(response) ``` + +**Pass in Redis URL, additional kwargs** +```python +router = Router(model_list: Optional[list] = None, + ## CACHING ## + redis_url=os.getenv("REDIS_URL")", + cache_kwargs= {}, # additional kwargs to pass to RedisCache (see caching.py) + cache_responses=True) +``` + #### Default litellm.completion/embedding params You can also set default params for litellm completion/embedding calls. Here's how to do that: diff --git a/litellm/tests/test_caching.py b/litellm/tests/test_caching.py index 713f97b3e..a0980e9de 100644 --- a/litellm/tests/test_caching.py +++ b/litellm/tests/test_caching.py @@ -36,7 +36,7 @@ def test_caching_v2(): # test in memory cache print(f"error occurred: {traceback.format_exc()}") pytest.fail(f"Error occurred: {e}") -# test_caching_v2() +test_caching_v2() From c4bda13820ee6c25ca9a02ad596e495b41f9981e Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 5 Dec 2023 15:32:15 -0800 Subject: [PATCH 105/460] (fix) sagemaker Llama-2 70b --- litellm/utils.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/litellm/utils.py b/litellm/utils.py index e8e2b57b3..f419ebcd3 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -2206,7 +2206,9 @@ def get_optional_params( # use the openai defaults if max_tokens is not None: optional_params["max_output_tokens"] = max_tokens elif custom_llm_provider == "sagemaker": - if "llama-2" in model: + if "llama-2" in model.lower() or ( + "llama" in model.lower() and "2" in model.lower() # some combination of llama and "2" should exist + ): # jumpstart can also send "Llama-2-70b-chat-hf-48xlarge" # llama-2 models on sagemaker support the following args """ max_new_tokens: Model generates text until the output length (excluding the input context length) reaches max_new_tokens. If specified, it must be a positive integer. From 09c2c1610def9dc713d48a23d138436b6a8b7fb8 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 5 Dec 2023 15:37:39 -0800 Subject: [PATCH 106/460] =?UTF-8?q?bump:=20version=201.10.8=20=E2=86=92=20?= =?UTF-8?q?1.10.9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 3490408c2..e6a5e9dc2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "litellm" -version = "1.10.8" +version = "1.10.9" description = "Library to easily interface with LLM API providers" authors = ["BerriAI"] license = "MIT License" @@ -55,7 +55,7 @@ requires = ["poetry-core", "wheel"] build-backend = "poetry.core.masonry.api" [tool.commitizen] -version = "1.10.8" +version = "1.10.9" version_files = [ "pyproject.toml:^version" ] From b4c78c7b9eb7657f2a793ccd681c527963cce9ca Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 5 Dec 2023 16:04:43 -0800 Subject: [PATCH 107/460] fix(utils.py): support sagemaker llama2 custom endpoints --- litellm/llms/sagemaker.py | 30 ++++++++++------- litellm/main.py | 1 + litellm/tests/test_completion.py | 10 ++++-- litellm/utils.py | 57 +++++++++++++++----------------- 4 files changed, 53 insertions(+), 45 deletions(-) diff --git a/litellm/llms/sagemaker.py b/litellm/llms/sagemaker.py index 51be1f53d..1ee43ec2e 100644 --- a/litellm/llms/sagemaker.py +++ b/litellm/llms/sagemaker.py @@ -9,6 +9,7 @@ from litellm.utils import ModelResponse, get_secret, Usage import sys from copy import deepcopy import httpx +from .prompt_templates.factory import prompt_factory, custom_prompt class SagemakerError(Exception): def __init__(self, status_code, message): @@ -61,6 +62,7 @@ def completion( print_verbose: Callable, encoding, logging_obj, + custom_prompt_dict={}, optional_params=None, litellm_params=None, logger_fn=None, @@ -107,19 +109,23 @@ def completion( inference_params[k] = v model = model - prompt = "" - for message in messages: - if "role" in message: - if message["role"] == "user": - prompt += ( - f"{message['content']}" - ) + if model in custom_prompt_dict: + # check if the model has a registered custom prompt + model_prompt_details = custom_prompt_dict[model] + prompt = custom_prompt( + role_dict=model_prompt_details.get("roles", None), + initial_prompt_value=model_prompt_details.get("initial_prompt_value", ""), + final_prompt_value=model_prompt_details.get("final_prompt_value", ""), + messages=messages + ) + else: + hf_model_name = model + if "jumpstart-dft-meta-textgeneration-llama" in model: # llama2 model + if model.endswith("-f") or "-f-" in model: # sagemaker default for a chat model + hf_model_name = "meta-llama/Llama-2-7b-chat" # apply the prompt template for a llama2 chat model else: - prompt += ( - f"{message['content']}" - ) - else: - prompt += f"{message['content']}" + hf_model_name = "meta-llama/Llama-2-7b" # apply the normal prompt template + prompt = prompt_factory(model=hf_model_name, messages=messages) data = json.dumps({ "inputs": prompt, diff --git a/litellm/main.py b/litellm/main.py index 5c421a351..e0c7cf3b1 100644 --- a/litellm/main.py +++ b/litellm/main.py @@ -1166,6 +1166,7 @@ def completion( print_verbose=print_verbose, optional_params=optional_params, litellm_params=litellm_params, + custom_prompt_dict=custom_prompt_dict, logger_fn=logger_fn, encoding=encoding, logging_obj=logging diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index 15b547a85..3c4a9aa40 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -1048,20 +1048,24 @@ def test_completion_sagemaker(): def test_completion_chat_sagemaker(): try: + messages = [{"role": "user", "content": "Hey, how's it going?"}] print("testing sagemaker") litellm.set_verbose=True response = completion( model="sagemaker/jumpstart-dft-meta-textgeneration-llama-2-7b-f", messages=messages, + max_tokens=100, stream=True, ) # Add any assertions here to check the response - print(response) + complete_response = "" for chunk in response: - print(chunk) + complete_response += chunk.choices[0].delta.content or "" + print(f"complete_response: {complete_response}") + assert len(complete_response) > 0 except Exception as e: pytest.fail(f"Error occurred: {e}") -# test_completion_chat_sagemaker() +test_completion_chat_sagemaker() def test_completion_bedrock_titan(): try: diff --git a/litellm/utils.py b/litellm/utils.py index f419ebcd3..814735f88 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -2206,32 +2206,31 @@ def get_optional_params( # use the openai defaults if max_tokens is not None: optional_params["max_output_tokens"] = max_tokens elif custom_llm_provider == "sagemaker": - if "llama-2" in model.lower() or ( - "llama" in model.lower() and "2" in model.lower() # some combination of llama and "2" should exist - ): # jumpstart can also send "Llama-2-70b-chat-hf-48xlarge" - # llama-2 models on sagemaker support the following args - """ - max_new_tokens: Model generates text until the output length (excluding the input context length) reaches max_new_tokens. If specified, it must be a positive integer. - temperature: Controls the randomness in the output. Higher temperature results in output sequence with low-probability words and lower temperature results in output sequence with high-probability words. If temperature -> 0, it results in greedy decoding. If specified, it must be a positive float. - top_p: In each step of text generation, sample from the smallest possible set of words with cumulative probability top_p. If specified, it must be a float between 0 and 1. - return_full_text: If True, input text will be part of the output generated text. If specified, it must be boolean. The default value for it is False. - """ - ## check if unsupported param passed in - supported_params = ["temperature", "max_tokens", "stream"] - _check_valid_arg(supported_params=supported_params) - - if max_tokens is not None: - optional_params["max_new_tokens"] = max_tokens - if temperature is not None: - optional_params["temperature"] = temperature - if top_p is not None: - optional_params["top_p"] = top_p - if stream: - optional_params["stream"] = stream - else: - ## check if unsupported param passed in - supported_params = [] - _check_valid_arg(supported_params=supported_params) + ## check if unsupported param passed in + supported_params = ["stream", "temperature", "max_tokens", "top_p", "stop", "n"] + _check_valid_arg(supported_params=supported_params) + # temperature, top_p, n, stream, stop, max_tokens, n, presence_penalty default to None + if temperature is not None: + if temperature == 0.0 or temperature == 0: + # hugging face exception raised when temp==0 + # Failed: Error occurred: HuggingfaceException - Input validation error: `temperature` must be strictly positive + temperature = 0.01 + optional_params["temperature"] = temperature + if top_p is not None: + optional_params["top_p"] = top_p + if n is not None: + optional_params["best_of"] = n + optional_params["do_sample"] = True # Need to sample if you want best of for hf inference endpoints + if stream is not None: + optional_params["stream"] = stream + if stop is not None: + optional_params["stop"] = stop + if max_tokens is not None: + # HF TGI raises the following exception when max_new_tokens==0 + # Failed: Error occurred: HuggingfaceException - Input validation error: `max_new_tokens` must be strictly positive + if max_tokens == 0: + max_tokens = 1 + optional_params["max_new_tokens"] = max_tokens elif custom_llm_provider == "bedrock": if "ai21" in model: supported_params = ["max_tokens", "temperature", "top_p", "stream"] @@ -5270,11 +5269,9 @@ class CustomStreamWrapper: else: model_response.choices[0].finish_reason = "stop" self.sent_last_chunk = True - chunk_size = 30 - new_chunk = self.completion_stream[:chunk_size] + new_chunk = self.completion_stream completion_obj["content"] = new_chunk - self.completion_stream = self.completion_stream[chunk_size:] - time.sleep(0.05) + self.completion_stream = self.completion_stream[len(self.completion_stream):] elif self.custom_llm_provider == "petals": if len(self.completion_stream)==0: if self.sent_last_chunk: From d2dab362dfe357f1c2e84a3c5ebd97f3d5c18c0c Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 5 Dec 2023 16:08:12 -0800 Subject: [PATCH 108/460] (fix) proxy debugging display Init API key --- litellm/proxy/proxy_server.py | 4 ++-- litellm/router.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index c70d67bf1..4cdb4d082 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -609,6 +609,8 @@ def initialize( generate_feedback_box() user_model = model user_debug = debug + if debug==True: # this needs to be first, so users can see Router init debugg + litellm.set_verbose = True dynamic_config = {"general": {}, user_model: {}} if config: llm_router, llm_model_list, general_settings = load_router_config(router=llm_router, config_file_path=config) @@ -646,8 +648,6 @@ def initialize( if max_budget: # litellm-specific param litellm.max_budget = max_budget dynamic_config["general"]["max_budget"] = max_budget - if debug==True: # litellm-specific param - litellm.set_verbose = True if use_queue: celery_setup(use_queue=use_queue) if experimental: diff --git a/litellm/router.py b/litellm/router.py index be6cbd917..4f344e18f 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -959,7 +959,7 @@ class Router: ) else: - self.print_verbose(f"Initializing OpenAI Client for {model_name}, {str(api_base)}") + self.print_verbose(f"Initializing OpenAI Client for {model_name}, {str(api_base)}, {api_key}") model["async_client"] = openai.AsyncOpenAI( api_key=api_key, base_url=api_base, From 01fc7f1931c2297d79d9f12654e58623a196c627 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 5 Dec 2023 16:18:13 -0800 Subject: [PATCH 109/460] fix(sagemaker.py): add support for amazon neuron llama models --- litellm/llms/sagemaker.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/litellm/llms/sagemaker.py b/litellm/llms/sagemaker.py index 1ee43ec2e..a575bf9d1 100644 --- a/litellm/llms/sagemaker.py +++ b/litellm/llms/sagemaker.py @@ -120,8 +120,8 @@ def completion( ) else: hf_model_name = model - if "jumpstart-dft-meta-textgeneration-llama" in model: # llama2 model - if model.endswith("-f") or "-f-" in model: # sagemaker default for a chat model + if "jumpstart-dft-meta-textgeneration-llama" in model or "meta-textgenerationneuron-llama-2-7b" in model: # llama2 model + if model.endswith("-f") or "-f-" in model or "chat" in model: # sagemaker default for a chat model hf_model_name = "meta-llama/Llama-2-7b-chat" # apply the prompt template for a llama2 chat model else: hf_model_name = "meta-llama/Llama-2-7b" # apply the normal prompt template From 3c60682eb4096c5486b639c7a413ba681894d439 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 5 Dec 2023 16:19:28 -0800 Subject: [PATCH 110/460] fix(sagemaker.py): accept all amazon neuron llama2 models --- litellm/llms/sagemaker.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/llms/sagemaker.py b/litellm/llms/sagemaker.py index a575bf9d1..3e23ae415 100644 --- a/litellm/llms/sagemaker.py +++ b/litellm/llms/sagemaker.py @@ -120,7 +120,7 @@ def completion( ) else: hf_model_name = model - if "jumpstart-dft-meta-textgeneration-llama" in model or "meta-textgenerationneuron-llama-2-7b" in model: # llama2 model + if "jumpstart-dft-meta-textgeneration-llama" in model or "meta-textgenerationneuron-llama-2" in model: # llama2 model if model.endswith("-f") or "-f-" in model or "chat" in model: # sagemaker default for a chat model hf_model_name = "meta-llama/Llama-2-7b-chat" # apply the prompt template for a llama2 chat model else: From a38504ff1b85fe2acf5ce27c72c450cdede12bf2 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 5 Dec 2023 16:23:03 -0800 Subject: [PATCH 111/460] fix(sagemaker.py): fix meta llama model name for sagemaker custom deployment --- litellm/llms/sagemaker.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/llms/sagemaker.py b/litellm/llms/sagemaker.py index 3e23ae415..3ddfb4c60 100644 --- a/litellm/llms/sagemaker.py +++ b/litellm/llms/sagemaker.py @@ -120,7 +120,7 @@ def completion( ) else: hf_model_name = model - if "jumpstart-dft-meta-textgeneration-llama" in model or "meta-textgenerationneuron-llama-2" in model: # llama2 model + if "meta-textgeneration-llama-2" in model or "meta-textgenerationneuron-llama-2" in model: # llama2 model if model.endswith("-f") or "-f-" in model or "chat" in model: # sagemaker default for a chat model hf_model_name = "meta-llama/Llama-2-7b-chat" # apply the prompt template for a llama2 chat model else: From 54d8a9df3f7283d02e1ad132d5f99fa519871c75 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 5 Dec 2023 16:31:59 -0800 Subject: [PATCH 112/460] fix(sagemaker.py): enable passing hf model name for prompt template --- litellm/llms/sagemaker.py | 8 ++------ litellm/main.py | 5 ++++- litellm/tests/test_completion.py | 2 ++ 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/litellm/llms/sagemaker.py b/litellm/llms/sagemaker.py index 3ddfb4c60..e1c9ccdc8 100644 --- a/litellm/llms/sagemaker.py +++ b/litellm/llms/sagemaker.py @@ -63,6 +63,7 @@ def completion( encoding, logging_obj, custom_prompt_dict={}, + hf_model_name=None, optional_params=None, litellm_params=None, logger_fn=None, @@ -119,12 +120,7 @@ def completion( messages=messages ) else: - hf_model_name = model - if "meta-textgeneration-llama-2" in model or "meta-textgenerationneuron-llama-2" in model: # llama2 model - if model.endswith("-f") or "-f-" in model or "chat" in model: # sagemaker default for a chat model - hf_model_name = "meta-llama/Llama-2-7b-chat" # apply the prompt template for a llama2 chat model - else: - hf_model_name = "meta-llama/Llama-2-7b" # apply the normal prompt template + hf_model_name = hf_model_name or model # pass in hf model name for pulling it's prompt template - (e.g. `hf_model_name="meta-llama/Llama-2-7b-chat-hf` applies the llama2 chat template to the prompt) prompt = prompt_factory(model=hf_model_name, messages=messages) data = json.dumps({ diff --git a/litellm/main.py b/litellm/main.py index e0c7cf3b1..f265d4653 100644 --- a/litellm/main.py +++ b/litellm/main.py @@ -341,11 +341,13 @@ def completion( final_prompt_value = kwargs.get("final_prompt_value", None) bos_token = kwargs.get("bos_token", None) eos_token = kwargs.get("eos_token", None) + hf_model_name = kwargs.get("hf_model_name", None) + ### ASYNC CALLS ### acompletion = kwargs.get("acompletion", False) client = kwargs.get("client", None) ######## end of unpacking kwargs ########### openai_params = ["functions", "function_call", "temperature", "temperature", "top_p", "n", "stream", "stop", "max_tokens", "presence_penalty", "frequency_penalty", "logit_bias", "user", "request_timeout", "api_base", "api_version", "api_key", "deployment_id", "organization", "base_url", "default_headers", "timeout", "response_format", "seed", "tools", "tool_choice", "max_retries"] - litellm_params = ["metadata", "acompletion", "caching", "return_async", "mock_response", "api_key", "api_version", "api_base", "force_timeout", "logger_fn", "verbose", "custom_llm_provider", "litellm_logging_obj", "litellm_call_id", "use_client", "id", "fallbacks", "azure", "headers", "model_list", "num_retries", "context_window_fallback_dict", "roles", "final_prompt_value", "bos_token", "eos_token", "request_timeout", "complete_response", "self", "client", "rpm", "tpm", "input_cost_per_token", "output_cost_per_token"] + litellm_params = ["metadata", "acompletion", "caching", "return_async", "mock_response", "api_key", "api_version", "api_base", "force_timeout", "logger_fn", "verbose", "custom_llm_provider", "litellm_logging_obj", "litellm_call_id", "use_client", "id", "fallbacks", "azure", "headers", "model_list", "num_retries", "context_window_fallback_dict", "roles", "final_prompt_value", "bos_token", "eos_token", "request_timeout", "complete_response", "self", "client", "rpm", "tpm", "input_cost_per_token", "output_cost_per_token", "hf_model_name"] default_params = openai_params + litellm_params non_default_params = {k: v for k,v in kwargs.items() if k not in default_params} # model-specific params - pass them straight to the model/provider if mock_response: @@ -1167,6 +1169,7 @@ def completion( optional_params=optional_params, litellm_params=litellm_params, custom_prompt_dict=custom_prompt_dict, + hf_model_name=hf_model_name, logger_fn=logger_fn, encoding=encoding, logging_obj=logging diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index 3c4a9aa40..d0cda9335 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -1039,6 +1039,7 @@ def test_completion_sagemaker(): messages=messages, temperature=0.2, max_tokens=80, + hf_model_name="meta-llama/Llama-2-7b", ) # Add any assertions here to check the response print(response) @@ -1056,6 +1057,7 @@ def test_completion_chat_sagemaker(): messages=messages, max_tokens=100, stream=True, + hf_model_name="meta-llama/Llama-2-7b-chat-hf", ) # Add any assertions here to check the response complete_response = "" From 88845dddb1c25ebeda244ae2526fd9ba8df21944 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 5 Dec 2023 16:42:19 -0800 Subject: [PATCH 113/460] fix(sagemaker.py): bring back llama2 templating for sagemaker --- litellm/llms/sagemaker.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/litellm/llms/sagemaker.py b/litellm/llms/sagemaker.py index e1c9ccdc8..ca71461cf 100644 --- a/litellm/llms/sagemaker.py +++ b/litellm/llms/sagemaker.py @@ -120,6 +120,12 @@ def completion( messages=messages ) else: + if hf_model_name is None: + if "llama2" in model.lower(): # llama2 model + if "chat" in model.lower(): + hf_model_name = "meta-llama/Llama-2-7b-chat-hf" + else: + hf_model_name = "meta-llama/Llama-2-7b" hf_model_name = hf_model_name or model # pass in hf model name for pulling it's prompt template - (e.g. `hf_model_name="meta-llama/Llama-2-7b-chat-hf` applies the llama2 chat template to the prompt) prompt = prompt_factory(model=hf_model_name, messages=messages) From ff949490de856e30b3ec502c09065d2f25776e12 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 5 Dec 2023 16:56:18 -0800 Subject: [PATCH 114/460] docs(input.md): add hf_model_name to docs --- docs/my-website/docs/completion/input.md | 21 ++++++++++++++++++++- litellm/llms/sagemaker.py | 15 +++++++++------ litellm/tests/test_completion.py | 3 ++- litellm/utils.py | 8 ++++++++ 4 files changed, 39 insertions(+), 8 deletions(-) diff --git a/docs/my-website/docs/completion/input.md b/docs/my-website/docs/completion/input.md index 7902275ab..047be5395 100644 --- a/docs/my-website/docs/completion/input.md +++ b/docs/my-website/docs/completion/input.md @@ -40,7 +40,7 @@ This list is constantly being updated. |AI21| ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | |VertexAI| ✅ | ✅ | | ✅ | | | | | | | |Bedrock| ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | -|Sagemaker| ✅ | ✅ (only `jumpstart llama2`) | | ✅ | | | | | | | +|Sagemaker| ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | |TogetherAI| ✅ | ✅ | ✅ | ✅ | ✅ | | | | | | |AlephAlpha| ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | |Palm| ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | | | @@ -185,6 +185,25 @@ def completion( - `metadata`: *dict (optional)* - Any additional data you want to be logged when the call is made (sent to logging integrations, eg. promptlayer and accessible via custom callback function) +**CUSTOM MODEL COST** +- `input_cost_per_token`: *float (optional)* - The cost per input token for the completion call + +- `output_cost_per_token`: *float (optional)* - The cost per output token for the completion call + +**CUSTOM PROMPT TEMPLATE** (See [prompt formatting for more info](./prompt_formatting.md#format-prompt-yourself)) +- `initial_prompt_value`: *string (optional)* - Initial string applied at the start of the input messages + +- `roles`: *dict (optional)* - Dictionary specifying how to format the prompt based on the role + message passed in via `messages`. + +- `final_prompt_value`: *string (optional)* - Final string applied at the end of the input messages + +- `bos_token`: *string (optional)* - Initial string applied at the start of a sequence + +- `eos_token`: *string (optional)* - Initial string applied at the end of a sequence + +- `hf_model_name`: *string (optional)* - [Sagemaker Only] The corresponding huggingface name of the model, used to pull the right chat template for the model. + + ## Provider-specific Params Providers might offer params not supported by OpenAI (e.g. top_k). You can pass those in 2 ways: - via completion(): We'll pass the non-openai param, straight to the provider as part of the request body. diff --git a/litellm/llms/sagemaker.py b/litellm/llms/sagemaker.py index ca71461cf..2482c5457 100644 --- a/litellm/llms/sagemaker.py +++ b/litellm/llms/sagemaker.py @@ -149,12 +149,15 @@ def completion( additional_args={"complete_input_dict": data, "request_str": request_str}, ) ## COMPLETION CALL - response = client.invoke_endpoint( - EndpointName=model, - ContentType="application/json", - Body=data, - CustomAttributes="accept_eula=true", - ) + try: + response = client.invoke_endpoint( + EndpointName=model, + ContentType="application/json", + Body=data, + CustomAttributes="accept_eula=true", + ) + except Exception as e: + raise SagemakerError(status_code=500, message=f"{str(e)}") response = response["Body"].read().decode("utf8") ## LOGGING logging_obj.post_call( diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index d0cda9335..0f0bff1cc 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -1053,10 +1053,11 @@ def test_completion_chat_sagemaker(): print("testing sagemaker") litellm.set_verbose=True response = completion( - model="sagemaker/jumpstart-dft-meta-textgeneration-llama-2-7b-f", + model="sagemaker/jumpstart-dft-meta-textgeneration-llama-2-7b-chat", messages=messages, max_tokens=100, stream=True, + n=2, hf_model_name="meta-llama/Llama-2-7b-chat-hf", ) # Add any assertions here to check the response diff --git a/litellm/utils.py b/litellm/utils.py index 814735f88..9e93f6b64 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -4065,6 +4065,14 @@ def exception_type( llm_provider="sagemaker", response=original_exception.response ) + elif "Input validation error: `best_of` must be > 0 and <= 2" in error_str: + exception_mapping_worked = True + raise BadRequestError( + message=f"SagemakerException - the value of 'n' must be > 0 and <= 2 for sagemaker endpoints", + model=model, + llm_provider="sagemaker", + response=original_exception.response + ) elif custom_llm_provider == "vertex_ai": if "Vertex AI API has not been used in project" in error_str or "Unable to find your project" in error_str: exception_mapping_worked = True From bb6a1968b3eb5cbe9bf8b4a5a83e5f70f6f4e68c Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 5 Dec 2023 16:51:50 -0800 Subject: [PATCH 115/460] (fix) router - allow user to call 1 deployment --- litellm/router.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/litellm/router.py b/litellm/router.py index 4f344e18f..b63f45f3d 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -1064,6 +1064,13 @@ class Router: healthy_deployments.remove(deployment) self.print_verbose(f"healthy deployments: length {len(healthy_deployments)} {healthy_deployments}") if len(healthy_deployments) == 0: + # users can also specify a specific deployment name. At this point we should check if they are just trying to call a specific deployment + for deployment in self.model_list: + cleaned_model = litellm.utils.remove_model_id(deployment.get("litellm_params").get("model")) + if cleaned_model == model: + # User Passed a specific deployment name on their config.yaml, example azure/chat-gpt-v-2 + # return the first deployment where the `model` matches the specificed deployment name + return deployment raise ValueError("No models available") if litellm.model_alias_map and model in litellm.model_alias_map: model = litellm.model_alias_map[ From 703a575a5d1cffccca905977ac30a9c7a7cfb82a Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 5 Dec 2023 16:56:25 -0800 Subject: [PATCH 116/460] (test) call 1 deployment on router --- litellm/tests/test_router.py | 69 ++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) diff --git a/litellm/tests/test_router.py b/litellm/tests/test_router.py index 085fcc82a..e0e232748 100644 --- a/litellm/tests/test_router.py +++ b/litellm/tests/test_router.py @@ -145,6 +145,75 @@ def test_reading_key_from_model_list(): pytest.fail(f"Got unexpected exception on router! - {e}") # test_reading_key_from_model_list() +def test_call_one_endpoint(): + # [PROD TEST CASE] + # user passes one deployment they want to call on the router, we call the specified one + # this test makes a completion calls azure/chatgpt-v-2, it should work + try: + print("Testing calling a specific deployment") + old_api_key = os.environ["AZURE_API_KEY"] + + model_list = [ + { + "model_name": "gpt-3.5-turbo", # openai model name + "litellm_params": { # params for litellm completion/embedding call + "model": "azure/chatgpt-v-2", + "api_key": old_api_key, + "api_version": os.getenv("AZURE_API_VERSION"), + "api_base": os.getenv("AZURE_API_BASE") + }, + "tpm": 240000, + "rpm": 1800 + }, + { + "model_name": "claude-v1", + "litellm_params": { + "model": "bedrock/anthropic.claude-instant-v1", + }, + "tpm": 100000, + "rpm": 10000, + } + ] + + router = Router(model_list=model_list, + routing_strategy="simple-shuffle", + set_verbose=True, + num_retries=1) # type: ignore + old_api_base = os.environ.pop("AZURE_API_BASE", None) + + + response = router.completion( + model="azure/chatgpt-v-2", + messages=[ + { + "role": "user", + "content": "hello this request will pass" + } + ], + ) + print("\n response", response) + + + response = router.completion( + model="bedrock/anthropic.claude-instant-v1", + messages=[ + { + "role": "user", + "content": "hello this request will pass" + } + ], + ) + + print("\n response", response) + + os.environ["AZURE_API_BASE"] = old_api_base + os.environ["AZURE_API_KEY"] = old_api_key + except Exception as e: + print(f"FAILED TEST") + pytest.fail(f"Got unexpected exception on router! - {e}") + +test_call_one_endpoint() + def test_router_azure_acompletion(): From 1addaecf48c6ace4705938bd2ca4e93dc8f4f42b Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 5 Dec 2023 16:58:12 -0800 Subject: [PATCH 117/460] docs(aws_sagemaker.md): add hf_model_name to sagemaker docs --- .../docs/providers/aws_sagemaker.md | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/docs/my-website/docs/providers/aws_sagemaker.md b/docs/my-website/docs/providers/aws_sagemaker.md index 264d6d9f2..e9160139d 100644 --- a/docs/my-website/docs/providers/aws_sagemaker.md +++ b/docs/my-website/docs/providers/aws_sagemaker.md @@ -42,6 +42,27 @@ response = completion( ) ``` +### Specifying HF Model Name +To apply the correct prompt template for your sagemaker deployment, pass in it's hf model name as well. + +```python +import os +from litellm import completion + +os.environ["AWS_ACCESS_KEY_ID"] = "" +os.environ["AWS_SECRET_ACCESS_KEY"] = "" +os.environ["AWS_REGION_NAME"] = "" + +response = completion( + model="sagemaker/jumpstart-dft-meta-textgeneration-llama-2-7b", + messages=messages, + temperature=0.2, + max_tokens=80, + hf_model_name="meta-llama/Llama-2-7b", + ) +``` + + ### Usage - Streaming Sagemaker currently does not support streaming - LiteLLM fakes streaming by returning chunks of the response string From e4fae5a3e8946ef7d60dc24f814839a6a7472180 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 5 Dec 2023 16:59:37 -0800 Subject: [PATCH 118/460] docs(aws_sagemaker.md): support for all huggingface/jumpstart modelsn --- docs/my-website/docs/providers/aws_sagemaker.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/my-website/docs/providers/aws_sagemaker.md b/docs/my-website/docs/providers/aws_sagemaker.md index e9160139d..606268ad1 100644 --- a/docs/my-website/docs/providers/aws_sagemaker.md +++ b/docs/my-website/docs/providers/aws_sagemaker.md @@ -1,5 +1,5 @@ # AWS Sagemaker -LiteLLM supports Llama2 on Sagemaker +LiteLLM supports All Sagemaker Huggingface Jumpstart Models ### API KEYS ```python From a532cf14aefa9a4dc77457d832b137f96364c6b6 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 5 Dec 2023 17:18:46 -0800 Subject: [PATCH 119/460] (feat) router - track original deployment names --- litellm/router.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/litellm/router.py b/litellm/router.py index b63f45f3d..775d1c90b 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -78,6 +78,7 @@ class Router: routing_strategy: Literal["simple-shuffle", "least-busy", "usage-based-routing", "latency-based-routing"] = "simple-shuffle") -> None: self.set_verbose = set_verbose + self.deployment_names = [] # names of models under litellm_params. ex. azure/chatgpt-v-2 if model_list: self.set_model_list(model_list) self.healthy_deployments: List = self.model_list @@ -990,6 +991,7 @@ class Router: ) ############ End of initializing Clients for OpenAI/Azure ################### + self.deployment_names.append(model["litellm_params"]["model"]) model_id = "" for key in model["litellm_params"]: if key != "api_key": From 3af4f7fb0f16337fb77412886f8206ab4ace1c44 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 5 Dec 2023 17:19:39 -0800 Subject: [PATCH 120/460] (fix) proxy: /chat/cmp - check 1 deployment --- litellm/proxy/proxy_server.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 4cdb4d082..088181028 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -863,7 +863,9 @@ async def chat_completion(request: Request, model: Optional[str] = None, user_ap router_model_names = [m["model_name"] for m in llm_model_list] if llm_model_list is not None else [] if llm_router is not None and data["model"] in router_model_names: # model in router model list response = await llm_router.acompletion(**data) - else: + elif llm_router is not None and data["model"] in llm_router.deployment_names: # model in router deployments, calling a specific deployment on the router + response = await llm_router.acompletion(**data) + else: # router is not set response = await litellm.acompletion(**data) if 'stream' in data and data['stream'] == True: # use generate_responses to stream responses return StreamingResponse(async_data_generator(response), media_type='text/event-stream') From 4d5313343b3d02382bf0628faf991ed7ceb2253b Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 5 Dec 2023 17:22:07 -0800 Subject: [PATCH 121/460] (feat) proxy /embedding check 1 deploy call --- litellm/proxy/proxy_server.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 088181028..80f19986b 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -925,6 +925,8 @@ async def embeddings(request: Request, user_api_key_dict: UserAPIKeyAuth = Depen router_model_names = [m["model_name"] for m in llm_model_list] if llm_model_list is not None else [] if llm_router is not None and data["model"] in router_model_names: # model in router model list response = await llm_router.aembedding(**data) + elif llm_router is not None and data["model"] in llm_router.deployment_names: # model in router deployments, calling a specific deployment on the router + response = await llm_router.aembedding(**data) else: response = await litellm.aembedding(**data) background_tasks.add_task(log_input_output, request, response) # background task for logging to OTEL From e788a34da467a8504ed116d0fabf1c7d59d4fa04 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 5 Dec 2023 17:26:03 -0800 Subject: [PATCH 122/460] (chore) linting fix --- litellm/router.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/router.py b/litellm/router.py index 775d1c90b..941ad1318 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -78,7 +78,7 @@ class Router: routing_strategy: Literal["simple-shuffle", "least-busy", "usage-based-routing", "latency-based-routing"] = "simple-shuffle") -> None: self.set_verbose = set_verbose - self.deployment_names = [] # names of models under litellm_params. ex. azure/chatgpt-v-2 + self.deployment_names: List = [] # names of models under litellm_params. ex. azure/chatgpt-v-2 if model_list: self.set_model_list(model_list) self.healthy_deployments: List = self.model_list From 1fa9ddd739fdc56b36dfe675272037093688e976 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 5 Dec 2023 17:29:09 -0800 Subject: [PATCH 123/460] (chore) linting fix --- litellm/tests/test_router.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/tests/test_router.py b/litellm/tests/test_router.py index e0e232748..61ec8aba9 100644 --- a/litellm/tests/test_router.py +++ b/litellm/tests/test_router.py @@ -259,7 +259,7 @@ def test_router_azure_acompletion(): async def test1(): - response: litellm.ModelResponse = await router.acompletion( + response = await router.acompletion( model="gpt-3.5-turbo", messages=[ { From 0eccc1b1f8c685278db2f1bedb2491ddc8039280 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 5 Dec 2023 17:35:35 -0800 Subject: [PATCH 124/460] (test) router: call 1 deployment --- litellm/tests/test_router.py | 68 ++++++++++++++++++++++++------------ 1 file changed, 45 insertions(+), 23 deletions(-) diff --git a/litellm/tests/test_router.py b/litellm/tests/test_router.py index 61ec8aba9..ca84f144c 100644 --- a/litellm/tests/test_router.py +++ b/litellm/tests/test_router.py @@ -172,7 +172,17 @@ def test_call_one_endpoint(): }, "tpm": 100000, "rpm": 10000, - } + }, + { + "model_name": "text-embedding-ada-002", + "litellm_params": { + "model": "azure/azure-embedding-model", + "api_key":os.environ['AZURE_API_KEY'], + "api_base": os.environ['AZURE_API_BASE'] + }, + "tpm": 100000, + "rpm": 10000, + }, ] router = Router(model_list=model_list, @@ -181,38 +191,50 @@ def test_call_one_endpoint(): num_retries=1) # type: ignore old_api_base = os.environ.pop("AZURE_API_BASE", None) + async def call_azure_completion(): + response = await router.acompletion( + model="azure/chatgpt-v-2", + messages=[ + { + "role": "user", + "content": "hello this request will pass" + } + ], + ) + print("\n response", response) - response = router.completion( - model="azure/chatgpt-v-2", - messages=[ - { - "role": "user", - "content": "hello this request will pass" - } - ], - ) - print("\n response", response) + async def call_bedrock_claude(): + response = await router.acompletion( + model="bedrock/anthropic.claude-instant-v1", + messages=[ + { + "role": "user", + "content": "hello this request will pass" + } + ], + ) + print("\n response", response) + + async def call_azure_embedding(): + response = await router.aembedding( + model="azure/azure-embedding-model", + input = ["good morning from litellm"] + ) - response = router.completion( - model="bedrock/anthropic.claude-instant-v1", - messages=[ - { - "role": "user", - "content": "hello this request will pass" - } - ], - ) - - print("\n response", response) + print("\n response", response) + asyncio.run(call_azure_completion()) + asyncio.run(call_bedrock_claude()) + asyncio.run(call_azure_embedding()) + os.environ["AZURE_API_BASE"] = old_api_base os.environ["AZURE_API_KEY"] = old_api_key except Exception as e: print(f"FAILED TEST") pytest.fail(f"Got unexpected exception on router! - {e}") -test_call_one_endpoint() +# test_call_one_endpoint() From 648d41c96f3178405ac1252a9c195737f3025794 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 5 Dec 2023 17:47:37 -0800 Subject: [PATCH 125/460] fix(sagemaker.py): prompt templating fixes --- litellm/llms/sagemaker.py | 8 ++++---- litellm/tests/test_completion.py | 28 ++++++++++++++++++++-------- 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/litellm/llms/sagemaker.py b/litellm/llms/sagemaker.py index 2482c5457..cb5b56bdd 100644 --- a/litellm/llms/sagemaker.py +++ b/litellm/llms/sagemaker.py @@ -121,10 +121,10 @@ def completion( ) else: if hf_model_name is None: - if "llama2" in model.lower(): # llama2 model - if "chat" in model.lower(): + if "llama-2" in model.lower(): # llama-2 model + if "chat" in model.lower(): # apply llama2 chat template hf_model_name = "meta-llama/Llama-2-7b-chat-hf" - else: + else: # apply regular llama2 template hf_model_name = "meta-llama/Llama-2-7b" hf_model_name = hf_model_name or model # pass in hf model name for pulling it's prompt template - (e.g. `hf_model_name="meta-llama/Llama-2-7b-chat-hf` applies the llama2 chat template to the prompt) prompt = prompt_factory(model=hf_model_name, messages=messages) @@ -146,7 +146,7 @@ def completion( logging_obj.pre_call( input=prompt, api_key="", - additional_args={"complete_input_dict": data, "request_str": request_str}, + additional_args={"complete_input_dict": data, "request_str": request_str, "hf_model_name": hf_model_name}, ) ## COMPLETION CALL try: diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index 0f0bff1cc..69aff761c 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -1035,30 +1035,27 @@ def test_completion_sagemaker(): print("testing sagemaker") litellm.set_verbose=True response = completion( - model="sagemaker/jumpstart-dft-meta-textgeneration-llama-2-7b", + model="sagemaker/berri-benchmarking-Llama-2-70b-chat-hf-4", messages=messages, temperature=0.2, max_tokens=80, - hf_model_name="meta-llama/Llama-2-7b", ) # Add any assertions here to check the response print(response) except Exception as e: pytest.fail(f"Error occurred: {e}") -# test_completion_sagemaker() +test_completion_sagemaker() def test_completion_chat_sagemaker(): try: messages = [{"role": "user", "content": "Hey, how's it going?"}] - print("testing sagemaker") litellm.set_verbose=True response = completion( - model="sagemaker/jumpstart-dft-meta-textgeneration-llama-2-7b-chat", + model="sagemaker/berri-benchmarking-Llama-2-70b-chat-hf-4", messages=messages, max_tokens=100, + temperature=0.7, stream=True, - n=2, - hf_model_name="meta-llama/Llama-2-7b-chat-hf", ) # Add any assertions here to check the response complete_response = "" @@ -1068,8 +1065,23 @@ def test_completion_chat_sagemaker(): assert len(complete_response) > 0 except Exception as e: pytest.fail(f"Error occurred: {e}") -test_completion_chat_sagemaker() +# test_completion_chat_sagemaker() +def test_completion_chat_sagemaker_mistral(): + try: + messages = [{"role": "user", "content": "Hey, how's it going?"}] + + response = completion( + model="sagemaker/jumpstart-dft-hf-llm-mistral-7b-instruct", + messages=messages, + max_tokens=100, + ) + # Add any assertions here to check the response + print(response) + except Exception as e: + pytest.fail(f"An error occurred: {str(e)}") + +# test_completion_chat_sagemaker_mistral() def test_completion_bedrock_titan(): try: response = completion( From cb52e3347ed3dae7913c5569a66a2acb3988a5e6 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 5 Dec 2023 17:59:57 -0800 Subject: [PATCH 126/460] (fix) proxy: make yaml load print_verbose --- litellm/proxy/proxy_server.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 80f19986b..a90530068 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -431,7 +431,7 @@ def load_router_config(router: Optional[litellm.Router], config_file_path: str): for model in printed_yaml["model_list"]: model["litellm_params"].pop("api_key", None) - print(f"Loaded config YAML (api_key and environment_variables are not shown):\n{json.dumps(printed_yaml, indent=2)}") + print_verbose(f"Loaded config YAML (api_key and environment_variables are not shown):\n{json.dumps(printed_yaml, indent=2)}") ## ENVIRONMENT VARIABLES environment_variables = config.get('environment_variables', None) From 39bb972168fb62436593c8ffa2537d368c112808 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 5 Dec 2023 18:01:58 -0800 Subject: [PATCH 127/460] =?UTF-8?q?bump:=20version=201.10.9=20=E2=86=92=20?= =?UTF-8?q?1.10.10?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index e6a5e9dc2..3acaf6047 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "litellm" -version = "1.10.9" +version = "1.10.10" description = "Library to easily interface with LLM API providers" authors = ["BerriAI"] license = "MIT License" @@ -55,7 +55,7 @@ requires = ["poetry-core", "wheel"] build-backend = "poetry.core.masonry.api" [tool.commitizen] -version = "1.10.9" +version = "1.10.10" version_files = [ "pyproject.toml:^version" ] From 155e99b9a38ad51bbc1c383882e5e80148ff9690 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 5 Dec 2023 18:04:05 -0800 Subject: [PATCH 128/460] (fix) prox cli: remove deprecated param --- litellm/proxy/proxy_cli.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/litellm/proxy/proxy_cli.py b/litellm/proxy/proxy_cli.py index a76a49b2c..6c17af95a 100644 --- a/litellm/proxy/proxy_cli.py +++ b/litellm/proxy/proxy_cli.py @@ -74,7 +74,6 @@ def is_port_in_use(port): @click.option('--drop_params', is_flag=True, help='Drop any unmapped params') @click.option('--add_function_to_prompt', is_flag=True, help='If function passed but unsupported, pass it as prompt') @click.option('--config', '-c', default=None, help='Configure Litellm') -@click.option('--file', '-f', help='Path to config file') @click.option('--max_budget', default=None, type=float, help='Set max budget for API calls - works for hosted models like OpenAI, TogetherAI, Anthropic, etc.`') @click.option('--telemetry', default=True, type=bool, help='Helps us know if people are using this feature. Turn this off by doing `--telemetry False`') @click.option('--logs', flag_value=False, type=int, help='Gets the "n" most recent logs. By default gets most recent log.') @@ -83,7 +82,7 @@ def is_port_in_use(port): @click.option('--test_async', default=False, is_flag=True, help='Calls async endpoints /queue/requests and /queue/response') @click.option('--num_requests', default=10, type=int, help='Number of requests to hit async endpoint with') @click.option('--local', is_flag=True, default=False, help='for local debugging') -def run_server(host, port, api_base, api_version, model, alias, add_key, headers, save, debug, temperature, max_tokens, request_timeout, drop_params, add_function_to_prompt, config, file, max_budget, telemetry, logs, test, local, num_workers, test_async, num_requests, use_queue, health): +def run_server(host, port, api_base, api_version, model, alias, add_key, headers, save, debug, temperature, max_tokens, request_timeout, drop_params, add_function_to_prompt, config, max_budget, telemetry, logs, test, local, num_workers, test_async, num_requests, use_queue, health): global feature_telemetry args = locals() if local: From 56acded998279b7dfe5e4130fd65315ff18c8873 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 5 Dec 2023 18:07:27 -0800 Subject: [PATCH 129/460] (router) better debugging using config.yaml --- litellm/router.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/litellm/router.py b/litellm/router.py index 941ad1318..9d6ab5a10 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -889,7 +889,7 @@ class Router: if "azure" in model_name: if api_base is None: raise ValueError("api_base is required for Azure OpenAI. Set it on your config") - self.print_verbose(f"Initializing Azure OpenAI Client for {model_name}, {str(api_base)}, {api_key}") + self.print_verbose(f"Initializing Azure OpenAI Client for {model_name}, Api Base: {str(api_base)}, Api Key:{api_key}") if api_version is None: api_version = "2023-07-01-preview" if "gateway.ai.cloudflare.com" in api_base: @@ -960,7 +960,7 @@ class Router: ) else: - self.print_verbose(f"Initializing OpenAI Client for {model_name}, {str(api_base)}, {api_key}") + self.print_verbose(f"Initializing OpenAI Client for {model_name}, Api Base:{str(api_base)}, Api Key:{api_key}") model["async_client"] = openai.AsyncOpenAI( api_key=api_key, base_url=api_base, From 27d7d7ba9cea2c4e95e56646b41ca45be0ed18b6 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 5 Dec 2023 18:11:29 -0800 Subject: [PATCH 130/460] (feat) proxy cli, better description of config yaml param --- litellm/proxy/proxy_cli.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/proxy/proxy_cli.py b/litellm/proxy/proxy_cli.py index 6c17af95a..7dca11dd4 100644 --- a/litellm/proxy/proxy_cli.py +++ b/litellm/proxy/proxy_cli.py @@ -73,7 +73,7 @@ def is_port_in_use(port): @click.option('--request_timeout', default=600, type=int, help='Set timeout in seconds for completion calls') @click.option('--drop_params', is_flag=True, help='Drop any unmapped params') @click.option('--add_function_to_prompt', is_flag=True, help='If function passed but unsupported, pass it as prompt') -@click.option('--config', '-c', default=None, help='Configure Litellm') +@click.option('--config', '-c', default=None, help='Path to the proxy configuration file (e.g. config.yaml). Usage `litellm --config config.yaml`') @click.option('--max_budget', default=None, type=float, help='Set max budget for API calls - works for hosted models like OpenAI, TogetherAI, Anthropic, etc.`') @click.option('--telemetry', default=True, type=bool, help='Helps us know if people are using this feature. Turn this off by doing `--telemetry False`') @click.option('--logs', flag_value=False, type=int, help='Gets the "n" most recent logs. By default gets most recent log.') From 48aa00d6c0cb241819793bacff68d88a3441685a Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 5 Dec 2023 18:14:01 -0800 Subject: [PATCH 131/460] (fix) proxy - clean up print statement --- litellm/proxy/proxy_server.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index a90530068..af9e1cb4d 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -728,9 +728,9 @@ async def startup_event(): global prisma_client, master_key import json worker_config = json.loads(os.getenv("WORKER_CONFIG")) - print(f"worker_config: {worker_config}") + print_verbose(f"worker_config: {worker_config}") initialize(**worker_config) - print(f"prisma client - {prisma_client}") + print_verbose(f"prisma client - {prisma_client}") if prisma_client: await prisma_client.connect() From 642c62f7b71977f8c27368ccba78f42bee129556 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 5 Dec 2023 18:19:15 -0800 Subject: [PATCH 132/460] (fix) proxy: better debugging when -debug is on --- litellm/proxy/proxy_server.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index af9e1cb4d..6ee98a31e 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -427,9 +427,6 @@ def load_router_config(router: Optional[litellm.Router], config_file_path: str): ## PRINT YAML FOR CONFIRMING IT WORKS printed_yaml = copy.deepcopy(config) printed_yaml.pop("environment_variables", None) - if "model_list" in printed_yaml: - for model in printed_yaml["model_list"]: - model["litellm_params"].pop("api_key", None) print_verbose(f"Loaded config YAML (api_key and environment_variables are not shown):\n{json.dumps(printed_yaml, indent=2)}") From 0bf3de0a01f0dde5ce68a751796557c5fadfe32b Mon Sep 17 00:00:00 2001 From: Ayush Somani <25874080+geekyayush@users.noreply.github.com> Date: Wed, 6 Dec 2023 10:37:45 +0530 Subject: [PATCH 133/460] (docs) update docker compose docs --- docker-compose.yml => docker-compose.example.yml | 2 +- docs/my-website/docs/proxy/quick_start.md | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) rename docker-compose.yml => docker-compose.example.yml (90%) diff --git a/docker-compose.yml b/docker-compose.example.yml similarity index 90% rename from docker-compose.yml rename to docker-compose.example.yml index 35e283966..6fdaf1506 100644 --- a/docker-compose.yml +++ b/docker-compose.example.yml @@ -1,7 +1,7 @@ version: "3.9" services: litellm: - image: ghcr.io/berriai/litellm:main-v1.10.3 + image: ghcr.io/berriai/litellm:main ports: - "8000:8000" # Map the container port to the host, change the host port if necessary volumes: diff --git a/docs/my-website/docs/proxy/quick_start.md b/docs/my-website/docs/proxy/quick_start.md index ad45afbd7..76a043e33 100644 --- a/docs/my-website/docs/proxy/quick_start.md +++ b/docs/my-website/docs/proxy/quick_start.md @@ -328,14 +328,16 @@ docker run ghcr.io/berriai/litellm:main-v1.10.0 --port 8002 --num_workers 8 **Step 1** -(Recommended) Use the `docker-compose.yml` given in the project root. e.g. https://github.com/BerriAI/litellm/blob/main/docker-compose.yml +- (Recommended) Use the example file `docker-compose.example.yml` given in the project root. e.g. https://github.com/BerriAI/litellm/blob/main/docker-compose.example.yml + +- Rename the file `docker-compose.example.yml` to `docker-compose.yml`. Here's an example `docker-compose.yml` file ```yaml version: "3.9" services: litellm: - image: ghcr.io/berriai/litellm:main-v1.10.3 + image: ghcr.io/berriai/litellm:main ports: - "8000:8000" # Map the container port to the host, change the host port if necessary volumes: From f0df1fade7b1625214e44e437666e543ad7c52a4 Mon Sep 17 00:00:00 2001 From: Ayush Somani <25874080+geekyayush@users.noreply.github.com> Date: Wed, 6 Dec 2023 10:38:52 +0530 Subject: [PATCH 134/460] (docs) update docs --- docs/my-website/docs/proxy/quick_start.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/my-website/docs/proxy/quick_start.md b/docs/my-website/docs/proxy/quick_start.md index 76a043e33..3b5426b4c 100644 --- a/docs/my-website/docs/proxy/quick_start.md +++ b/docs/my-website/docs/proxy/quick_start.md @@ -117,6 +117,7 @@ print(response) + ### Supported LLMs All LiteLLM supported LLMs are supported on the Proxy. Seel all [supported llms](https://docs.litellm.ai/docs/providers) From fc31221b8a5bc5ba4790942d62a511cf32ceb8ac Mon Sep 17 00:00:00 2001 From: Frank Colson Date: Tue, 5 Dec 2023 22:09:01 -0700 Subject: [PATCH 135/460] Speedup health endpoint --- litellm/health_check.py | 115 ++++++++++++++++++++++++++++++++++ litellm/proxy/proxy_server.py | 34 +++------- 2 files changed, 123 insertions(+), 26 deletions(-) create mode 100644 litellm/health_check.py diff --git a/litellm/health_check.py b/litellm/health_check.py new file mode 100644 index 000000000..08cbffed5 --- /dev/null +++ b/litellm/health_check.py @@ -0,0 +1,115 @@ +import asyncio +import random +from typing import Optional + +import litellm +import logging +from concurrent.futures import ThreadPoolExecutor + + +logger = logging.getLogger(__name__) + + +ILLEGAL_DISPLAY_PARAMS = [ + "messages", + "api_key" +] + + +def _get_random_llm_message(): + """ + Get a random message from the LLM. + """ + messages = [ + "Hey how's it going?", + "What's 1 + 1?" + ] + + + return [ + {"role": "user", "content": random.choice(messages)} + ] + + +def _clean_litellm_params(litellm_params: dict): + """ + Clean the litellm params for display to users. + """ + return {k: v for k, v in litellm_params.items() if k not in ILLEGAL_DISPLAY_PARAMS} + + +async def _perform_health_check(model_list: list): + """ + Perform a health check for each model in the list. + """ + + async def _check_model(model_params: dict): + try: + await litellm.acompletion(**model_params) + except Exception as e: + logger.exception("Health check failed for model %s", model_params["model"]) + return False + + return True + + prepped_params = [] + + for model in model_list: + litellm_params = model["litellm_params"] + litellm_params["model"] = litellm.utils.remove_model_id(litellm_params["model"]) + litellm_params["messages"] = _get_random_llm_message() + + prepped_params.append(litellm_params) + + + tasks = [_check_model(x) for x in prepped_params] + + results = await asyncio.gather(*tasks) + + healthy_endpoints = [] + unhealthy_endpoints = [] + + for is_healthy, model in zip(results, model_list): + cleaned_litellm_params = _clean_litellm_params(model["litellm_params"]) + + if is_healthy: + healthy_endpoints.append(cleaned_litellm_params) + else: + unhealthy_endpoints.append(cleaned_litellm_params) + + return healthy_endpoints, unhealthy_endpoints + + + + +async def perform_health_check(model_list: list, model: Optional[str] = None): + """ + Perform a health check on the system. + + Returns: + (bool): True if the health check passes, False otherwise. + """ + if not model_list: + return [], [] + + if model is not None: + model_list = [x for x in model_list if x["litellm_params"]["model"] == model] + + models_to_check = [] + + for model in model_list: + litellm_params = model["litellm_params"] + model_name = litellm.utils.remove_model_id(litellm_params["model"]) + + if model_name in litellm.all_embedding_models: + continue # Skip embedding models + + + models_to_check.append(model) + + + healthy_endpoints, unhealthy_endpoints = await _perform_health_check(model_list) + + return healthy_endpoints, unhealthy_endpoints + + \ No newline at end of file diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 6ee98a31e..09176a35c 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -7,6 +7,8 @@ import secrets, subprocess import hashlib, uuid import warnings import importlib + +from litellm.health_check import perform_health_check messages: list = [] sys.path.insert( 0, os.path.abspath("../..") @@ -1131,34 +1133,14 @@ async def test_endpoint(request: Request): @router.get("/health", description="Check the health of all the endpoints in config.yaml", tags=["health"]) async def health_endpoint(request: Request, model: Optional[str] = fastapi.Query(None, description="Specify the model name (optional)")): global llm_model_list - healthy_endpoints = [] - unhealthy_endpoints = [] - if llm_model_list: - for model_name in llm_model_list: - try: - if model is None or model == model_name["litellm_params"]["model"]: # if model specified, just call that one. - litellm_params = model_name["litellm_params"] - model_name = litellm.utils.remove_model_id(litellm_params["model"]) # removes, ids set by litellm.router - if model_name not in litellm.all_embedding_models: # filter out embedding models - litellm_params["messages"] = [{"role": "user", "content": "Hey, how's it going?"}] - litellm_params["model"] = model_name - litellm.completion(**litellm_params) - cleaned_params = {} - for key in litellm_params: - if key != "api_key" and key != "messages": - cleaned_params[key] = litellm_params[key] - healthy_endpoints.append(cleaned_params) - except Exception as e: - print("Got Exception", e) - cleaned_params = {} - for key in litellm_params: - if key != "api_key" and key != "messages": - cleaned_params[key] = litellm_params[key] - unhealthy_endpoints.append(cleaned_params) - pass + + healthy_endpoints, unhealthy_endpoints = await perform_health_check(llm_model_list, model) + return { "healthy_endpoints": healthy_endpoints, - "unhealthy_endpoints": unhealthy_endpoints + "unhealthy_endpoints": unhealthy_endpoints, + "healthy_count": len(healthy_endpoints), + "unhealthy_count": len(unhealthy_endpoints), } @router.get("/") From 95e5331090d658c9de5be353ba19950d0a16c94f Mon Sep 17 00:00:00 2001 From: Frank Colson Date: Tue, 5 Dec 2023 22:28:23 -0700 Subject: [PATCH 136/460] Use litellm logging convention --- litellm/__init__.py | 2 +- litellm/_logging.py | 5 +++++ litellm/health_check.py | 4 ++-- 3 files changed, 8 insertions(+), 3 deletions(-) create mode 100644 litellm/_logging.py diff --git a/litellm/__init__.py b/litellm/__init__.py index b9cf85a55..837ca2b01 100644 --- a/litellm/__init__.py +++ b/litellm/__init__.py @@ -2,6 +2,7 @@ import threading, requests from typing import Callable, List, Optional, Dict, Union, Any from litellm.caching import Cache +from litellm._logging import set_verbose import httpx input_callback: List[Union[str, Callable]] = [] @@ -11,7 +12,6 @@ callbacks: List[Callable] = [] _async_success_callback: List[Callable] = [] # internal variable - async custom callbacks are routed here. pre_call_rules: List[Callable] = [] post_call_rules: List[Callable] = [] -set_verbose = False email: Optional[ str ] = None # Not used anymore, will be removed in next MAJOR release - https://github.com/BerriAI/litellm/discussions/648 diff --git a/litellm/_logging.py b/litellm/_logging.py new file mode 100644 index 000000000..fd21d22e3 --- /dev/null +++ b/litellm/_logging.py @@ -0,0 +1,5 @@ +set_verbose = False + +def print_verbose(print_statement): + if set_verbose: + print(print_statement) \ No newline at end of file diff --git a/litellm/health_check.py b/litellm/health_check.py index 08cbffed5..308382347 100644 --- a/litellm/health_check.py +++ b/litellm/health_check.py @@ -4,7 +4,7 @@ from typing import Optional import litellm import logging -from concurrent.futures import ThreadPoolExecutor +from litellm._logging import print_verbose logger = logging.getLogger(__name__) @@ -47,7 +47,7 @@ async def _perform_health_check(model_list: list): try: await litellm.acompletion(**model_params) except Exception as e: - logger.exception("Health check failed for model %s", model_params["model"]) + print_verbose(f"Health check failed for model {model_params['model']}. Error: {e}") return False return True From 7b83238cb5e6e1a40c94f8f55a7ea4c6b7fc014e Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 5 Dec 2023 21:29:51 -0800 Subject: [PATCH 137/460] fix(router.py): log when a call is retried or fallback happens --- litellm/router.py | 69 +++++++++++++----- litellm/tests/test_router_fallbacks.py | 96 ++++++++++++++++++++------ 2 files changed, 126 insertions(+), 39 deletions(-) diff --git a/litellm/router.py b/litellm/router.py index 9d6ab5a10..38846f078 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -97,7 +97,7 @@ class Router: self.total_calls: defaultdict = defaultdict(int) # dict to store total calls made to each model self.fail_calls: defaultdict = defaultdict(int) # dict to store fail_calls made to each model self.success_calls: defaultdict = defaultdict(int) # dict to store success_calls made to each model - + self.previous_models: List = [] # list to store failed calls (passed in as metadata to next call) # make Router.chat.completions.create compatible for openai.chat.completions.create self.chat = litellm.Chat(params=default_litellm_params) @@ -393,6 +393,8 @@ class Router: Iterate through the model groups and try calling that deployment """ try: + ## LOGGING + kwargs = self.log_retry(kwargs=kwargs, e=original_exception) kwargs["model"] = mg kwargs["metadata"]["model_group"] = mg response = await self.async_function_with_retries(*args, **kwargs) @@ -436,6 +438,10 @@ class Router: else: raise original_exception + ## LOGGING + if len(num_retries) > 0: + kwargs = self.log_retry(kwargs=kwargs, e=original_exception) + for current_attempt in range(num_retries): self.print_verbose(f"retrying request. Current attempt - {current_attempt}; num retries: {num_retries}") try: @@ -446,6 +452,8 @@ class Router: return response except Exception as e: + ## LOGGING + kwargs = self.log_retry(kwargs=kwargs, e=e) remaining_retries = num_retries - current_attempt if "No models available" in str(e): timeout = litellm._calculate_retry_after(remaining_retries=remaining_retries, max_retries=num_retries, min_timeout=1) @@ -471,13 +479,12 @@ class Router: try: response = self.function_with_retries(*args, **kwargs) return response - except Exception as e: + except Exception as e: original_exception = e self.print_verbose(f"An exception occurs {original_exception}") try: self.print_verbose(f"Trying to fallback b/w models. Initial model group: {model_group}") if isinstance(e, litellm.ContextWindowExceededError) and context_window_fallbacks is not None: - self.print_verbose(f"inside context window fallbacks: {context_window_fallbacks}") fallback_model_group = None for item in context_window_fallbacks: # [{"gpt-3.5-turbo": ["gpt-4"]}] @@ -493,6 +500,8 @@ class Router: Iterate through the model groups and try calling that deployment """ try: + ## LOGGING + kwargs = self.log_retry(kwargs=kwargs, e=original_exception) kwargs["model"] = mg response = self.function_with_fallbacks(*args, **kwargs) return response @@ -514,11 +523,13 @@ class Router: Iterate through the model groups and try calling that deployment """ try: + ## LOGGING + kwargs = self.log_retry(kwargs=kwargs, e=original_exception) kwargs["model"] = mg response = self.function_with_fallbacks(*args, **kwargs) return response except Exception as e: - pass + raise e except Exception as e: raise e raise original_exception @@ -528,7 +539,6 @@ class Router: Try calling the model 3 times. Shuffle between available deployments. """ self.print_verbose(f"Inside function with retries: args - {args}; kwargs - {kwargs}") - backoff_factor = 1 original_function = kwargs.pop("original_function") num_retries = kwargs.pop("num_retries") fallbacks = kwargs.pop("fallbacks", self.fallbacks) @@ -544,6 +554,9 @@ class Router: if ((isinstance(original_exception, litellm.ContextWindowExceededError) and context_window_fallbacks is None) or (isinstance(original_exception, openai.RateLimitError) and fallbacks is not None)): raise original_exception + ## LOGGING + if len(num_retries) > 0: + kwargs = self.log_retry(kwargs=kwargs, e=original_exception) ### RETRY for current_attempt in range(num_retries): self.print_verbose(f"retrying request. Current attempt - {current_attempt}; retries left: {num_retries}") @@ -552,19 +565,19 @@ class Router: response = original_function(*args, **kwargs) return response - except openai.RateLimitError as e: - if num_retries > 0: - remaining_retries = num_retries - current_attempt - timeout = litellm._calculate_retry_after(remaining_retries=remaining_retries, max_retries=num_retries) - # on RateLimitError we'll wait for an exponential time before trying again + except Exception as e: + ## LOGGING + kwargs = self.log_retry(kwargs=kwargs, e=e) + remaining_retries = num_retries - current_attempt + if "No models available" in str(e): + timeout = litellm._calculate_retry_after(remaining_retries=remaining_retries, max_retries=num_retries, min_timeout=1) + time.sleep(timeout) + elif hasattr(e, "status_code") and hasattr(e, "response") and litellm._should_retry(status_code=e.status_code): + if hasattr(e.response, "headers"): + timeout = litellm._calculate_retry_after(remaining_retries=remaining_retries, max_retries=num_retries, response_headers=e.response.headers) + else: + timeout = litellm._calculate_retry_after(remaining_retries=remaining_retries, max_retries=num_retries) time.sleep(timeout) - else: - raise e - - except Exception as e: - # for any other exception types, immediately retry - if num_retries > 0: - pass else: raise e raise original_exception @@ -627,6 +640,26 @@ class Router: except Exception as e: raise e + def log_retry(self, kwargs: dict, e: Exception) -> dict: + """ + When a retry or fallback happens, log the details of the just failed model call - similar to Sentry breadcrumbing + """ + try: + # Log failed model as the previous model + previous_model = {"exception_type": type(e).__name__, "exception_string": str(e)} + for k, v in kwargs.items(): # log everything in kwargs except the old previous_models value - prevent nesting + if k != "metadata": + previous_model[k] = v + elif k == "metadata" and isinstance(v, dict): + previous_model[k] = {} + for metadata_k, metadata_v in kwargs['metadata'].items(): + if metadata_k != "previous_models": + previous_model[k][metadata_k] = metadata_v + self.previous_models.append(previous_model) + kwargs["metadata"]["previous_models"] = self.previous_models + return kwargs + except Exception as e: + raise e def _set_cooldown_deployments(self, deployment: str): """ @@ -994,7 +1027,7 @@ class Router: self.deployment_names.append(model["litellm_params"]["model"]) model_id = "" for key in model["litellm_params"]: - if key != "api_key": + if key != "api_key" and key != "metadata": model_id+= str(model["litellm_params"][key]) model["litellm_params"]["model"] += "-ModelID-" + model_id diff --git a/litellm/tests/test_router_fallbacks.py b/litellm/tests/test_router_fallbacks.py index 0501ea8a2..3779dc09a 100644 --- a/litellm/tests/test_router_fallbacks.py +++ b/litellm/tests/test_router_fallbacks.py @@ -10,6 +10,30 @@ sys.path.insert( import litellm from litellm import Router +from litellm.integrations.custom_logger import CustomLogger + +class MyCustomHandler(CustomLogger): + success: bool = False + failure: bool = False + previous_models: int = 0 + + def log_pre_api_call(self, model, messages, kwargs): + print(f"Pre-API Call") + + def log_post_api_call(self, kwargs, response_obj, start_time, end_time): + print(f"Post-API Call") + + def log_stream_event(self, kwargs, response_obj, start_time, end_time): + print(f"On Stream") + + def log_success_event(self, kwargs, response_obj, start_time, end_time): + print(f"previous_models: {kwargs['litellm_params']['metadata']['previous_models']}") + self.previous_models += len(kwargs["litellm_params"]["metadata"]["previous_models"]) # {"previous_models": [{"model": litellm_model_name, "exception_type": AuthenticationError, "exception_string": }]} + print(f"self.previous_models: {self.previous_models}") + print(f"On Success") + + def log_failure_event(self, kwargs, response_obj, start_time, end_time): + print(f"On Failure") model_list = [ { # list of model deployments @@ -27,7 +51,7 @@ model_list = [ "model_name": "azure/gpt-3.5-turbo-context-fallback", # openai model name "litellm_params": { # params for litellm completion/embedding call "model": "azure/chatgpt-v-2", - "api_key": "bad-key", + "api_key": os.getenv("AZURE_API_KEY"), "api_version": os.getenv("AZURE_API_VERSION"), "api_base": os.getenv("AZURE_API_BASE") }, @@ -67,52 +91,74 @@ model_list = [ -router = Router(model_list=model_list, - fallbacks=[{"azure/gpt-3.5-turbo": ["gpt-3.5-turbo"]}], - context_window_fallbacks=[{"azure/gpt-3.5-turbo-context-fallback": ["gpt-3.5-turbo-16k"]}, {"gpt-3.5-turbo": ["gpt-3.5-turbo-16k"]}], - set_verbose=True) - kwargs = {"model": "azure/gpt-3.5-turbo", "messages": [{"role": "user", "content":"Hey, how's it going?"}]} def test_sync_fallbacks(): try: litellm.set_verbose = True + customHandler = MyCustomHandler() + litellm.callbacks = [customHandler] + router = Router(model_list=model_list, + fallbacks=[{"azure/gpt-3.5-turbo": ["gpt-3.5-turbo"]}], + context_window_fallbacks=[{"azure/gpt-3.5-turbo-context-fallback": ["gpt-3.5-turbo-16k"]}, {"gpt-3.5-turbo": ["gpt-3.5-turbo-16k"]}], + set_verbose=False) response = router.completion(**kwargs) print(f"response: {response}") - router.flush_cache() + time.sleep(0.05) # allow a delay as success_callbacks are on a separate thread + assert customHandler.previous_models == 1 # 0 retries, 1 fallback + router.reset() except Exception as e: print(e) # test_sync_fallbacks() def test_async_fallbacks(): litellm.set_verbose = False + router = Router(model_list=model_list, + fallbacks=[{"azure/gpt-3.5-turbo": ["gpt-3.5-turbo"]}], + context_window_fallbacks=[{"azure/gpt-3.5-turbo-context-fallback": ["gpt-3.5-turbo-16k"]}, {"gpt-3.5-turbo": ["gpt-3.5-turbo-16k"]}], + set_verbose=False) async def test_get_response(): + customHandler = MyCustomHandler() + litellm.callbacks = [customHandler] user_message = "Hello, how are you?" messages = [{"content": user_message, "role": "user"}] try: response = await router.acompletion(**kwargs) - # response = await response - print(f"response: {response}") - router.flush_cache() + print(f"customHandler.previous_models: {customHandler.previous_models}") + time.sleep(0.05) # allow a delay as success_callbacks are on a separate thread + assert customHandler.previous_models == 1 # 0 retries, 1 fallback + router.reset() except litellm.Timeout as e: pass except Exception as e: pytest.fail(f"An exception occurred: {e}") - + finally: + router.reset() asyncio.run(test_get_response()) # test_async_fallbacks() -def test_sync_context_window_fallbacks(): - try: - sample_text = "Say error 50 times" * 10000 - kwargs["model"] = "azure/gpt-3.5-turbo-context-fallback" - kwargs["messages"] = [{"role": "user", "content": sample_text}] - response = router.completion(**kwargs) - print(f"response: {response}") - router.reset() - except Exception as e: - print(e) +## COMMENTING OUT as the context size exceeds both gpt-3.5-turbo and gpt-3.5-turbo-16k, need a better message here +# def test_sync_context_window_fallbacks(): +# try: +# customHandler = MyCustomHandler() +# litellm.callbacks = [customHandler] +# sample_text = "Say error 50 times" * 10000 +# kwargs["model"] = "azure/gpt-3.5-turbo-context-fallback" +# kwargs["messages"] = [{"role": "user", "content": sample_text}] +# router = Router(model_list=model_list, +# fallbacks=[{"azure/gpt-3.5-turbo": ["gpt-3.5-turbo"]}], +# context_window_fallbacks=[{"azure/gpt-3.5-turbo-context-fallback": ["gpt-3.5-turbo-16k"]}, {"gpt-3.5-turbo": ["gpt-3.5-turbo-16k"]}], +# set_verbose=False) +# response = router.completion(**kwargs) +# print(f"response: {response}") +# time.sleep(0.05) # allow a delay as success_callbacks are on a separate thread +# assert customHandler.previous_models == 1 # 0 retries, 1 fallback +# router.reset() +# except Exception as e: +# print(f"An exception occurred - {e}") +# finally: +# router.reset() # test_sync_context_window_fallbacks() @@ -121,6 +167,8 @@ def test_dynamic_fallbacks_sync(): Allow setting the fallback in the router.completion() call. """ try: + customHandler = MyCustomHandler() + litellm.callbacks = [customHandler] router = Router(model_list=model_list, set_verbose=True) kwargs = {} kwargs["model"] = "azure/gpt-3.5-turbo" @@ -128,6 +176,8 @@ def test_dynamic_fallbacks_sync(): kwargs["fallbacks"] = [{"azure/gpt-3.5-turbo": ["gpt-3.5-turbo"]}] response = router.completion(**kwargs) print(f"response: {response}") + time.sleep(0.05) # allow a delay as success_callbacks are on a separate thread + assert customHandler.previous_models == 1 # 0 retries, 1 fallback router.reset() except Exception as e: pytest.fail(f"An exception occurred - {e}") @@ -140,6 +190,8 @@ def test_dynamic_fallbacks_async(): """ async def test_get_response(): try: + customHandler = MyCustomHandler() + litellm.callbacks = [customHandler] router = Router(model_list=model_list, set_verbose=True) kwargs = {} kwargs["model"] = "azure/gpt-3.5-turbo" @@ -147,6 +199,8 @@ def test_dynamic_fallbacks_async(): kwargs["fallbacks"] = [{"azure/gpt-3.5-turbo": ["gpt-3.5-turbo"]}] response = await router.acompletion(**kwargs) print(f"response: {response}") + time.sleep(0.05) # allow a delay as success_callbacks are on a separate thread + assert customHandler.previous_models == 1 # 0 retries, 1 fallback router.reset() except Exception as e: pytest.fail(f"An exception occurred - {e}") From acef6bd58da3d3457a66589ca5ca05b278adf120 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 5 Dec 2023 21:43:02 -0800 Subject: [PATCH 138/460] refactor: linting fixes --- litellm/router.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/litellm/router.py b/litellm/router.py index 38846f078..45c1a94a1 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -8,7 +8,7 @@ # Thank you ! We ❤️ you! - Krrish & Ishaan from datetime import datetime -from typing import Dict, List, Optional, Union, Literal +from typing import Dict, List, Optional, Union, Literal, Any import random, threading, time, traceback import litellm, openai from litellm.caching import RedisCache, InMemoryCache, DualCache @@ -651,10 +651,10 @@ class Router: if k != "metadata": previous_model[k] = v elif k == "metadata" and isinstance(v, dict): - previous_model[k] = {} + previous_model["metadata"] = {} # type: ignore for metadata_k, metadata_v in kwargs['metadata'].items(): if metadata_k != "previous_models": - previous_model[k][metadata_k] = metadata_v + previous_model[k][metadata_k] = metadata_v # type: ignore self.previous_models.append(previous_model) kwargs["metadata"]["previous_models"] = self.previous_models return kwargs From 8e6c4c5310c2ecf1f4f615faba1f501946f72916 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 5 Dec 2023 21:55:07 -0800 Subject: [PATCH 139/460] (fix) router - allow users to call a specific_model explicit --- litellm/proxy/proxy_server.py | 4 ++-- litellm/router.py | 39 ++++++++++++++++++++++------------- 2 files changed, 27 insertions(+), 16 deletions(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 6ee98a31e..b9c3998e1 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -861,7 +861,7 @@ async def chat_completion(request: Request, model: Optional[str] = None, user_ap if llm_router is not None and data["model"] in router_model_names: # model in router model list response = await llm_router.acompletion(**data) elif llm_router is not None and data["model"] in llm_router.deployment_names: # model in router deployments, calling a specific deployment on the router - response = await llm_router.acompletion(**data) + response = await llm_router.acompletion(**data, specific_deployment = True) else: # router is not set response = await litellm.acompletion(**data) if 'stream' in data and data['stream'] == True: # use generate_responses to stream responses @@ -923,7 +923,7 @@ async def embeddings(request: Request, user_api_key_dict: UserAPIKeyAuth = Depen if llm_router is not None and data["model"] in router_model_names: # model in router model list response = await llm_router.aembedding(**data) elif llm_router is not None and data["model"] in llm_router.deployment_names: # model in router deployments, calling a specific deployment on the router - response = await llm_router.aembedding(**data) + response = await llm_router.aembedding(**data, specific_deployment = True) else: response = await litellm.aembedding(**data) background_tasks.add_task(log_input_output, request, response) # background task for logging to OTEL diff --git a/litellm/router.py b/litellm/router.py index 45c1a94a1..c8add124d 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -184,7 +184,7 @@ class Router: try: # pick the one that is available (lowest TPM/RPM) - deployment = self.get_available_deployment(model=model, messages=messages) + deployment = self.get_available_deployment(model=model, messages=messages, specific_deployment=kwargs.pop("specific_deployment", None)) kwargs.setdefault("metadata", {}).update({"deployment": deployment["litellm_params"]["model"]}) data = deployment["litellm_params"].copy() for k, v in self.default_litellm_params.items(): @@ -232,7 +232,7 @@ class Router: try: self.print_verbose(f"Inside _acompletion()- model: {model}; kwargs: {kwargs}") original_model_string = None # set a default for this variable - deployment = self.get_available_deployment(model=model, messages=messages) + deployment = self.get_available_deployment(model=model, messages=messages, specific_deployment=kwargs.pop("specific_deployment", None)) kwargs.setdefault("metadata", {}).update({"deployment": deployment["litellm_params"]["model"]}) data = deployment["litellm_params"].copy() for k, v in self.default_litellm_params.items(): @@ -268,7 +268,7 @@ class Router: kwargs.setdefault("metadata", {}).update({"model_group": model}) messages=[{"role": "user", "content": prompt}] # pick the one that is available (lowest TPM/RPM) - deployment = self.get_available_deployment(model=model, messages=messages) + deployment = self.get_available_deployment(model=model, messages=messages, specific_deployment=kwargs.pop("specific_deployment", None)) data = deployment["litellm_params"].copy() for k, v in self.default_litellm_params.items(): @@ -301,7 +301,7 @@ class Router: is_async: Optional[bool] = False, **kwargs) -> Union[List[float], None]: # pick the one that is available (lowest TPM/RPM) - deployment = self.get_available_deployment(model=model, input=input) + deployment = self.get_available_deployment(model=model, input=input, specific_deployment=kwargs.pop("specific_deployment", None)) kwargs.setdefault("metadata", {}).update({"deployment": deployment["litellm_params"]["model"]}) data = deployment["litellm_params"].copy() for k, v in self.default_litellm_params.items(): @@ -326,7 +326,7 @@ class Router: is_async: Optional[bool] = True, **kwargs) -> Union[List[float], None]: # pick the one that is available (lowest TPM/RPM) - deployment = self.get_available_deployment(model=model, input=input) + deployment = self.get_available_deployment(model=model, input=input, specific_deployment=kwargs.pop("specific_deployment", None)) kwargs.setdefault("metadata", {}).update({"deployment": deployment["litellm_params"]["model"]}) data = deployment["litellm_params"].copy() for k, v in self.default_litellm_params.items(): @@ -358,7 +358,7 @@ class Router: self.print_verbose(f'Async Response: {response}') return response except Exception as e: - self.print_verbose(f"An exception occurs") + self.print_verbose(f"An exception occurs: {e}") original_exception = e try: self.print_verbose(f"Trying to fallback b/w models") @@ -1031,6 +1031,8 @@ class Router: model_id+= str(model["litellm_params"][key]) model["litellm_params"]["model"] += "-ModelID-" + model_id + self.print_verbose(f"\n Initialized Model List {self.model_list}") + ############ Users can either pass tpm/rpm as a litellm_param or a router param ########### # for get_available_deployment, we use the litellm_param["rpm"] # in this snippet we also set rpm to be a litellm_param @@ -1074,16 +1076,32 @@ class Router: def get_available_deployment(self, model: str, messages: Optional[List[Dict[str, str]]] = None, - input: Optional[Union[str, List]] = None): + input: Optional[Union[str, List]] = None, + specific_deployment: Optional[bool] = False + ): """ Returns the deployment based on routing strategy """ + + # users need to explicitly call a specific deployment, by setting `specific_deployment = True` as completion()/embedding() kwarg + # When this was no explicit we had several issues with fallbacks timing out + if specific_deployment == True: + # users can also specify a specific deployment name. At this point we should check if they are just trying to call a specific deployment + for deployment in self.model_list: + cleaned_model = litellm.utils.remove_model_id(deployment.get("litellm_params").get("model")) + if cleaned_model == model: + # User Passed a specific deployment name on their config.yaml, example azure/chat-gpt-v-2 + # return the first deployment where the `model` matches the specificed deployment name + return deployment + raise ValueError(f"LiteLLM Router: Trying to call specific deployment, but Model:{model} does not exist in Model List: {self.model_list}") + ## get healthy deployments ### get all deployments ### filter out the deployments currently cooling down healthy_deployments = [m for m in self.model_list if m["model_name"] == model] if len(healthy_deployments) == 0: # check if the user sent in a deployment name instead + healthy_deployments = [m for m in self.model_list if m["litellm_params"]["model"] == model] self.print_verbose(f"initial list of deployments: {healthy_deployments}") deployments_to_remove = [] @@ -1099,13 +1117,6 @@ class Router: healthy_deployments.remove(deployment) self.print_verbose(f"healthy deployments: length {len(healthy_deployments)} {healthy_deployments}") if len(healthy_deployments) == 0: - # users can also specify a specific deployment name. At this point we should check if they are just trying to call a specific deployment - for deployment in self.model_list: - cleaned_model = litellm.utils.remove_model_id(deployment.get("litellm_params").get("model")) - if cleaned_model == model: - # User Passed a specific deployment name on their config.yaml, example azure/chat-gpt-v-2 - # return the first deployment where the `model` matches the specificed deployment name - return deployment raise ValueError("No models available") if litellm.model_alias_map and model in litellm.model_alias_map: model = litellm.model_alias_map[ From 5e065ebb8f9993aee934719665ae360534b52c8b Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 5 Dec 2023 21:56:56 -0800 Subject: [PATCH 140/460] (test) router - explcitly call one deployment --- litellm/tests/test_router.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/litellm/tests/test_router.py b/litellm/tests/test_router.py index ca84f144c..47b4881b1 100644 --- a/litellm/tests/test_router.py +++ b/litellm/tests/test_router.py @@ -184,7 +184,7 @@ def test_call_one_endpoint(): "rpm": 10000, }, ] - + litellm.set_verbose=True router = Router(model_list=model_list, routing_strategy="simple-shuffle", set_verbose=True, @@ -200,6 +200,7 @@ def test_call_one_endpoint(): "content": "hello this request will pass" } ], + specific_deployment=True ) print("\n response", response) @@ -212,6 +213,7 @@ def test_call_one_endpoint(): "content": "hello this request will pass" } ], + specific_deployment=True ) print("\n response", response) @@ -219,7 +221,8 @@ def test_call_one_endpoint(): async def call_azure_embedding(): response = await router.aembedding( model="azure/azure-embedding-model", - input = ["good morning from litellm"] + input = ["good morning from litellm"], + specific_deployment=True ) print("\n response", response) From ba99561d08892f4fffef3db48ae8edbec1ce8e28 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 5 Dec 2023 21:57:12 -0800 Subject: [PATCH 141/460] =?UTF-8?q?bump:=20version=201.10.10=20=E2=86=92?= =?UTF-8?q?=201.10.11?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 3acaf6047..8fcfe6f13 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "litellm" -version = "1.10.10" +version = "1.10.11" description = "Library to easily interface with LLM API providers" authors = ["BerriAI"] license = "MIT License" @@ -55,7 +55,7 @@ requires = ["poetry-core", "wheel"] build-backend = "poetry.core.masonry.api" [tool.commitizen] -version = "1.10.10" +version = "1.10.11" version_files = [ "pyproject.toml:^version" ] From ff028111cf41e2e3e46f1c14b4d0604cc9b7eb63 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 5 Dec 2023 22:05:47 -0800 Subject: [PATCH 142/460] (fix) router len(num_retries) --- litellm/router.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/litellm/router.py b/litellm/router.py index c8add124d..335a8a264 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -439,7 +439,7 @@ class Router: raise original_exception ## LOGGING - if len(num_retries) > 0: + if num_retries > 0: kwargs = self.log_retry(kwargs=kwargs, e=original_exception) for current_attempt in range(num_retries): @@ -555,7 +555,7 @@ class Router: or (isinstance(original_exception, openai.RateLimitError) and fallbacks is not None)): raise original_exception ## LOGGING - if len(num_retries) > 0: + if num_retries > 0: kwargs = self.log_retry(kwargs=kwargs, e=original_exception) ### RETRY for current_attempt in range(num_retries): From 92b2cbcdc593de1dccc1dd947852460e678b7024 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 5 Dec 2023 22:38:31 -0800 Subject: [PATCH 143/460] feat(proxy_server.py): adding `/model/delete` endpoint --- litellm/proxy/proxy_server.py | 44 ++++++++++++++++++++++++++++++++++- litellm/proxy/types.py | 17 +++++++++++--- 2 files changed, 57 insertions(+), 4 deletions(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index b9c3998e1..6c41c3144 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -999,7 +999,7 @@ async def info_key_fn(key: str = fastapi.Query(..., description="Key in the requ ) #### MODEL MANAGEMENT #### - + #### [BETA] - This is a beta endpoint, format might change based on user feedback. - https://github.com/BerriAI/litellm/issues/964 @router.post("/model/new", description="Allows adding new models to the model list in the config.yaml", tags=["model management"], dependencies=[Depends(user_api_key_auth)]) async def add_new_model(model_params: ModelParams): @@ -1074,6 +1074,48 @@ async def model_info(request: Request): object="list", ) +#### [BETA] - This is a beta endpoint, format might change based on user feedback. - https://github.com/BerriAI/litellm/issues/964 +@router.post("/model/delete", description="Allows deleting models in the model list in the config.yaml", tags=["model management"], dependencies=[Depends(user_api_key_auth)]) +async def delete_model(model_info: ModelInfoDelete): + global llm_router, llm_model_list, general_settings, user_config_file_path + try: + if not os.path.exists(user_config_file_path): + raise HTTPException(status_code=404, detail="Config file does not exist.") + + with open(user_config_file_path, "r") as config_file: + config = yaml.safe_load(config_file) + + # If model_list is not in the config, nothing can be deleted + if 'model_list' not in config: + raise HTTPException(status_code=404, detail="No model list available in the config.") + + # Check if the model with the specified model_id exists + model_to_delete = None + for model in config['model_list']: + if model.get('model_info', {}).get('id', None) == model_info.id: + model_to_delete = model + break + + # If the model was not found, return an error + if model_to_delete is None: + raise HTTPException(status_code=404, detail="Model with given model_id not found.") + + # Remove model from the list and save the updated config + config['model_list'].remove(model_to_delete) + with open(user_config_file_path, "w") as config_file: + yaml.dump(config, config_file, default_flow_style=False) + + # Update Router + llm_router, llm_model_list, general_settings = load_router_config(router=llm_router, config_file_path=user_config_file_path) + + return {"message": "Model deleted successfully"} + + except HTTPException as e: + # Re-raise the HTTP exceptions to be handled by FastAPI + raise + except Exception as e: + raise HTTPException(status_code=500, detail=f"Internal Server Error: {str(e)}") + #### EXPERIMENTAL QUEUING #### @router.post("/queue/request", dependencies=[Depends(user_api_key_auth)]) async def async_queue_request(request: Request): diff --git a/litellm/proxy/types.py b/litellm/proxy/types.py index fbee0732b..3f7ae1db5 100644 --- a/litellm/proxy/types.py +++ b/litellm/proxy/types.py @@ -1,7 +1,7 @@ -from pydantic import BaseModel +from pydantic import BaseModel, Extra from typing import Optional, List, Union, Dict from datetime import datetime - +import uuid ######### Request Class Definition ###### class ProxyChatCompletionRequest(BaseModel): model: str @@ -38,10 +38,21 @@ class ProxyChatCompletionRequest(BaseModel): class Config: extra='allow' # allow params not defined here, these fall in litellm.completion(**kwargs) +class ModelInfo(BaseModel): + id: Optional[str] + + class Config: + extra = Extra.allow # Allow extra fields + protected_namespaces = () + +class ModelInfoDelete(BaseModel): + id: Optional[str] + class ModelParams(BaseModel): model_name: str litellm_params: dict - model_info: Optional[dict] + model_info: Optional[ModelInfo]=None + class Config: protected_namespaces = () From aab6be654e131873696537fcfd0859f4131ae11b Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 08:59:26 -0800 Subject: [PATCH 144/460] (fix) router - set read os.environ/ values --- litellm/router.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/litellm/router.py b/litellm/router.py index 335a8a264..3145f75cb 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -891,6 +891,7 @@ class Router: if api_key and api_key.startswith("os.environ/"): api_key_env_name = api_key.replace("os.environ/", "") api_key = litellm.get_secret(api_key_env_name) + litellm_params["api_key"] = api_key api_base = litellm_params.get("api_base") base_url = litellm_params.get("base_url") @@ -898,31 +899,35 @@ class Router: if api_base and api_base.startswith("os.environ/"): api_base_env_name = api_base.replace("os.environ/", "") api_base = litellm.get_secret(api_base_env_name) + litellm_params["api_base"] = api_base api_version = litellm_params.get("api_version") if api_version and api_version.startswith("os.environ/"): api_version_env_name = api_version.replace("os.environ/", "") api_version = litellm.get_secret(api_version_env_name) + litellm_params["api_version"] = api_version timeout = litellm_params.pop("timeout", None) if isinstance(timeout, str) and timeout.startswith("os.environ/"): timeout_env_name = api_version.replace("os.environ/", "") timeout = litellm.get_secret(timeout_env_name) + litellm_params["timeout"] = timeout stream_timeout = litellm_params.pop("stream_timeout", timeout) # if no stream_timeout is set, default to timeout if isinstance(stream_timeout, str) and stream_timeout.startswith("os.environ/"): stream_timeout_env_name = api_version.replace("os.environ/", "") stream_timeout = litellm.get_secret(stream_timeout_env_name) + litellm_params["stream_timeout"] = stream_timeout max_retries = litellm_params.pop("max_retries", 2) if isinstance(max_retries, str) and max_retries.startswith("os.environ/"): max_retries_env_name = api_version.replace("os.environ/", "") max_retries = litellm.get_secret(max_retries_env_name) + litellm_params["max_retries"] = max_retries if "azure" in model_name: if api_base is None: raise ValueError("api_base is required for Azure OpenAI. Set it on your config") - self.print_verbose(f"Initializing Azure OpenAI Client for {model_name}, Api Base: {str(api_base)}, Api Key:{api_key}") if api_version is None: api_version = "2023-07-01-preview" if "gateway.ai.cloudflare.com" in api_base: @@ -961,6 +966,7 @@ class Router: max_retries=max_retries ) else: + self.print_verbose(f"Initializing Azure OpenAI Client for {model_name}, Api Base: {str(api_base)}, Api Key:{api_key}") model["async_client"] = openai.AsyncAzureOpenAI( api_key=api_key, azure_endpoint=api_base, From 527aadd1ab98d68ea2ba6c489b5e06eb02539c25 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 09:18:12 -0800 Subject: [PATCH 145/460] (test) router - reading os.environ/ variables --- litellm/tests/test_router.py | 42 ++++++++++++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/litellm/tests/test_router.py b/litellm/tests/test_router.py index 47b4881b1..caa05daa0 100644 --- a/litellm/tests/test_router.py +++ b/litellm/tests/test_router.py @@ -326,7 +326,7 @@ def test_router_azure_acompletion(): os.environ["AZURE_API_KEY"] = old_api_key print(f"FAILED TEST") pytest.fail(f"Got unexpected exception on router! - {e}") -test_router_azure_acompletion() +# test_router_azure_acompletion() ### FUNCTION CALLING @@ -511,7 +511,7 @@ def test_aembedding_on_router(): except Exception as e: traceback.print_exc() pytest.fail(f"Error occurred: {e}") -test_aembedding_on_router() +# test_aembedding_on_router() def test_azure_embedding_on_router(): @@ -553,7 +553,7 @@ def test_azure_embedding_on_router(): except Exception as e: traceback.print_exc() pytest.fail(f"Error occurred: {e}") -test_azure_embedding_on_router() +# test_azure_embedding_on_router() def test_bedrock_on_router(): @@ -675,4 +675,38 @@ def test_openai_completion_on_router(): except Exception as e: traceback.print_exc() pytest.fail(f"Error occurred: {e}") -# test_openai_completion_on_router() \ No newline at end of file +# test_openai_completion_on_router() + + +def test_reading_keys_os_environ(): + try: + model_list = [ + { + "model_name": "gpt-3.5-turbo", + "litellm_params": { + "model": "gpt-3.5-turbo", + "api_key": "os.environ/AZURE_API_KEY", + "api_base": "os.environ/AZURE_API_BASE", + "api_version": "os.environ/AZURE_API_VERSION", + "timeout": "os.environ/AZURE_TIMEOUT", + "stream_timeout": "os.environ/AZURE_STREAM_TIMEOUT", + "max_retries": "os.environ/AZURE_MAX_RETRIES", + }, + }, + ] + + router = Router(model_list=model_list) + for model in router.model_list: + assert model["litellm_params"]["api_key"] == os.environ["AZURE_API_KEY"], f"{model['litellm_params']['api_key']} vs {os.environ['AZURE_API_KEY']}" + assert model["litellm_params"]["api_base"] == os.environ["AZURE_API_BASE"], f"{model['litellm_params']['api_base']} vs {os.environ['AZURE_API_BASE']}" + assert model["litellm_params"]["api_version"] == os.environ["AZURE_API_VERSION"], f"{model['litellm_params']['api_version']} vs {os.environ['AZURE_API_VERSION']}" + assert float(model["litellm_params"]["timeout"]) == float(os.environ["AZURE_TIMEOUT"]), f"{model['litellm_params']['timeout']} vs {os.environ['AZURE_TIMEOUT']}" + assert float(model["litellm_params"]["stream_timeout"]) == float(os.environ["AZURE_STREAM_TIMEOUT"]), f"{model['litellm_params']['stream_timeout']} vs {os.environ['AZURE_STREAM_TIMEOUT']}" + assert int(model["litellm_params"]["max_retries"]) == int(os.environ["AZURE_MAX_RETRIES"]), f"{model['litellm_params']['max_retries']} vs {os.environ['AZURE_MAX_RETRIES']}" + + router.reset() + except Exception as e: + traceback.print_exc() + pytest.fail(f"Error occurred: {e}") + +# test_reading_keys_os_environ() \ No newline at end of file From 13f9e787994bec64c7101156c6cf96e76177c9d5 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 09:19:38 -0800 Subject: [PATCH 146/460] (fix) router - errors with reading timeout, stream timeout, max retries --- litellm/router.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/litellm/router.py b/litellm/router.py index 3145f75cb..fcdb203cf 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -909,19 +909,19 @@ class Router: timeout = litellm_params.pop("timeout", None) if isinstance(timeout, str) and timeout.startswith("os.environ/"): - timeout_env_name = api_version.replace("os.environ/", "") + timeout_env_name = timeout.replace("os.environ/", "") timeout = litellm.get_secret(timeout_env_name) litellm_params["timeout"] = timeout stream_timeout = litellm_params.pop("stream_timeout", timeout) # if no stream_timeout is set, default to timeout if isinstance(stream_timeout, str) and stream_timeout.startswith("os.environ/"): - stream_timeout_env_name = api_version.replace("os.environ/", "") + stream_timeout_env_name = stream_timeout.replace("os.environ/", "") stream_timeout = litellm.get_secret(stream_timeout_env_name) litellm_params["stream_timeout"] = stream_timeout max_retries = litellm_params.pop("max_retries", 2) if isinstance(max_retries, str) and max_retries.startswith("os.environ/"): - max_retries_env_name = api_version.replace("os.environ/", "") + max_retries_env_name = max_retries.replace("os.environ/", "") max_retries = litellm.get_secret(max_retries_env_name) litellm_params["max_retries"] = max_retries @@ -1107,7 +1107,7 @@ class Router: healthy_deployments = [m for m in self.model_list if m["model_name"] == model] if len(healthy_deployments) == 0: # check if the user sent in a deployment name instead - + healthy_deployments = [m for m in self.model_list if m["litellm_params"]["model"] == model] self.print_verbose(f"initial list of deployments: {healthy_deployments}") deployments_to_remove = [] From bd0579703c167e250260b008c0a6d7166fef6626 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 09:26:21 -0800 Subject: [PATCH 147/460] (test) router - reading os.environ/ with client --- litellm/tests/test_router.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/litellm/tests/test_router.py b/litellm/tests/test_router.py index caa05daa0..17c582d53 100644 --- a/litellm/tests/test_router.py +++ b/litellm/tests/test_router.py @@ -679,6 +679,7 @@ def test_openai_completion_on_router(): def test_reading_keys_os_environ(): + import openai try: model_list = [ { @@ -703,10 +704,13 @@ def test_reading_keys_os_environ(): assert float(model["litellm_params"]["timeout"]) == float(os.environ["AZURE_TIMEOUT"]), f"{model['litellm_params']['timeout']} vs {os.environ['AZURE_TIMEOUT']}" assert float(model["litellm_params"]["stream_timeout"]) == float(os.environ["AZURE_STREAM_TIMEOUT"]), f"{model['litellm_params']['stream_timeout']} vs {os.environ['AZURE_STREAM_TIMEOUT']}" assert int(model["litellm_params"]["max_retries"]) == int(os.environ["AZURE_MAX_RETRIES"]), f"{model['litellm_params']['max_retries']} vs {os.environ['AZURE_MAX_RETRIES']}" - + print("passed testing of reading keys from os.environ") + async_client: openai.AsyncAzureOpenAI = model["async_client"] + assert async_client.api_key == os.environ["AZURE_API_KEY"] + assert async_client.base_url == os.environ["AZURE_API_BASE"] router.reset() except Exception as e: traceback.print_exc() pytest.fail(f"Error occurred: {e}") -# test_reading_keys_os_environ() \ No newline at end of file +test_reading_keys_os_environ() \ No newline at end of file From 11a8713a50869c5b07dff8f94ef288435ab97358 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 10:08:20 -0800 Subject: [PATCH 148/460] (test) router - set sync stream client --- litellm/tests/test_router.py | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/litellm/tests/test_router.py b/litellm/tests/test_router.py index 17c582d53..5cfe42457 100644 --- a/litellm/tests/test_router.py +++ b/litellm/tests/test_router.py @@ -707,7 +707,36 @@ def test_reading_keys_os_environ(): print("passed testing of reading keys from os.environ") async_client: openai.AsyncAzureOpenAI = model["async_client"] assert async_client.api_key == os.environ["AZURE_API_KEY"] - assert async_client.base_url == os.environ["AZURE_API_BASE"] + assert async_client.base_url == os.environ["AZURE_API_BASE"] + assert async_client.max_retries == (os.environ["AZURE_MAX_RETRIES"]), f"{async_client.max_retries} vs {os.environ['AZURE_MAX_RETRIES']}" + assert async_client.timeout == (os.environ["AZURE_TIMEOUT"]), f"{async_client.timeout} vs {os.environ['AZURE_TIMEOUT']}" + print("async client set correctly!") + + print("\n Testing async streaming client") + + stream_async_client: openai.AsyncAzureOpenAI = model["stream_async_client"] + assert stream_async_client.api_key == os.environ["AZURE_API_KEY"] + assert stream_async_client.base_url == os.environ["AZURE_API_BASE"] + assert stream_async_client.max_retries == (os.environ["AZURE_MAX_RETRIES"]), f"{stream_async_client.max_retries} vs {os.environ['AZURE_MAX_RETRIES']}" + assert stream_async_client.timeout == (os.environ["AZURE_STREAM_TIMEOUT"]), f"{stream_async_client.timeout} vs {os.environ['AZURE_TIMEOUT']}" + print("async stream client set correctly!") + + print("\n Testing sync client") + client: openai.AzureOpenAI = model["client"] + assert client.api_key == os.environ["AZURE_API_KEY"] + assert client.base_url == os.environ["AZURE_API_BASE"] + assert client.max_retries == (os.environ["AZURE_MAX_RETRIES"]), f"{client.max_retries} vs {os.environ['AZURE_MAX_RETRIES']}" + assert client.timeout == (os.environ["AZURE_TIMEOUT"]), f"{client.timeout} vs {os.environ['AZURE_TIMEOUT']}" + print("sync client set correctly!") + + print("\n Testing sync stream client") + stream_client: openai.AzureOpenAI = model["stream_client"] + assert stream_client.api_key == os.environ["AZURE_API_KEY"] + assert stream_client.base_url == os.environ["AZURE_API_BASE"] + assert stream_client.max_retries == (os.environ["AZURE_MAX_RETRIES"]), f"{stream_client.max_retries} vs {os.environ['AZURE_MAX_RETRIES']}" + assert stream_client.timeout == (os.environ["AZURE_STREAM_TIMEOUT"]), f"{stream_client.timeout} vs {os.environ['AZURE_TIMEOUT']}" + print("sync stream client set correctly!") + router.reset() except Exception as e: traceback.print_exc() From 01aa8941a53ad1862450792eff97edac8d44b6f4 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 10:08:36 -0800 Subject: [PATCH 149/460] (test) OTEL / traceloop - waiting for async support --- litellm/tests/test_traceloop.py | 49 +++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 litellm/tests/test_traceloop.py diff --git a/litellm/tests/test_traceloop.py b/litellm/tests/test_traceloop.py new file mode 100644 index 000000000..c03fdcd43 --- /dev/null +++ b/litellm/tests/test_traceloop.py @@ -0,0 +1,49 @@ +# Commented out for now - since traceloop break ci/cd +# import sys +# import os +# import io, asyncio + +# sys.path.insert(0, os.path.abspath('../..')) + +# from litellm import completion +# import litellm +# litellm.num_retries = 3 +# litellm.success_callback = [""] +# import time +# import pytest +# from traceloop.sdk import Traceloop +# Traceloop.init(app_name="test-litellm", disable_batch=True) + + +# def test_traceloop_logging(): +# try: +# litellm.set_verbose = True +# response = litellm.completion( +# model="gpt-3.5-turbo", +# messages=[{"role": "user", "content":"This is a test"}], +# max_tokens=1000, +# temperature=0.7, +# timeout=5, +# ) +# print(f"response: {response}") +# except Exception as e: +# pytest.fail(f"An exception occurred - {e}") +# # test_traceloop_logging() + + +# # def test_traceloop_logging_async(): +# # try: +# # litellm.set_verbose = True +# # async def test_acompletion(): +# # return await litellm.acompletion( +# # model="gpt-3.5-turbo", +# # messages=[{"role": "user", "content":"This is a test"}], +# # max_tokens=1000, +# # temperature=0.7, +# # timeout=5, +# # ) +# # response = asyncio.run(test_acompletion()) +# # print(f"response: {response}") +# # except Exception as e: +# # pytest.fail(f"An exception occurred - {e}") +# # test_traceloop_logging_async() From caf2a6b279ddbe89ebd1d8f4499f65715d684851 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 10:13:06 -0800 Subject: [PATCH 150/460] (fix) proxy - move new health check import --- litellm/proxy/proxy_server.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index aa401fe41..474786669 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -7,8 +7,6 @@ import secrets, subprocess import hashlib, uuid import warnings import importlib - -from litellm.health_check import perform_health_check messages: list = [] sys.path.insert( 0, os.path.abspath("../..") @@ -100,6 +98,7 @@ from litellm.proxy.utils import ( import pydantic from litellm.proxy.types import * from litellm.caching import DualCache +from litellm.health_check import perform_health_check litellm.suppress_debug_info = True from fastapi import FastAPI, Request, HTTPException, status, Depends, BackgroundTasks from fastapi.routing import APIRouter From 37251d327d4b0fe564fd8d7223d5d96cde7752b1 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 6 Dec 2023 10:29:44 -0800 Subject: [PATCH 151/460] docs(virtual_keys.md): add custom auth to docs --- docs/my-website/docs/proxy/virtual_keys.md | 58 ++++++++++++++++++++-- 1 file changed, 55 insertions(+), 3 deletions(-) diff --git a/docs/my-website/docs/proxy/virtual_keys.md b/docs/my-website/docs/proxy/virtual_keys.md index ac1cf54de..556e64a56 100644 --- a/docs/my-website/docs/proxy/virtual_keys.md +++ b/docs/my-website/docs/proxy/virtual_keys.md @@ -3,6 +3,8 @@ Track Spend and create virtual keys for the proxy Grant other's temporary access to your proxy, with keys that expire after a set duration. +## Quick Start + Requirements: - Need to a postgres database (e.g. [Supabase](https://supabase.com/), [Neon](https://neon.tech/), etc) @@ -54,7 +56,7 @@ Expected response: } ``` -### Managing Auth - Upgrade/Downgrade Models +## Managing Auth - Upgrade/Downgrade Models If a user is expected to use a given model (i.e. gpt3-5), and you want to: @@ -103,7 +105,7 @@ curl -X POST "https://0.0.0.0:8000/key/generate" \ - **How to upgrade / downgrade request?** Change the alias mapping - **How are routing between diff keys/api bases done?** litellm handles this by shuffling between different models in the model list with the same model_name. [**See Code**](https://github.com/BerriAI/litellm/blob/main/litellm/router.py) -### Managing Auth - Tracking Spend +## Managing Auth - Tracking Spend You can get spend for a key by using the `/key/info` endpoint. @@ -135,4 +137,54 @@ This is automatically updated (in USD) when calls are made to /completions, /cha "config": {} } } -``` \ No newline at end of file +``` + +## Custom Auth + +You can now override the default api key auth. + +Here's how: + +### 1. Create a custom auth file. + +Make sure the response type follows the `UserAPIKeyAuth` pydantic object. This is used by for logging usage specific to that user key. + +```python +from litellm.proxy.types import UserAPIKeyAuth + +async def user_api_key_auth(request: Request, api_key: str) -> UserAPIKeyAuth: + try: + modified_master_key = "sk-my-master-key" + if api_key == modified_master_key: + return UserAPIKeyAuth(api_key=api_key) + raise Exception + except: + raise Exception +``` + +### 2. Pass the filepath (relative to the config.yaml) + +Pass the filepath to the config.yaml + +e.g. if they're both in the same dir - `./config.yaml` and `./custom_auth.py`, this is what it looks like: +```yaml +model_list: + - model_name: "openai-model" + litellm_params: + model: "gpt-3.5-turbo" + +litellm_settings: + drop_params: True + set_verbose: True + +general_settings: + custom_auth: custom_auth.user_api_key_auth +``` + +[**Implementation Code**](https://github.com/BerriAI/litellm/blob/caf2a6b279ddbe89ebd1d8f4499f65715d684851/litellm/proxy/utils.py#L122) + +### 3. Start the proxy +```bash +$ litellm --config /path/to/config.yaml +``` + From 9f4928fae473ff41616bcb681f2875270407480e Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 10:44:48 -0800 Subject: [PATCH 152/460] (feat) proxy - add health check for embeddings --- litellm/health_check.py | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/litellm/health_check.py b/litellm/health_check.py index 308382347..082de87dc 100644 --- a/litellm/health_check.py +++ b/litellm/health_check.py @@ -1,3 +1,5 @@ +# This file runs a health check for the LLM, used on litellm/proxy + import asyncio import random from typing import Optional @@ -42,27 +44,44 @@ async def _perform_health_check(model_list: list): """ Perform a health check for each model in the list. """ + async def _check_embedding_model(model_params: dict): + model_params.pop("messages", None) + model_params["input"] = ["test from litellm"] + try: + await litellm.aembedding(**model_params) + except Exception as e: + print_verbose("\n\n Got Exception, ", e) + print_verbose(f"Health check failed for model {model_params['model']}. Error: {e}") + return False + return True + async def _check_model(model_params: dict): try: await litellm.acompletion(**model_params) except Exception as e: + print_verbose("\n\n Got Exception, ", e) + error_str = (str(e)) + if "This is not a chat model" in error_str or "The chatCompletion operation does not work with the specified model" in error_str: + return await _check_embedding_model(model_params) + print_verbose(f"Health check failed for model {model_params['model']}. Error: {e}") return False return True prepped_params = [] - + tasks = [] for model in model_list: litellm_params = model["litellm_params"] litellm_params["model"] = litellm.utils.remove_model_id(litellm_params["model"]) litellm_params["messages"] = _get_random_llm_message() prepped_params.append(litellm_params) - - - tasks = [_check_model(x) for x in prepped_params] + if "embedding" in litellm_params["model"]: + tasks.append(_check_embedding_model(litellm_params)) + else: + tasks.append(_check_model(litellm_params)) results = await asyncio.gather(*tasks) @@ -95,19 +114,6 @@ async def perform_health_check(model_list: list, model: Optional[str] = None): if model is not None: model_list = [x for x in model_list if x["litellm_params"]["model"] == model] - models_to_check = [] - - for model in model_list: - litellm_params = model["litellm_params"] - model_name = litellm.utils.remove_model_id(litellm_params["model"]) - - if model_name in litellm.all_embedding_models: - continue # Skip embedding models - - - models_to_check.append(model) - - healthy_endpoints, unhealthy_endpoints = await _perform_health_check(model_list) return healthy_endpoints, unhealthy_endpoints From 1e2a8869a97cbb557006c442ef530f2b0163a4db Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 10:45:06 -0800 Subject: [PATCH 153/460] (docs) proxy config with azure, openai embedding models --- litellm/proxy/proxy_config.yaml | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/litellm/proxy/proxy_config.yaml b/litellm/proxy/proxy_config.yaml index 5f4f9fcad..b5a9050ad 100644 --- a/litellm/proxy/proxy_config.yaml +++ b/litellm/proxy/proxy_config.yaml @@ -1,7 +1,25 @@ model_list: - - model_name: gpt-3.5-turbo + - model_name: Azure OpenAI GPT-4 Canada-East (External) + litellm_params: + model: azure/chatgpt-v-2 + api_base: os.environ/AZURE_API_BASE + api_key: os.environ/AZURE_API_KEY + api_version: "2023-07-01-preview" + - model_name: azure-embedding-model + litellm_params: + model: azure/azure-embedding-model + api_base: os.environ/AZURE_API_BASE + api_key: os.environ/AZURE_API_KEY + api_version: "2023-07-01-preview" + - model_name: openai-gpt-3.5 litellm_params: model: gpt-3.5-turbo + api_key: os.environ/OPENAI_API_KEY + - model_name: text-embedding-ada-002 + litellm_params: + model: text-embedding-ada-002 + api_key: os.environ/OPENAI_API_KEY + litellm_settings: # callbacks: custom_callbacks.proxy_handler_instance # sets litellm.callbacks = [proxy_handler_instance] From 8f47293ce8b3c9c32a0356f6dd33a3bb83938e3d Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 10:48:01 -0800 Subject: [PATCH 154/460] (chore) linting fix --- litellm/tests/test_router.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/litellm/tests/test_router.py b/litellm/tests/test_router.py index 5cfe42457..966969cc9 100644 --- a/litellm/tests/test_router.py +++ b/litellm/tests/test_router.py @@ -705,7 +705,7 @@ def test_reading_keys_os_environ(): assert float(model["litellm_params"]["stream_timeout"]) == float(os.environ["AZURE_STREAM_TIMEOUT"]), f"{model['litellm_params']['stream_timeout']} vs {os.environ['AZURE_STREAM_TIMEOUT']}" assert int(model["litellm_params"]["max_retries"]) == int(os.environ["AZURE_MAX_RETRIES"]), f"{model['litellm_params']['max_retries']} vs {os.environ['AZURE_MAX_RETRIES']}" print("passed testing of reading keys from os.environ") - async_client: openai.AsyncAzureOpenAI = model["async_client"] + async_client: openai.AsyncAzureOpenAI = model["async_client"] # type: ignore assert async_client.api_key == os.environ["AZURE_API_KEY"] assert async_client.base_url == os.environ["AZURE_API_BASE"] assert async_client.max_retries == (os.environ["AZURE_MAX_RETRIES"]), f"{async_client.max_retries} vs {os.environ['AZURE_MAX_RETRIES']}" @@ -714,7 +714,7 @@ def test_reading_keys_os_environ(): print("\n Testing async streaming client") - stream_async_client: openai.AsyncAzureOpenAI = model["stream_async_client"] + stream_async_client: openai.AsyncAzureOpenAI = model["stream_async_client"] # type: ignore assert stream_async_client.api_key == os.environ["AZURE_API_KEY"] assert stream_async_client.base_url == os.environ["AZURE_API_BASE"] assert stream_async_client.max_retries == (os.environ["AZURE_MAX_RETRIES"]), f"{stream_async_client.max_retries} vs {os.environ['AZURE_MAX_RETRIES']}" @@ -722,7 +722,7 @@ def test_reading_keys_os_environ(): print("async stream client set correctly!") print("\n Testing sync client") - client: openai.AzureOpenAI = model["client"] + client: openai.AzureOpenAI = model["client"] # type: ignore assert client.api_key == os.environ["AZURE_API_KEY"] assert client.base_url == os.environ["AZURE_API_BASE"] assert client.max_retries == (os.environ["AZURE_MAX_RETRIES"]), f"{client.max_retries} vs {os.environ['AZURE_MAX_RETRIES']}" @@ -730,7 +730,7 @@ def test_reading_keys_os_environ(): print("sync client set correctly!") print("\n Testing sync stream client") - stream_client: openai.AzureOpenAI = model["stream_client"] + stream_client: openai.AzureOpenAI = model["stream_client"] # type: ignore assert stream_client.api_key == os.environ["AZURE_API_KEY"] assert stream_client.base_url == os.environ["AZURE_API_BASE"] assert stream_client.max_retries == (os.environ["AZURE_MAX_RETRIES"]), f"{stream_client.max_retries} vs {os.environ['AZURE_MAX_RETRIES']}" From cc48b35a8dc1f0dec5aa12dfd8dd2896e93efe68 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 10:56:27 -0800 Subject: [PATCH 155/460] (test) router - read os.environ/ OpenAI --- litellm/tests/test_router.py | 72 +++++++++++++++++++++++++++++++++++- 1 file changed, 71 insertions(+), 1 deletion(-) diff --git a/litellm/tests/test_router.py b/litellm/tests/test_router.py index 966969cc9..74141f364 100644 --- a/litellm/tests/test_router.py +++ b/litellm/tests/test_router.py @@ -742,4 +742,74 @@ def test_reading_keys_os_environ(): traceback.print_exc() pytest.fail(f"Error occurred: {e}") -test_reading_keys_os_environ() \ No newline at end of file +test_reading_keys_os_environ() + + +def test_reading_openai_keys_os_environ(): + import openai + try: + model_list = [ + { + "model_name": "gpt-3.5-turbo", + "litellm_params": { + "model": "gpt-3.5-turbo", + "api_key": "os.environ/OPENAI_API_KEY", + "timeout": "os.environ/AZURE_TIMEOUT", + "stream_timeout": "os.environ/AZURE_STREAM_TIMEOUT", + "max_retries": "os.environ/AZURE_MAX_RETRIES", + }, + }, + { + "model_name": "text-embedding-ada-002", + "litellm_params": { + "model": "text-embedding-ada-002", + "api_key": "os.environ/OPENAI_API_KEY", + "timeout": "os.environ/AZURE_TIMEOUT", + "stream_timeout": "os.environ/AZURE_STREAM_TIMEOUT", + "max_retries": "os.environ/AZURE_MAX_RETRIES", + }, + }, + + ] + + router = Router(model_list=model_list) + for model in router.model_list: + assert model["litellm_params"]["api_key"] == os.environ["OPENAI_API_KEY"], f"{model['litellm_params']['api_key']} vs {os.environ['AZURE_API_KEY']}" + assert float(model["litellm_params"]["timeout"]) == float(os.environ["AZURE_TIMEOUT"]), f"{model['litellm_params']['timeout']} vs {os.environ['AZURE_TIMEOUT']}" + assert float(model["litellm_params"]["stream_timeout"]) == float(os.environ["AZURE_STREAM_TIMEOUT"]), f"{model['litellm_params']['stream_timeout']} vs {os.environ['AZURE_STREAM_TIMEOUT']}" + assert int(model["litellm_params"]["max_retries"]) == int(os.environ["AZURE_MAX_RETRIES"]), f"{model['litellm_params']['max_retries']} vs {os.environ['AZURE_MAX_RETRIES']}" + print("passed testing of reading keys from os.environ") + async_client: openai.AsyncOpenAI = model["async_client"] # type: ignore + assert async_client.api_key == os.environ["OPENAI_API_KEY"] + assert async_client.max_retries == (os.environ["AZURE_MAX_RETRIES"]), f"{async_client.max_retries} vs {os.environ['AZURE_MAX_RETRIES']}" + assert async_client.timeout == (os.environ["AZURE_TIMEOUT"]), f"{async_client.timeout} vs {os.environ['AZURE_TIMEOUT']}" + print("async client set correctly!") + + print("\n Testing async streaming client") + + stream_async_client: openai.AsyncOpenAI = model["stream_async_client"] # type: ignore + assert stream_async_client.api_key == os.environ["OPENAI_API_KEY"] + assert stream_async_client.max_retries == (os.environ["AZURE_MAX_RETRIES"]), f"{stream_async_client.max_retries} vs {os.environ['AZURE_MAX_RETRIES']}" + assert stream_async_client.timeout == (os.environ["AZURE_STREAM_TIMEOUT"]), f"{stream_async_client.timeout} vs {os.environ['AZURE_TIMEOUT']}" + print("async stream client set correctly!") + + print("\n Testing sync client") + client: openai.AzureOpenAI = model["client"] # type: ignore + assert client.api_key == os.environ["OPENAI_API_KEY"] + assert client.max_retries == (os.environ["AZURE_MAX_RETRIES"]), f"{client.max_retries} vs {os.environ['AZURE_MAX_RETRIES']}" + assert client.timeout == (os.environ["AZURE_TIMEOUT"]), f"{client.timeout} vs {os.environ['AZURE_TIMEOUT']}" + print("sync client set correctly!") + + print("\n Testing sync stream client") + stream_client: openai.AzureOpenAI = model["stream_client"] # type: ignore + assert stream_client.api_key == os.environ["OPENAI_API_KEY"] + assert stream_client.max_retries == (os.environ["AZURE_MAX_RETRIES"]), f"{stream_client.max_retries} vs {os.environ['AZURE_MAX_RETRIES']}" + assert stream_client.timeout == (os.environ["AZURE_STREAM_TIMEOUT"]), f"{stream_client.timeout} vs {os.environ['AZURE_TIMEOUT']}" + print("sync stream client set correctly!") + + router.reset() + except Exception as e: + traceback.print_exc() + pytest.fail(f"Error occurred: {e}") + +# test_reading_openai_keys_os_environ() \ No newline at end of file From f6546076b0e8e38939ea368fc33d898a76780509 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 6 Dec 2023 11:06:01 -0800 Subject: [PATCH 156/460] docs(quick_start.md): add docs on calling openai-compatible endpoint on proxy --- docs/my-website/docs/proxy/quick_start.md | 28 +++++++++++++++---- .../tests/test_provider_specific_config.py | 4 +-- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/docs/my-website/docs/proxy/quick_start.md b/docs/my-website/docs/proxy/quick_start.md index 3b5426b4c..d74de240d 100644 --- a/docs/my-website/docs/proxy/quick_start.md +++ b/docs/my-website/docs/proxy/quick_start.md @@ -144,7 +144,7 @@ $ litellm --model azure/my-deployment-name ``` - + ```shell $ export OPENAI_API_KEY=my-api-key @@ -154,13 +154,23 @@ $ export OPENAI_API_KEY=my-api-key $ litellm --model gpt-3.5-turbo ``` + + +```shell +$ export OPENAI_API_KEY=my-api-key +``` + +```shell +$ litellm --model openai/ --api_base # e.g. http://0.0.0.0:3000 +``` + ```shell $ export HUGGINGFACE_API_KEY=my-api-key #[OPTIONAL] ``` ```shell -$ litellm --model huggingface/ --api_base https://k58ory32yinf1ly0.us-east-1.aws.endpoints.huggingface.cloud +$ litellm --model huggingface/ --api_base # e.g. http://0.0.0.0:3000 ``` @@ -270,6 +280,8 @@ $ litellm --model command-nightly + + ## Quick Start - LiteLLM Proxy + Config.yaml The config allows you to create a model list and set `api_base`, `max_tokens` (all litellm params). See more details about the config [here](https://docs.litellm.ai/docs/proxy/configs) @@ -277,9 +289,9 @@ The config allows you to create a model list and set `api_base`, `max_tokens` (a Example config ```yaml -model_list: - - model_name: gpt-3.5-turbo - litellm_params: +model_list: + - model_name: gpt-3.5-turbo # user-facing model alias + litellm_params: # all params accepted by litellm.completion() - https://docs.litellm.ai/docs/completion/input model: azure/ api_base: api_key: @@ -288,6 +300,10 @@ model_list: model: azure/gpt-turbo-small-ca api_base: https://my-endpoint-canada-berri992.openai.azure.com/ api_key: + - model_name: vllm-model + litellm_params: + model: openai/ + api_base: # e.g. http://0.0.0.0:3000 ``` ### Run proxy with config @@ -296,6 +312,8 @@ model_list: litellm --config your_config.yaml ``` +[**More Info**](./configs.md) + ## Quick Start Docker Image: Github Container Registry ### Pull the litellm ghcr docker image diff --git a/litellm/tests/test_provider_specific_config.py b/litellm/tests/test_provider_specific_config.py index e3a7aa829..06282e234 100644 --- a/litellm/tests/test_provider_specific_config.py +++ b/litellm/tests/test_provider_specific_config.py @@ -395,7 +395,7 @@ def sagemaker_test_completion(): try: # OVERRIDE WITH DYNAMIC MAX TOKENS response_1 = litellm.completion( - model="sagemaker/jumpstart-dft-meta-textgeneration-llama-2-7b", + model="sagemaker/berri-benchmarking-Llama-2-70b-chat-hf-4", messages=[{ "content": "Hello, how are you? Be as verbose as possible","role": "user"}], max_tokens=100 ) @@ -404,7 +404,7 @@ def sagemaker_test_completion(): # USE CONFIG TOKENS response_2 = litellm.completion( - model="sagemaker/jumpstart-dft-meta-textgeneration-llama-2-7b", + model="sagemaker/berri-benchmarking-Llama-2-70b-chat-hf-4", messages=[{ "content": "Hello, how are you? Be as verbose as possible","role": "user"}], ) response_2_text = response_2.choices[0].message.content From 4f02b3c16141372ece1b403ed59b38f0bce9c900 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 10:58:00 -0800 Subject: [PATCH 157/460] (fix) print_verbose health check --- litellm/health_check.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/litellm/health_check.py b/litellm/health_check.py index 082de87dc..e814a8c60 100644 --- a/litellm/health_check.py +++ b/litellm/health_check.py @@ -50,7 +50,7 @@ async def _perform_health_check(model_list: list): try: await litellm.aembedding(**model_params) except Exception as e: - print_verbose("\n\n Got Exception, ", e) + print_verbose(f"\n\n Got Exception, {e}") print_verbose(f"Health check failed for model {model_params['model']}. Error: {e}") return False return True @@ -60,7 +60,7 @@ async def _perform_health_check(model_list: list): try: await litellm.acompletion(**model_params) except Exception as e: - print_verbose("\n\n Got Exception, ", e) + print_verbose(f"\n\n Got Exception, {e}") error_str = (str(e)) if "This is not a chat model" in error_str or "The chatCompletion operation does not work with the specified model" in error_str: return await _check_embedding_model(model_params) From 7c77cc3cfa082856500d65ecfa827dc449d6dc7b Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 11:16:28 -0800 Subject: [PATCH 158/460] (feat) add `mode` for config.yaml health checks --- litellm/health_check.py | 11 +++-------- litellm/proxy/proxy_config.yaml | 2 ++ litellm/proxy/types.py | 1 + 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/litellm/health_check.py b/litellm/health_check.py index e814a8c60..dabe7215e 100644 --- a/litellm/health_check.py +++ b/litellm/health_check.py @@ -50,7 +50,6 @@ async def _perform_health_check(model_list: list): try: await litellm.aembedding(**model_params) except Exception as e: - print_verbose(f"\n\n Got Exception, {e}") print_verbose(f"Health check failed for model {model_params['model']}. Error: {e}") return False return True @@ -59,12 +58,7 @@ async def _perform_health_check(model_list: list): async def _check_model(model_params: dict): try: await litellm.acompletion(**model_params) - except Exception as e: - print_verbose(f"\n\n Got Exception, {e}") - error_str = (str(e)) - if "This is not a chat model" in error_str or "The chatCompletion operation does not work with the specified model" in error_str: - return await _check_embedding_model(model_params) - + except Exception as e: print_verbose(f"Health check failed for model {model_params['model']}. Error: {e}") return False @@ -78,7 +72,8 @@ async def _perform_health_check(model_list: list): litellm_params["messages"] = _get_random_llm_message() prepped_params.append(litellm_params) - if "embedding" in litellm_params["model"]: + if model.get("mode", None) == "embedding": + # this is an embedding model tasks.append(_check_embedding_model(litellm_params)) else: tasks.append(_check_model(litellm_params)) diff --git a/litellm/proxy/proxy_config.yaml b/litellm/proxy/proxy_config.yaml index b5a9050ad..86191b095 100644 --- a/litellm/proxy/proxy_config.yaml +++ b/litellm/proxy/proxy_config.yaml @@ -11,6 +11,7 @@ model_list: api_base: os.environ/AZURE_API_BASE api_key: os.environ/AZURE_API_KEY api_version: "2023-07-01-preview" + mode: embedding - model_name: openai-gpt-3.5 litellm_params: model: gpt-3.5-turbo @@ -19,6 +20,7 @@ model_list: litellm_params: model: text-embedding-ada-002 api_key: os.environ/OPENAI_API_KEY + mode: embedding litellm_settings: diff --git a/litellm/proxy/types.py b/litellm/proxy/types.py index 3f7ae1db5..5d4669d7d 100644 --- a/litellm/proxy/types.py +++ b/litellm/proxy/types.py @@ -40,6 +40,7 @@ class ProxyChatCompletionRequest(BaseModel): class ModelInfo(BaseModel): id: Optional[str] + mode: Optional[str] class Config: extra = Extra.allow # Allow extra fields From fd8687616412f42f08ec42029e99bfbf8215f3dc Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 11:29:59 -0800 Subject: [PATCH 159/460] (feat) proxy: add mode in model info --- litellm/health_check.py | 3 ++- litellm/proxy/proxy_config.yaml | 6 ++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/litellm/health_check.py b/litellm/health_check.py index dabe7215e..db07ae20a 100644 --- a/litellm/health_check.py +++ b/litellm/health_check.py @@ -68,11 +68,12 @@ async def _perform_health_check(model_list: list): tasks = [] for model in model_list: litellm_params = model["litellm_params"] + model_info = model.get("model_info", {}) litellm_params["model"] = litellm.utils.remove_model_id(litellm_params["model"]) litellm_params["messages"] = _get_random_llm_message() prepped_params.append(litellm_params) - if model.get("mode", None) == "embedding": + if model_info.get("mode", None) == "embedding": # this is an embedding model tasks.append(_check_embedding_model(litellm_params)) else: diff --git a/litellm/proxy/proxy_config.yaml b/litellm/proxy/proxy_config.yaml index 86191b095..6d4e5b2e9 100644 --- a/litellm/proxy/proxy_config.yaml +++ b/litellm/proxy/proxy_config.yaml @@ -11,7 +11,8 @@ model_list: api_base: os.environ/AZURE_API_BASE api_key: os.environ/AZURE_API_KEY api_version: "2023-07-01-preview" - mode: embedding + model_info: + mode: embedding - model_name: openai-gpt-3.5 litellm_params: model: gpt-3.5-turbo @@ -20,7 +21,8 @@ model_list: litellm_params: model: text-embedding-ada-002 api_key: os.environ/OPENAI_API_KEY - mode: embedding + model_info: + mode: embedding litellm_settings: From aefa4f36f9206b9533fd55ad573d9b6ab7057694 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 11:36:16 -0800 Subject: [PATCH 160/460] (docs) update yaml with chat/embedding/completion mode --- litellm/proxy/proxy_config.yaml | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/litellm/proxy/proxy_config.yaml b/litellm/proxy/proxy_config.yaml index 6d4e5b2e9..692361a56 100644 --- a/litellm/proxy/proxy_config.yaml +++ b/litellm/proxy/proxy_config.yaml @@ -5,6 +5,14 @@ model_list: api_base: os.environ/AZURE_API_BASE api_key: os.environ/AZURE_API_KEY api_version: "2023-07-01-preview" + model_info: + mode: chat + - model_name: openai-gpt-3.5 + litellm_params: + model: gpt-3.5-turbo + api_key: os.environ/OPENAI_API_KEY + model_info: + mode: chat - model_name: azure-embedding-model litellm_params: model: azure/azure-embedding-model @@ -13,16 +21,18 @@ model_list: api_version: "2023-07-01-preview" model_info: mode: embedding - - model_name: openai-gpt-3.5 - litellm_params: - model: gpt-3.5-turbo - api_key: os.environ/OPENAI_API_KEY - model_name: text-embedding-ada-002 litellm_params: model: text-embedding-ada-002 api_key: os.environ/OPENAI_API_KEY model_info: mode: embedding + - model_name: text-davinci-003 + litellm_params: + model: text-davinci-003 + api_key: os.environ/OPENAI_API_KEY + model_info: + mode: completion litellm_settings: From 94f065f83c20f5ca2f9fb41c16f62a23d75c024d Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 6 Dec 2023 11:41:00 -0800 Subject: [PATCH 161/460] feat(sagemaker.py): support huggingface embedding models --- litellm/llms/sagemaker.py | 133 +++++++++++++++++++++++++++++++- litellm/main.py | 10 +++ litellm/tests/test_embedding.py | 12 ++- 3 files changed, 150 insertions(+), 5 deletions(-) diff --git a/litellm/llms/sagemaker.py b/litellm/llms/sagemaker.py index cb5b56bdd..36324286b 100644 --- a/litellm/llms/sagemaker.py +++ b/litellm/llms/sagemaker.py @@ -196,6 +196,133 @@ def completion( model_response.usage = usage return model_response -def embedding(): - # logic for parsing in - calling - parsing out model embedding calls - pass +def embedding(model: str, + input: list, + model_response: ModelResponse, + print_verbose: Callable, + encoding, + logging_obj, + custom_prompt_dict={}, + optional_params=None, + litellm_params=None, + logger_fn=None): + """ + Supports Huggingface Jumpstart embeddings like GPT-6B + """ + ### BOTO3 INIT + import boto3 + # pop aws_secret_access_key, aws_access_key_id, aws_region_name from kwargs, since completion calls fail with them + aws_secret_access_key = optional_params.pop("aws_secret_access_key", None) + aws_access_key_id = optional_params.pop("aws_access_key_id", None) + aws_region_name = optional_params.pop("aws_region_name", None) + + if aws_access_key_id != None: + # uses auth params passed to completion + # aws_access_key_id is not None, assume user is trying to auth using litellm.completion + client = boto3.client( + service_name="sagemaker-runtime", + aws_access_key_id=aws_access_key_id, + aws_secret_access_key=aws_secret_access_key, + region_name=aws_region_name, + ) + else: + # aws_access_key_id is None, assume user is trying to auth using env variables + # boto3 automaticaly reads env variables + + # we need to read region name from env + # I assume majority of users use .env for auth + region_name = ( + get_secret("AWS_REGION_NAME") or + "us-west-2" # default to us-west-2 if user not specified + ) + client = boto3.client( + service_name="sagemaker-runtime", + region_name=region_name, + ) + + # pop streaming if it's in the optional params as 'stream' raises an error with sagemaker + inference_params = deepcopy(optional_params) + inference_params.pop("stream", None) + + ## Load Config + config = litellm.SagemakerConfig.get_config() + for k, v in config.items(): + if k not in inference_params: # completion(top_k=3) > sagemaker_config(top_k=3) <- allows for dynamic variables to be passed in + inference_params[k] = v + + #### HF EMBEDDING LOGIC + data = json.dumps({ + "text_inputs": input + }).encode('utf-8') + + ## LOGGING + request_str = f""" + response = client.invoke_endpoint( + EndpointName={model}, + ContentType="application/json", + Body={data}, + CustomAttributes="accept_eula=true", + )""" + logging_obj.pre_call( + input=input, + api_key="", + additional_args={"complete_input_dict": data, "request_str": request_str}, + ) + ## EMBEDDING CALL + try: + response = client.invoke_endpoint( + EndpointName=model, + ContentType="application/json", + Body=data, + CustomAttributes="accept_eula=true", + ) + except Exception as e: + raise SagemakerError(status_code=500, message=f"{str(e)}") + + ## LOGGING + logging_obj.post_call( + input=input, + api_key="", + additional_args={"complete_input_dict": data}, + original_response=response, + ) + + + response = json.loads(response["Body"].read().decode("utf8")) + ## LOGGING + logging_obj.post_call( + input=input, + api_key="", + original_response=response, + additional_args={"complete_input_dict": data}, + ) + print_verbose(f"raw model_response: {response}") + if "embedding" not in response: + raise SagemakerError(status_code=500, message="embedding not found in response") + embeddings = response['embedding'] + + if not isinstance(embeddings, list): + raise SagemakerError(status_code=422, message=f"Response not in expected format - {embeddings}") + + + output_data = [] + for idx, embedding in enumerate(embeddings): + output_data.append( + { + "object": "embedding", + "index": idx, + "embedding": embedding + } + ) + + model_response["object"] = "list" + model_response["data"] = output_data + model_response["model"] = model + + input_tokens = 0 + for text in input: + input_tokens+=len(encoding.encode(text)) + + model_response["usage"] = Usage(prompt_tokens=input_tokens, completion_tokens=0, total_tokens=input_tokens) + + return model_response diff --git a/litellm/main.py b/litellm/main.py index f265d4653..d78c8ceb9 100644 --- a/litellm/main.py +++ b/litellm/main.py @@ -1906,6 +1906,16 @@ def embedding( optional_params=kwargs, model_response= EmbeddingResponse() ) + elif custom_llm_provider == "sagemaker": + response = sagemaker.embedding( + model=model, + input=input, + encoding=encoding, + logging_obj=logging, + optional_params=kwargs, + model_response= EmbeddingResponse(), + print_verbose=print_verbose + ) else: args = locals() raise ValueError(f"No valid embedding model args passed in - {args}") diff --git a/litellm/tests/test_embedding.py b/litellm/tests/test_embedding.py index 628d2ed04..f958d6cfc 100644 --- a/litellm/tests/test_embedding.py +++ b/litellm/tests/test_embedding.py @@ -214,7 +214,14 @@ def test_aembedding_azure(): # test_aembedding_azure() -# def test_custom_openai_embedding(): +def test_sagemaker_embeddings(): + try: + response = litellm.embedding(model="sagemaker/berri-benchmarking-gpt-j-6b-fp16", input=["good morning from litellm", "this is another item"]) + print(f"response: {response}") + except Exception as e: + pytest.fail(f"Error occurred: {e}") +test_sagemaker_embeddings() +# def local_proxy_embeddings(): # litellm.set_verbose=True # response = embedding( # model="openai/custom_embedding", @@ -222,4 +229,5 @@ def test_aembedding_azure(): # api_base="http://0.0.0.0:8000/" # ) # print(response) -# test_custom_openai_embedding() + +# local_proxy_embeddings() From de58dcc016c7031fd0d541a15f0896e66ba6948b Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 11:42:54 -0800 Subject: [PATCH 162/460] (feat) proxy - allow setting cost, context window --- litellm/proxy/proxy_config.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/litellm/proxy/proxy_config.yaml b/litellm/proxy/proxy_config.yaml index 692361a56..93d614aeb 100644 --- a/litellm/proxy/proxy_config.yaml +++ b/litellm/proxy/proxy_config.yaml @@ -7,6 +7,9 @@ model_list: api_version: "2023-07-01-preview" model_info: mode: chat + input_cost_per_token: 0.0.00006 + output_cost_per_token: 0.00003 + max_tokens: 4096 - model_name: openai-gpt-3.5 litellm_params: model: gpt-3.5-turbo From 102de97960b5b35b5b0a8e10bbe651fc87d01890 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 6 Dec 2023 11:46:09 -0800 Subject: [PATCH 163/460] refactor: fix linting errors --- litellm/llms/sagemaker.py | 6 +++--- litellm/proxy/proxy_server.py | 5 +++++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/litellm/llms/sagemaker.py b/litellm/llms/sagemaker.py index 36324286b..96d06bc20 100644 --- a/litellm/llms/sagemaker.py +++ b/litellm/llms/sagemaker.py @@ -5,7 +5,7 @@ import requests import time from typing import Callable, Optional import litellm -from litellm.utils import ModelResponse, get_secret, Usage +from litellm.utils import ModelResponse, EmbeddingResponse, get_secret, Usage import sys from copy import deepcopy import httpx @@ -198,7 +198,7 @@ def completion( def embedding(model: str, input: list, - model_response: ModelResponse, + model_response: EmbeddingResponse, print_verbose: Callable, encoding, logging_obj, @@ -262,7 +262,7 @@ def embedding(model: str, ContentType="application/json", Body={data}, CustomAttributes="accept_eula=true", - )""" + )""" # type: ignore logging_obj.pre_call( input=input, api_key="", diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 474786669..23b39415d 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -1175,6 +1175,11 @@ async def test_endpoint(request: Request): async def health_endpoint(request: Request, model: Optional[str] = fastapi.Query(None, description="Specify the model name (optional)")): global llm_model_list + if llm_model_list is None: + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail={"error": "Model list not initialized"}, + ) healthy_endpoints, unhealthy_endpoints = await perform_health_check(llm_model_list, model) return { From 29fb97f88a1682f09b9c2601e9c625fc9e594341 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 12:06:28 -0800 Subject: [PATCH 164/460] (feat) proxy - define model info --- litellm/proxy/proxy_config.yaml | 2 ++ litellm/proxy/types.py | 8 ++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/litellm/proxy/proxy_config.yaml b/litellm/proxy/proxy_config.yaml index 93d614aeb..22ca2f7b9 100644 --- a/litellm/proxy/proxy_config.yaml +++ b/litellm/proxy/proxy_config.yaml @@ -10,6 +10,8 @@ model_list: input_cost_per_token: 0.0.00006 output_cost_per_token: 0.00003 max_tokens: 4096 + base_model: gpt-35-turbo + - model_name: openai-gpt-3.5 litellm_params: model: gpt-3.5-turbo diff --git a/litellm/proxy/types.py b/litellm/proxy/types.py index 5d4669d7d..8cbab9e9b 100644 --- a/litellm/proxy/types.py +++ b/litellm/proxy/types.py @@ -1,5 +1,5 @@ from pydantic import BaseModel, Extra -from typing import Optional, List, Union, Dict +from typing import Optional, List, Union, Dict, Literal from datetime import datetime import uuid ######### Request Class Definition ###### @@ -40,7 +40,11 @@ class ProxyChatCompletionRequest(BaseModel): class ModelInfo(BaseModel): id: Optional[str] - mode: Optional[str] + mode: Optional[Literal['embedding', 'chat', 'completion']] + input_cost_per_token: Optional[float] + output_cost_per_token: Optional[float] + max_tokens: Optional[int] + base_model: Optional[Literal['gpt-4-1106-preview', 'gpt-4-32k', 'gpt-4', 'gpt-3.5-turbo-16k', 'gpt-3.5-turbo']] class Config: extra = Extra.allow # Allow extra fields From 32a3ef86833f83c9e548f4bff4bd82ef28740509 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 12:13:52 -0800 Subject: [PATCH 165/460] (feat) add azure/text-embedding-ada-002 cost --- model_prices_and_context_window.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/model_prices_and_context_window.json b/model_prices_and_context_window.json index 28a01e47f..892893fea 100644 --- a/model_prices_and_context_window.json +++ b/model_prices_and_context_window.json @@ -139,6 +139,13 @@ "litellm_provider": "azure", "mode": "chat" }, + "azure/text-embedding-ada-002": { + "max_tokens": 8191, + "input_cost_per_token": 0.0000001, + "output_cost_per_token": 0.000000, + "litellm_provider": "azure", + "mode": "embedding" + }, "text-davinci-003": { "max_tokens": 4097, "input_cost_per_token": 0.000002, From 5fcd6437e495d9ccb72b4424a3b37a7499022268 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 12:16:57 -0800 Subject: [PATCH 166/460] (feat) pricing - add text-embedding-ada-002 --- model_prices_and_context_window.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/model_prices_and_context_window.json b/model_prices_and_context_window.json index 892893fea..ac500abdb 100644 --- a/model_prices_and_context_window.json +++ b/model_prices_and_context_window.json @@ -104,6 +104,13 @@ "litellm_provider": "openai", "mode": "chat" }, + "text-embedding-ada-002": { + "max_tokens": 8191, + "input_cost_per_token": 0.0000001, + "output_cost_per_token": 0.000000, + "litellm_provider": "openai", + "mode": "embedding" + }, "azure/gpt-4-1106-preview": { "max_tokens": 128000, "input_cost_per_token": 0.00001, From 06255c6590d45cbfb4537cbbc60b1ddb4b757d3f Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 12:19:47 -0800 Subject: [PATCH 167/460] (feat) proxy add ext-embedding-ada-002 as a base model --- litellm/proxy/types.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/litellm/proxy/types.py b/litellm/proxy/types.py index 8cbab9e9b..930e8acd0 100644 --- a/litellm/proxy/types.py +++ b/litellm/proxy/types.py @@ -44,7 +44,19 @@ class ModelInfo(BaseModel): input_cost_per_token: Optional[float] output_cost_per_token: Optional[float] max_tokens: Optional[int] - base_model: Optional[Literal['gpt-4-1106-preview', 'gpt-4-32k', 'gpt-4', 'gpt-3.5-turbo-16k', 'gpt-3.5-turbo']] + + # for azure models we need users to specify the base model, one azure you can call deployments - azure/my-random-model + # we look up the base model in model_prices_and_context_window.json + base_model: Optional[Literal + [ + 'gpt-4-1106-preview', + 'gpt-4-32k', + 'gpt-4', + 'gpt-3.5-turbo-16k', + 'gpt-3.5-turbo', + 'text-embedding-ada-002', + ] + ] class Config: extra = Extra.allow # Allow extra fields From f3c3a9860af0c5908a357b96e17636dbd061a065 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 13:03:29 -0800 Subject: [PATCH 168/460] (feat) /v1/model/info --- litellm/proxy/proxy_config.yaml | 3 ++- litellm/proxy/proxy_server.py | 41 +++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/litellm/proxy/proxy_config.yaml b/litellm/proxy/proxy_config.yaml index 22ca2f7b9..091e803c1 100644 --- a/litellm/proxy/proxy_config.yaml +++ b/litellm/proxy/proxy_config.yaml @@ -10,7 +10,7 @@ model_list: input_cost_per_token: 0.0.00006 output_cost_per_token: 0.00003 max_tokens: 4096 - base_model: gpt-35-turbo + base_model: gpt-3.5-turbo - model_name: openai-gpt-3.5 litellm_params: @@ -26,6 +26,7 @@ model_list: api_version: "2023-07-01-preview" model_info: mode: embedding + base_model: text-embedding-ada-002 - model_name: text-embedding-ada-002 litellm_params: model: text-embedding-ada-002 diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 23b39415d..e500bcd30 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -1032,6 +1032,47 @@ async def add_new_model(model_params: ModelParams): except Exception as e: raise HTTPException(status_code=500, detail=f"Internal Server Error: {str(e)}") +def get_litellm_model_info(model: dict = {}): + model_info = model.get("model_info", {}) + model_to_lookup = model.get("litellm_params", {}).get("model", None) + try: + if "azure" in model_to_lookup: + model_to_lookup = model_info.get("base_model", None) + litellm_model_info = litellm.get_model_info(model_to_lookup) + return litellm_model_info + except: + # this should not block returning on /model/info + # if litellm does not have info on the model it should return {} + return {} + +#### [BETA] - This is a beta endpoint, format might change based on user feedback https://github.com/BerriAI/litellm/issues/933. If you need a stable endpoint use /model/info +@router.get("/v1/model/info", description="Provides more info about each model in /models, including config.yaml descriptions (except api key and api base)", tags=["model management"], dependencies=[Depends(user_api_key_auth)]) +async def model_info(request: Request): + global llm_model_list, general_settings, user_config_file_path + # Load existing config + with open(f"{user_config_file_path}", "r") as config_file: + config = yaml.safe_load(config_file) + all_models = config['model_list'] + for model in all_models: + # provided model_info in config.yaml + model_info = model.get("model_info", {}) + + # read litellm model_prices_and_context_window.json to get the following: + # input_cost_per_token, output_cost_per_token, max_tokens + litellm_model_info = get_litellm_model_info(model=model) + for k, v in litellm_model_info.items(): + if k not in model_info: + model_info[k] = v + model["model_info"] = model_info + # don't return the api key + model["litellm_params"].pop("api_key", None) + + print_verbose(f"all_models: {all_models}") + return { + "data": all_models + } + + #### [BETA] - This is a beta endpoint, format might change based on user feedback. - https://github.com/BerriAI/litellm/issues/933 @router.get("/model/info", description="Provides more info about each model in /models, including config.yaml descriptions (except api key and api base)", tags=["model management"], dependencies=[Depends(user_api_key_auth)]) async def model_info(request: Request): From cf6ecc03a5743cff2e8ecfc107f07c643bf379b1 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 13:14:26 -0800 Subject: [PATCH 169/460] (fix) linting --- litellm/proxy/proxy_server.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index e500bcd30..f3d3c5fc0 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -1047,7 +1047,7 @@ def get_litellm_model_info(model: dict = {}): #### [BETA] - This is a beta endpoint, format might change based on user feedback https://github.com/BerriAI/litellm/issues/933. If you need a stable endpoint use /model/info @router.get("/v1/model/info", description="Provides more info about each model in /models, including config.yaml descriptions (except api key and api base)", tags=["model management"], dependencies=[Depends(user_api_key_auth)]) -async def model_info(request: Request): +async def model_info_v1(request: Request): global llm_model_list, general_settings, user_config_file_path # Load existing config with open(f"{user_config_file_path}", "r") as config_file: From d962d5d4c0f65e46ecc7323f59053403dc4bd382 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 6 Dec 2023 13:24:49 -0800 Subject: [PATCH 170/460] fix(bedrock.py): adding support for cohere embeddings --- litellm/__init__.py | 2 +- litellm/llms/bedrock.py | 105 +++++++++++++++++++++----------- litellm/proxy/proxy_server.py | 1 + litellm/tests/test_embedding.py | 15 ++++- 4 files changed, 85 insertions(+), 38 deletions(-) diff --git a/litellm/__init__.py b/litellm/__init__.py index 837ca2b01..1ef9b9af2 100644 --- a/litellm/__init__.py +++ b/litellm/__init__.py @@ -339,7 +339,7 @@ cohere_embedding_models: List = [ "embed-english-light-v2.0", "embed-multilingual-v2.0", ] -bedrock_embedding_models: List = ["amazon.titan-embed-text-v1"] +bedrock_embedding_models: List = ["amazon.titan-embed-text-v1", "cohere.embed-english-v3", "cohere.embed-multilingual-v3"] all_embedding_models = open_ai_embedding_models + cohere_embedding_models + bedrock_embedding_models diff --git a/litellm/llms/bedrock.py b/litellm/llms/bedrock.py index 30aa3e6ce..2559027a0 100644 --- a/litellm/llms/bedrock.py +++ b/litellm/llms/bedrock.py @@ -2,7 +2,7 @@ import json, copy, types import os from enum import Enum import time -from typing import Callable, Optional +from typing import Callable, Optional, Any import litellm from litellm.utils import ModelResponse, get_secret, Usage from .prompt_templates.factory import prompt_factory, custom_prompt @@ -205,15 +205,25 @@ class AmazonLlamaConfig(): def init_bedrock_client( region_name = None, - aws_access_key_id = None, - aws_secret_access_key = None, - aws_region_name=None, - aws_bedrock_runtime_endpoint=None, + aws_access_key_id: Optional[str] = None, + aws_secret_access_key: Optional[str] = None, + aws_region_name: Optional[str] =None, + aws_bedrock_runtime_endpoint: Optional[str]=None, ): - # check for custom AWS_REGION_NAME and use it if not passed to init_bedrock_client - litellm_aws_region_name = get_secret("AWS_REGION_NAME") - standard_aws_region_name = get_secret("AWS_REGION") + litellm_aws_region_name = get_secret("AWS_REGION_NAME", None) + standard_aws_region_name = get_secret("AWS_REGION", None) + + ## CHECK IS 'os.environ/' passed in + # Define the list of parameters to check + params_to_check = [aws_access_key_id, aws_secret_access_key, aws_region_name, aws_bedrock_runtime_endpoint] + + # Iterate over parameters and update if needed + for i, param in enumerate(params_to_check): + if param and param.startswith('os.environ/'): + params_to_check[i] = get_secret(param) + # Assign updated values back to parameters + aws_access_key_id, aws_secret_access_key, aws_region_name, aws_bedrock_runtime_endpoint = params_to_check if region_name: pass elif aws_region_name: @@ -533,37 +543,56 @@ def completion( def _embedding_func_single( model: str, input: str, + client: Any, optional_params=None, encoding=None, + logging_obj=None, ): # logic for parsing in - calling - parsing out model embedding calls - # pop aws_secret_access_key, aws_access_key_id, aws_region_name from kwargs, since completion calls fail with them - aws_secret_access_key = optional_params.pop("aws_secret_access_key", None) - aws_access_key_id = optional_params.pop("aws_access_key_id", None) - aws_region_name = optional_params.pop("aws_region_name", None) - - # use passed in BedrockRuntime.Client if provided, otherwise create a new one - client = optional_params.pop( - "aws_bedrock_client", - # only pass variables that are not None - init_bedrock_client( - aws_access_key_id=aws_access_key_id, - aws_secret_access_key=aws_secret_access_key, - aws_region_name=aws_region_name, - ), + ## FORMAT EMBEDDING INPUT ## + provider = model.split(".")[0] + inference_params = copy.deepcopy(optional_params) + if provider == "amazon": + input = input.replace(os.linesep, " ") + data = {"inputText": input, **inference_params} + # data = json.dumps(data) + elif provider == "cohere": + inference_params["input_type"] = inference_params.get("input_type", "search_document") # aws bedrock example default - https://us-east-1.console.aws.amazon.com/bedrock/home?region=us-east-1#/providers?model=cohere.embed-english-v3 + data = {"texts": [input], **inference_params} + body = json.dumps(data).encode("utf-8") + ## LOGGING + request_str = f""" + response = client.invoke_model( + body={body}, + modelId={model}, + accept="*/*", + contentType="application/json", + )""" # type: ignore + logging_obj.pre_call( + input=input, + api_key="", # boto3 is used for init. + additional_args={"complete_input_dict": {"model": model, + "texts": input}, "request_str": request_str}, ) - - input = input.replace(os.linesep, " ") - body = json.dumps({"inputText": input}) try: response = client.invoke_model( body=body, - modelId=model, - accept="application/json", + modelId="cohere.embed-multilingual-v3", + accept="*/*", contentType="application/json", ) response_body = json.loads(response.get("body").read()) - return response_body.get("embedding") + ## LOGGING + logging_obj.post_call( + input=input, + api_key="", + additional_args={"complete_input_dict": data}, + original_response=response_body, + ) + if provider == "cohere": + return response_body.get("embeddings") + elif provider == "amazon": + return response_body.get("embedding") except Exception as e: raise BedrockError(message=f"Embedding Error with model {model}: {e}", status_code=500) @@ -576,17 +605,21 @@ def embedding( optional_params=None, encoding=None, ): + ### BOTO3 INIT ### + # pop aws_secret_access_key, aws_access_key_id, aws_region_name from kwargs, since completion calls fail with them + aws_secret_access_key = optional_params.pop("aws_secret_access_key", None) + aws_access_key_id = optional_params.pop("aws_access_key_id", None) + aws_region_name = optional_params.pop("aws_region_name", None) - ## LOGGING - logging_obj.pre_call( - input=input, - api_key=api_key, - additional_args={"complete_input_dict": {"model": model, - "texts": input}}, - ) + # use passed in BedrockRuntime.Client if provided, otherwise create a new one + client = init_bedrock_client( + aws_access_key_id=aws_access_key_id, + aws_secret_access_key=aws_secret_access_key, + aws_region_name=aws_region_name, + ) ## Embedding Call - embeddings = [_embedding_func_single(model, i, optional_params) for i in input] + embeddings = [_embedding_func_single(model, i, optional_params=optional_params, client=client, logging_obj=logging_obj) for i in input] # [TODO]: make these parallel calls ## Populate OpenAI compliant dictionary diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index f3d3c5fc0..2d32df1cc 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -843,6 +843,7 @@ async def chat_completion(request: Request, model: Optional[str] = None, user_ap data["user"] = user_api_key_dict.user_id if "metadata" in data: + print(f'received metadata: {data["metadata"]}') data["metadata"]["user_api_key"] = user_api_key_dict.api_key data["metadata"]["headers"] = request.headers else: diff --git a/litellm/tests/test_embedding.py b/litellm/tests/test_embedding.py index f958d6cfc..5f1043728 100644 --- a/litellm/tests/test_embedding.py +++ b/litellm/tests/test_embedding.py @@ -151,7 +151,7 @@ def test_cohere_embedding3(): # test_cohere_embedding3() -def test_bedrock_embedding(): +def test_bedrock_embedding_titan(): try: response = embedding( model="amazon.titan-embed-text-v1", input=["good morning from litellm, attempting to embed data", @@ -162,6 +162,19 @@ def test_bedrock_embedding(): pytest.fail(f"Error occurred: {e}") # test_bedrock_embedding() +def test_bedrock_embedding_cohere(): + try: + # litellm.set_verbose=True + response = embedding( + model="cohere.embed-multilingual-v3", input=["good morning from litellm, attempting to embed data", "lets test a second string for good measure"], + aws_region_name="os.environ/AWS_REGION_NAME_2" + ) + # print(f"response:", response) + except Exception as e: + pytest.fail(f"Error occurred: {e}") + +test_bedrock_embedding_cohere() + # comment out hf tests - since hf endpoints are unstable def test_hf_embedding(): try: From b24c9b4cbf5e2ff546104d708b27a6831953b9a8 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 6 Dec 2023 13:27:40 -0800 Subject: [PATCH 171/460] refactor: fix linting --- litellm/llms/bedrock.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/llms/bedrock.py b/litellm/llms/bedrock.py index 2559027a0..586eaf4d8 100644 --- a/litellm/llms/bedrock.py +++ b/litellm/llms/bedrock.py @@ -558,7 +558,7 @@ def _embedding_func_single( # data = json.dumps(data) elif provider == "cohere": inference_params["input_type"] = inference_params.get("input_type", "search_document") # aws bedrock example default - https://us-east-1.console.aws.amazon.com/bedrock/home?region=us-east-1#/providers?model=cohere.embed-english-v3 - data = {"texts": [input], **inference_params} + data = {"texts": [input], **inference_params} # type: ignore body = json.dumps(data).encode("utf-8") ## LOGGING request_str = f""" From 368934d1602627790d895e2fa972202420fab35f Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 13:51:22 -0800 Subject: [PATCH 172/460] (feat) proxy: use async_callback function --- litellm/proxy/custom_callbacks.py | 36 +++++++++++++++++++++++++++++++ litellm/proxy/proxy_config.yaml | 4 ++++ litellm/proxy/proxy_server.py | 12 +++++++++++ 3 files changed, 52 insertions(+) diff --git a/litellm/proxy/custom_callbacks.py b/litellm/proxy/custom_callbacks.py index a991ff1d9..f6e01f807 100644 --- a/litellm/proxy/custom_callbacks.py +++ b/litellm/proxy/custom_callbacks.py @@ -51,3 +51,39 @@ class MyCustomHandler(CustomLogger): proxy_handler_instance = MyCustomHandler() # need to set litellm.callbacks = [customHandler] # on the proxy + +## setting only one function +async def async_on_succes_logger(kwargs, response_obj, start_time, end_time): + print(f"On Async Success!") + # log: key, user, model, prompt, response, tokens, cost + print("\nOn Success") + ### Access kwargs passed to litellm.completion() + model = kwargs.get("model", None) + messages = kwargs.get("messages", None) + user = kwargs.get("user", None) + + #### Access litellm_params passed to litellm.completion(), example access `metadata` + litellm_params = kwargs.get("litellm_params", {}) + metadata = litellm_params.get("metadata", {}) # headers passed to LiteLLM proxy, can be found here + ################################################# + + ##### Calculate cost using litellm.completion_cost() ####################### + cost = litellm.completion_cost(completion_response=response_obj) + response = response_obj + # tokens used in response + usage = response_obj["usage"] + + print( + f""" + Model: {model}, + Messages: {messages}, + User: {user}, + Usage: {usage}, + Cost: {cost}, + Response: {response} + Proxy Metadata: {metadata} + """ + ) + return + +# litellm.success_callback = [async_on_succes_logger] \ No newline at end of file diff --git a/litellm/proxy/proxy_config.yaml b/litellm/proxy/proxy_config.yaml index 091e803c1..ecd0c535f 100644 --- a/litellm/proxy/proxy_config.yaml +++ b/litellm/proxy/proxy_config.yaml @@ -42,8 +42,12 @@ model_list: litellm_settings: + # setting callback class # callbacks: custom_callbacks.proxy_handler_instance # sets litellm.callbacks = [proxy_handler_instance] + # setting a callback function + success_callback: [custom_callbacks.async_on_succes_logger] + general_settings: # otel: True # OpenTelemetry Logger # master_key: sk-1234 # [OPTIONAL] Only use this if you to require all calls to contain this key (Authorization: Bearer sk-1234) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 2d32df1cc..62286a427 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -498,6 +498,18 @@ def load_router_config(router: Optional[litellm.Router], config_file_path: str): ) elif key == "callbacks": litellm.callbacks = [get_instance_fn(value=value)] + elif key == "success_callback": + litellm.success_callback = [] + + # intialize success callbacks + for callback in value: + # user passed custom_callbacks.async_on_succes_logger. They need us to import a function + if "." in callback: + litellm.success_callback.append(get_instance_fn(value=callback)) + # these are litellm callbacks - "langfuse", "sentry", "wandb" + else: + litellm.success_callback.append(callback) + print_verbose(f"{blue_color_code} Initialized Success Callbacks - {litellm.success_callback} {reset_color_code}") else: setattr(litellm, key, value) From 346551da2930553087aba575cb53becbf2817d2e Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 6 Dec 2023 14:02:44 -0800 Subject: [PATCH 173/460] fix(proxy_server.py): allow worker config to just be the config filepath --- litellm/proxy/proxy_server.py | 44 ++++++++++++-------- litellm/tests/test_proxy_gunicorn.py | 61 ++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+), 18 deletions(-) create mode 100644 litellm/tests/test_proxy_gunicorn.py diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 62286a427..9d2066f2e 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -598,22 +598,22 @@ def save_worker_config(**data): os.environ["WORKER_CONFIG"] = json.dumps(data) def initialize( - model, - alias, - api_base, - api_version, - debug, - temperature, - max_tokens, - request_timeout, - max_budget, - telemetry, - drop_params, - add_function_to_prompt, - headers, - save, - config, - use_queue + model=None, + alias=None, + api_base=None, + api_version=None, + debug=False, + temperature=None, + max_tokens=None, + request_timeout=600, + max_budget=None, + telemetry=False, + drop_params=True, + add_function_to_prompt=True, + headers=None, + save=False, + use_queue=False, + config=None, ): global user_model, user_api_base, user_debug, user_max_tokens, user_request_timeout, user_temperature, user_telemetry, user_headers, experimental, llm_model_list, llm_router, general_settings, master_key, user_custom_auth generate_feedback_box() @@ -737,9 +737,17 @@ def litellm_completion(*args, **kwargs): async def startup_event(): global prisma_client, master_key import json - worker_config = json.loads(os.getenv("WORKER_CONFIG")) + + worker_config = litellm.get_secret("WORKER_CONFIG") + print(f"worker_config: {worker_config}") print_verbose(f"worker_config: {worker_config}") - initialize(**worker_config) + # check if it's a valid file path + if os.path.isfile(worker_config): + initialize(config=worker_config) + else: + # if not, assume it's a json string + worker_config = json.loads(os.getenv("WORKER_CONFIG")) + initialize(**worker_config) print_verbose(f"prisma client - {prisma_client}") if prisma_client: await prisma_client.connect() diff --git a/litellm/tests/test_proxy_gunicorn.py b/litellm/tests/test_proxy_gunicorn.py new file mode 100644 index 000000000..4d96ac259 --- /dev/null +++ b/litellm/tests/test_proxy_gunicorn.py @@ -0,0 +1,61 @@ +# #### What this tests #### +# # Allow the user to easily run the local proxy server with Gunicorn +## LOCAL TESTING ONLY +# import sys, os, subprocess +# import traceback +# from dotenv import load_dotenv + +# load_dotenv() +# import os, io + +# # this file is to test litellm/proxy + +# sys.path.insert( +# 0, os.path.abspath("../..") +# ) # Adds the parent directory to the system path +# import pytest +# import litellm + +# ### LOCAL Proxy Server INIT ### +# from litellm.proxy.proxy_server import save_worker_config # Replace with the actual module where your FastAPI router is defined +# filepath = os.path.dirname(os.path.abspath(__file__)) +# config_fp = f"{filepath}/test_configs/test_config_custom_auth.yaml" +# def get_openai_info(): +# return { +# "api_key": os.getenv("AZURE_API_KEY"), +# "api_base": os.getenv("AZURE_API_BASE"), +# } + +# def run_server(host="0.0.0.0",port=8008,num_workers=None): +# if num_workers is None: +# # Set it to min(8,cpu_count()) +# import multiprocessing +# num_workers = min(4,multiprocessing.cpu_count()) + +# ### LOAD KEYS ### + +# # Load the Azure keys. For now get them from openai-usage +# azure_info = get_openai_info() +# print(f"Azure info:{azure_info}") +# os.environ["AZURE_API_KEY"] = azure_info['api_key'] +# os.environ["AZURE_API_BASE"] = azure_info['api_base'] +# os.environ["AZURE_API_VERSION"] = "2023-09-01-preview" + +# ### SAVE CONFIG ### + +# os.environ["WORKER_CONFIG"] = config_fp + +# # In order for the app to behave well with signals, run it with gunicorn +# # The first argument must be the "name of the command run" +# cmd = f"gunicorn litellm.proxy.proxy_server:app --workers {num_workers} --worker-class uvicorn.workers.UvicornWorker --bind {host}:{port}" +# cmd = cmd.split() +# print(f"Running command: {cmd}") +# import sys +# sys.stdout.flush() +# sys.stderr.flush() + +# # Make sure to propage env variables +# subprocess.run(cmd) # This line actually starts Gunicorn + +# if __name__ == "__main__": +# run_server() \ No newline at end of file From 0598ab9b63780fd0838346e0252c1ebf292e8906 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 14:08:22 -0800 Subject: [PATCH 174/460] (fix) proxy /model/new writing to config --- litellm/proxy/proxy_server.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 9d2066f2e..ff2f4bb17 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -1027,12 +1027,15 @@ async def info_key_fn(key: str = fastapi.Query(..., description="Key in the requ async def add_new_model(model_params: ModelParams): global llm_router, llm_model_list, general_settings, user_config_file_path try: + print("User config path: ", user_config_file_path) # Load existing config if os.path.exists(f"{user_config_file_path}"): with open(f"{user_config_file_path}", "r") as config_file: config = yaml.safe_load(config_file) else: config = {"model_list": []} + + print("Loaded config: ", config) # Add the new model to the config config['model_list'].append({ 'model_name': model_params.model_name, @@ -1045,7 +1048,7 @@ async def add_new_model(model_params: ModelParams): yaml.dump(config, config_file, default_flow_style=False) # update Router - llm_router, llm_model_list, general_settings = load_router_config(router=llm_router, config_file_path=config) + llm_router, llm_model_list, general_settings = load_router_config(router=llm_router, config_file_path=user_config_file_path) return {"message": "Model added successfully"} From e1230627d0dda8023c4f277656395f8c9f1a0e01 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 14:08:43 -0800 Subject: [PATCH 175/460] (fix) print statements --- litellm/proxy/proxy_server.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index ff2f4bb17..3d307788f 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -1027,7 +1027,7 @@ async def info_key_fn(key: str = fastapi.Query(..., description="Key in the requ async def add_new_model(model_params: ModelParams): global llm_router, llm_model_list, general_settings, user_config_file_path try: - print("User config path: ", user_config_file_path) + print_verbose("User config path: ", user_config_file_path) # Load existing config if os.path.exists(f"{user_config_file_path}"): with open(f"{user_config_file_path}", "r") as config_file: @@ -1035,7 +1035,7 @@ async def add_new_model(model_params: ModelParams): else: config = {"model_list": []} - print("Loaded config: ", config) + print_verbose("Loaded config: ", config) # Add the new model to the config config['model_list'].append({ 'model_name': model_params.model_name, From be15cf20b90c11a686b612f2dc79732737a58a05 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 14:14:20 -0800 Subject: [PATCH 176/460] (chore) print verbose --- litellm/proxy/proxy_server.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 3d307788f..a59b80fd1 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -1027,7 +1027,7 @@ async def info_key_fn(key: str = fastapi.Query(..., description="Key in the requ async def add_new_model(model_params: ModelParams): global llm_router, llm_model_list, general_settings, user_config_file_path try: - print_verbose("User config path: ", user_config_file_path) + print_verbose(f"User config path: {user_config_file_path}") # Load existing config if os.path.exists(f"{user_config_file_path}"): with open(f"{user_config_file_path}", "r") as config_file: @@ -1035,7 +1035,7 @@ async def add_new_model(model_params: ModelParams): else: config = {"model_list": []} - print_verbose("Loaded config: ", config) + print_verbose(f"Loaded config: {config}") # Add the new model to the config config['model_list'].append({ 'model_name': model_params.model_name, From f1c1ec8523b4b2c984509252ea243860874df44b Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 6 Dec 2023 14:15:53 -0800 Subject: [PATCH 177/460] fix(bedrock.py): fix embeddings call --- litellm/llms/bedrock.py | 4 ++-- litellm/tests/test_embedding.py | 5 +++-- litellm/tests/test_proxy_gunicorn.py | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/litellm/llms/bedrock.py b/litellm/llms/bedrock.py index 586eaf4d8..8b05f0153 100644 --- a/litellm/llms/bedrock.py +++ b/litellm/llms/bedrock.py @@ -552,8 +552,8 @@ def _embedding_func_single( ## FORMAT EMBEDDING INPUT ## provider = model.split(".")[0] inference_params = copy.deepcopy(optional_params) + input = input.replace(os.linesep, " ") if provider == "amazon": - input = input.replace(os.linesep, " ") data = {"inputText": input, **inference_params} # data = json.dumps(data) elif provider == "cohere": @@ -577,7 +577,7 @@ def _embedding_func_single( try: response = client.invoke_model( body=body, - modelId="cohere.embed-multilingual-v3", + modelId=model, accept="*/*", contentType="application/json", ) diff --git a/litellm/tests/test_embedding.py b/litellm/tests/test_embedding.py index 5f1043728..bca0887ae 100644 --- a/litellm/tests/test_embedding.py +++ b/litellm/tests/test_embedding.py @@ -153,6 +153,7 @@ def test_cohere_embedding3(): def test_bedrock_embedding_titan(): try: + litellm.set_verbose=True response = embedding( model="amazon.titan-embed-text-v1", input=["good morning from litellm, attempting to embed data", "lets test a second string for good measure"] @@ -160,7 +161,7 @@ def test_bedrock_embedding_titan(): print(f"response:", response) except Exception as e: pytest.fail(f"Error occurred: {e}") -# test_bedrock_embedding() +test_bedrock_embedding_titan() def test_bedrock_embedding_cohere(): try: @@ -173,7 +174,7 @@ def test_bedrock_embedding_cohere(): except Exception as e: pytest.fail(f"Error occurred: {e}") -test_bedrock_embedding_cohere() +# test_bedrock_embedding_cohere() # comment out hf tests - since hf endpoints are unstable def test_hf_embedding(): diff --git a/litellm/tests/test_proxy_gunicorn.py b/litellm/tests/test_proxy_gunicorn.py index 4d96ac259..9afd424d4 100644 --- a/litellm/tests/test_proxy_gunicorn.py +++ b/litellm/tests/test_proxy_gunicorn.py @@ -1,6 +1,6 @@ # #### What this tests #### # # Allow the user to easily run the local proxy server with Gunicorn -## LOCAL TESTING ONLY +# # LOCAL TESTING ONLY # import sys, os, subprocess # import traceback # from dotenv import load_dotenv From 3b17fd3821b15368bad88ee3b798f997a4273aaa Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 14:40:35 -0800 Subject: [PATCH 178/460] (feat) proxy - async_on_fail_logger --- litellm/proxy/custom_callbacks.py | 45 ++++++++++++++++++++++++++++--- 1 file changed, 41 insertions(+), 4 deletions(-) diff --git a/litellm/proxy/custom_callbacks.py b/litellm/proxy/custom_callbacks.py index f6e01f807..9ad19822f 100644 --- a/litellm/proxy/custom_callbacks.py +++ b/litellm/proxy/custom_callbacks.py @@ -57,17 +57,16 @@ async def async_on_succes_logger(kwargs, response_obj, start_time, end_time): print(f"On Async Success!") # log: key, user, model, prompt, response, tokens, cost print("\nOn Success") - ### Access kwargs passed to litellm.completion() + # Access kwargs passed to litellm.completion() model = kwargs.get("model", None) messages = kwargs.get("messages", None) user = kwargs.get("user", None) - #### Access litellm_params passed to litellm.completion(), example access `metadata` + # Access litellm_params passed to litellm.completion(), example access `metadata` litellm_params = kwargs.get("litellm_params", {}) metadata = litellm_params.get("metadata", {}) # headers passed to LiteLLM proxy, can be found here - ################################################# - ##### Calculate cost using litellm.completion_cost() ####################### + # Calculate cost using litellm.completion_cost() cost = litellm.completion_cost(completion_response=response_obj) response = response_obj # tokens used in response @@ -86,4 +85,42 @@ async def async_on_succes_logger(kwargs, response_obj, start_time, end_time): ) return + +async def async_on_fail_logger(kwargs, response_obj, start_time, end_time): + print(f"On Async Failure!") + print(kwargs) + + # Access kwargs passed to litellm.completion() + model = kwargs.get("model", None) + messages = kwargs.get("messages", None) + user = kwargs.get("user", None) + + # Access litellm_params passed to litellm.completion(), example access `metadata` + litellm_params = kwargs.get("litellm_params", {}) + metadata = litellm_params.get("metadata", {}) # headers passed to LiteLLM proxy, can be found here + + # Acess Exceptions & Traceback + exception_event = kwargs.get("exception", None) + traceback_event = kwargs.get("traceback_exception", None) + + # Calculate cost using litellm.completion_cost() + cost = litellm.completion_cost(completion_response=response_obj) + response = response_obj + # tokens used in response + usage = response_obj.get("usage", {}) + + print( + f""" + Model: {model}, + Messages: {messages}, + User: {user}, + Usage: {usage}, + Cost: {cost}, + Response: {response} + Proxy Metadata: {metadata} + Exception: {exception_event} + Traceback: {traceback_event} + """ + ) + # litellm.success_callback = [async_on_succes_logger] \ No newline at end of file From b3f039627ea132f4bd19040f4b9c7730501adfbe Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 14:41:40 -0800 Subject: [PATCH 179/460] (feat) litellm - add _async_failure_callback --- litellm/__init__.py | 1 + litellm/integrations/custom_logger.py | 20 +++++++++++++ litellm/utils.py | 42 +++++++++++++++++++++++++++ 3 files changed, 63 insertions(+) diff --git a/litellm/__init__.py b/litellm/__init__.py index 1ef9b9af2..9e4a859c7 100644 --- a/litellm/__init__.py +++ b/litellm/__init__.py @@ -10,6 +10,7 @@ success_callback: List[Union[str, Callable]] = [] failure_callback: List[Union[str, Callable]] = [] callbacks: List[Callable] = [] _async_success_callback: List[Callable] = [] # internal variable - async custom callbacks are routed here. +_async_failure_callback: List[Callable] = [] # internal variable - async custom callbacks are routed here. pre_call_rules: List[Callable] = [] post_call_rules: List[Callable] = [] email: Optional[ diff --git a/litellm/integrations/custom_logger.py b/litellm/integrations/custom_logger.py index e502439a9..bcfef0fc2 100644 --- a/litellm/integrations/custom_logger.py +++ b/litellm/integrations/custom_logger.py @@ -81,3 +81,23 @@ class CustomLogger: # https://docs.litellm.ai/docs/observability/custom_callback # traceback.print_exc() print_verbose(f"Custom Logger Error - {traceback.format_exc()}") pass + + async def async_log_failure_event(self, kwargs, response_obj, start_time, end_time, print_verbose, callback_func): + # Method definition + try: + kwargs["log_event_type"] = "post_api_call" + await callback_func( + kwargs, # kwargs to func + response_obj, + start_time, + end_time, + ) + print_verbose( + f"Custom Logger - final response object: {response_obj}" + ) + except: + # traceback.print_exc() + print_verbose(f"Custom Logger Error - {traceback.format_exc()}") + pass + + diff --git a/litellm/utils.py b/litellm/utils.py index 9e93f6b64..08c106668 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -1113,6 +1113,36 @@ class Logging: f"LiteLLM.LoggingError: [Non-Blocking] Exception occurred while failure logging {traceback.format_exc()}" ) pass + async def async_failure_handler(self, exception, traceback_exception, start_time=None, end_time=None): + """ + Implementing async callbacks, to handle asyncio event loop issues when custom integrations need to use async functions. + """ + # on some exceptions, model_call_details is not always initialized, this ensures that we still log those exceptions + if not hasattr(self, "model_call_details"): + self.model_call_details = {} + + self.model_call_details["log_event_type"] = "failed_api_call" + self.model_call_details["exception"] = exception + self.model_call_details["traceback_exception"] = traceback_exception + self.model_call_details["end_time"] = end_time + result = {} # result sent to all loggers, init this to None incase it's not created + + for callback in litellm._async_failure_callback: + try: + if callable(callback): # custom logger functions + await customLogger.async_log_failure_event( + kwargs=self.model_call_details, + response_obj=result, + start_time=start_time, + end_time=end_time, + print_verbose=print_verbose, + callback_func=callback + ) + except: + print_verbose( + f"LiteLLM.LoggingError: [Non-Blocking] Exception occurred while success logging {traceback.format_exc()}" + ) + def exception_logging( @@ -1236,6 +1266,17 @@ def client(original_function): # Pop the async items from success_callback in reverse order to avoid index issues for index in reversed(removed_async_items): litellm.success_callback.pop(index) + + if len(litellm.failure_callback) > 0: + removed_async_items = [] + for index, callback in enumerate(litellm.failure_callback): + if inspect.iscoroutinefunction(callback): + litellm._async_failure_callback.append(callback) + removed_async_items.append(index) + + # Pop the async items from success_callback in reverse order to avoid index issues + for index in reversed(removed_async_items): + litellm.success_callback.pop(index) if add_breadcrumb: add_breadcrumb( category="litellm.llm_call", @@ -1513,6 +1554,7 @@ def client(original_function): end_time = datetime.datetime.now() if logging_obj: logging_obj.failure_handler(e, traceback_exception, start_time, end_time) # DO NOT MAKE THREADED - router retry fallback relies on this! + asyncio.create_task(logging_obj.async_failure_handler(e, traceback_exception, start_time, end_time)) raise e is_coroutine = inspect.iscoroutinefunction(original_function) From 44bf51601a59ab6248f77224dc268b9cc6ebbc61 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 14:43:45 -0800 Subject: [PATCH 180/460] (feat) proxy - custom on failure callback --- litellm/proxy/custom_callbacks.py | 1 - litellm/proxy/proxy_config.yaml | 3 ++- litellm/proxy/proxy_server.py | 12 ++++++++++++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/litellm/proxy/custom_callbacks.py b/litellm/proxy/custom_callbacks.py index 9ad19822f..0114f40b0 100644 --- a/litellm/proxy/custom_callbacks.py +++ b/litellm/proxy/custom_callbacks.py @@ -88,7 +88,6 @@ async def async_on_succes_logger(kwargs, response_obj, start_time, end_time): async def async_on_fail_logger(kwargs, response_obj, start_time, end_time): print(f"On Async Failure!") - print(kwargs) # Access kwargs passed to litellm.completion() model = kwargs.get("model", None) diff --git a/litellm/proxy/proxy_config.yaml b/litellm/proxy/proxy_config.yaml index ecd0c535f..4ebc3060e 100644 --- a/litellm/proxy/proxy_config.yaml +++ b/litellm/proxy/proxy_config.yaml @@ -45,8 +45,9 @@ litellm_settings: # setting callback class # callbacks: custom_callbacks.proxy_handler_instance # sets litellm.callbacks = [proxy_handler_instance] - # setting a callback function + # setting a callback function for success and failure success_callback: [custom_callbacks.async_on_succes_logger] + failure_callback: [custom_callbacks.async_on_fail_logger] general_settings: # otel: True # OpenTelemetry Logger diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index a59b80fd1..54131ee27 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -510,6 +510,18 @@ def load_router_config(router: Optional[litellm.Router], config_file_path: str): else: litellm.success_callback.append(callback) print_verbose(f"{blue_color_code} Initialized Success Callbacks - {litellm.success_callback} {reset_color_code}") + elif key == "failure_callback": + litellm.failure_callback = [] + + # intialize success callbacks + for callback in value: + # user passed custom_callbacks.async_on_succes_logger. They need us to import a function + if "." in callback: + litellm.failure_callback.append(get_instance_fn(value=callback)) + # these are litellm callbacks - "langfuse", "sentry", "wandb" + else: + litellm.failure_callback.append(callback) + print_verbose(f"{blue_color_code} Initialized Success Callbacks - {litellm.failure_callback} {reset_color_code}") else: setattr(litellm, key, value) From 0ea6241d3e6e1d1d1507df81e28136ba1dc4f895 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 15:00:16 -0800 Subject: [PATCH 181/460] (docs) use async callback functions --- docs/my-website/docs/proxy/logging.md | 148 +++++++++++++++++++++++++- 1 file changed, 147 insertions(+), 1 deletion(-) diff --git a/docs/my-website/docs/proxy/logging.md b/docs/my-website/docs/proxy/logging.md index 95f6a83a9..f9543d1f5 100644 --- a/docs/my-website/docs/proxy/logging.md +++ b/docs/my-website/docs/proxy/logging.md @@ -1,7 +1,7 @@ # Logging - Custom Callbacks, OpenTelemetry, Langfuse Log Proxy Input, Output, Exceptions using Custom Callbacks, Langfuse, OpenTelemetry -## Custom Callbacks +## Custom Callback Class Use this when you want to run custom callbacks in `python` ### Step 1 - Create your custom `litellm` callback class @@ -120,6 +120,152 @@ On Success Proxy Metadata: {'user_api_key': None, 'headers': Headers({'host': '0.0.0.0:8000', 'user-agent': 'curl/7.88.1', 'accept': '*/*', 'authorization': 'Bearer sk-1234', 'content-length': '199', 'content-type': 'application/x-www-form-urlencoded'}), 'model_group': 'gpt-3.5-turbo', 'deployment': 'gpt-3.5-turbo-ModelID-gpt-3.5-turbo'} ``` +## Async Custom Callback Functions + +Set custom async functions for `litellm.success_callback` and `litellm.failure_callback`. + +### Step 1 Define Custom Callback functions + +Define your custom callback functions in a python file. + +We create a file called `custom_callbacks.py` and define `async_on_succes_logger()` and `async_on_fail_logger` + +Example on success callback +```python +async def async_on_succes_logger(kwargs, response_obj, start_time, end_time): + print(f"On Async Success!") + # log: key, user, model, prompt, response, tokens, cost + print("\nOn Success") + # Access kwargs passed to litellm.completion() + model = kwargs.get("model", None) + messages = kwargs.get("messages", None) + user = kwargs.get("user", None) + + # Access litellm_params passed to litellm.completion(), example access `metadata` + litellm_params = kwargs.get("litellm_params", {}) + metadata = litellm_params.get("metadata", {}) # headers passed to LiteLLM proxy, can be found here + + # Calculate cost using litellm.completion_cost() + cost = litellm.completion_cost(completion_response=response_obj) + response = response_obj + # tokens used in response + usage = response_obj["usage"] + + print( + f""" + Model: {model}, + Messages: {messages}, + User: {user}, + Usage: {usage}, + Cost: {cost}, + Response: {response} + Proxy Metadata: {metadata} + """ + ) + return +``` + + +Example on fail callback + +```python +async def async_on_fail_logger(kwargs, response_obj, start_time, end_time): + print(f"On Async Failure!") + + # Access kwargs passed to litellm.completion() + model = kwargs.get("model", None) + messages = kwargs.get("messages", None) + user = kwargs.get("user", None) + + # Access litellm_params passed to litellm.completion(), example access `metadata` + litellm_params = kwargs.get("litellm_params", {}) + metadata = litellm_params.get("metadata", {}) # headers passed to LiteLLM proxy, can be found here + + # Acess Exceptions & Traceback + exception_event = kwargs.get("exception", None) + traceback_event = kwargs.get("traceback_exception", None) + + # Calculate cost using litellm.completion_cost() + cost = litellm.completion_cost(completion_response=response_obj) + response = response_obj + # tokens used in response + usage = response_obj.get("usage", {}) + + print( + f""" + Model: {model}, + Messages: {messages}, + User: {user}, + Usage: {usage}, + Cost: {cost}, + Response: {response} + Proxy Metadata: {metadata} + Exception: {exception_event} + Traceback: {traceback_event} + """ + ) +``` + +### Step 2 - Pass your custom callback functions in `config.yaml` +We pass the custom callback functions defined in **Step1** to the config.yaml. +Set `success_callback` and `failure_callback` to `python_filename.function_name` + +In the config below, we pass +- python_filename: `custom_callbacks.py` +- function_name: `async_on_succes_logger` and `async_on_fail_logger` This is defined in Step 1 + +`success_callback: [custom_callbacks.async_on_succes_logger]` + +`failure_callback: [custom_callbacks.async_on_fail_logger]` + +```yaml +model_list: + - model_name: gpt-3.5-turbo + litellm_params: + model: gpt-3.5-turbo + +litellm_settings: + # setting a callback function for success and failure + success_callback: [custom_callbacks.async_on_succes_logger] + failure_callback: [custom_callbacks.async_on_fail_logger] + +``` + +### Step 3 - Start proxy + test request +```shell +litellm --config proxy_config.yaml +``` + +```shell +curl --location 'http://0.0.0.0:8000/chat/completions' \ + --header 'Authorization: Bearer sk-1234' \ + --data ' { + "model": "gpt-3.5-turbo", + "messages": [ + { + "role": "user", + "content": "good morning good sir" + } + ], + "user": "ishaan-app", + "temperature": 0.2 + }' +``` + +#### Resulting Log on Proxy +```shell +On Success + Model: gpt-3.5-turbo, + Messages: [{'role': 'user', 'content': 'good morning good sir'}], + User: ishaan-app, + Usage: {'completion_tokens': 10, 'prompt_tokens': 11, 'total_tokens': 21}, + Cost: 3.65e-05, + Response: {'id': 'chatcmpl-8S8avKJ1aVBg941y5xzGMSKrYCMvN', 'choices': [{'finish_reason': 'stop', 'index': 0, 'message': {'content': 'Good morning! How can I assist you today?', 'role': 'assistant'}}], 'created': 1701716913, 'model': 'gpt-3.5-turbo-0613', 'object': 'chat.completion', 'system_fingerprint': None, 'usage': {'completion_tokens': 10, 'prompt_tokens': 11, 'total_tokens': 21}} + Proxy Metadata: {'user_api_key': None, 'headers': Headers({'host': '0.0.0.0:8000', 'user-agent': 'curl/7.88.1', 'accept': '*/*', 'authorization': 'Bearer sk-1234', 'content-length': '199', 'content-type': 'application/x-www-form-urlencoded'}), 'model_group': 'gpt-3.5-turbo', 'deployment': 'gpt-3.5-turbo-ModelID-gpt-3.5-turbo'} +``` + + + ## OpenTelemetry, ElasticSearch ### Step 1 Start OpenTelemetry Collecter Docker Container From cf1df8204e6083214b1ec049e38680cc11bf2327 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 15:04:24 -0800 Subject: [PATCH 182/460] (docs) proxy - custom async func --- docs/my-website/docs/proxy/logging.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/my-website/docs/proxy/logging.md b/docs/my-website/docs/proxy/logging.md index f9543d1f5..f28a9cf8f 100644 --- a/docs/my-website/docs/proxy/logging.md +++ b/docs/my-website/docs/proxy/logging.md @@ -121,8 +121,7 @@ On Success ``` ## Async Custom Callback Functions - -Set custom async functions for `litellm.success_callback` and `litellm.failure_callback`. +Use this if you just want to use a function as a custom callback with the proxy. Set custom async functions for `litellm.success_callback` and `litellm.failure_callback`. ### Step 1 Define Custom Callback functions From ad922b205b7522d5a1bcde5a1771de66e73b39f3 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 6 Dec 2023 15:10:56 -0800 Subject: [PATCH 183/460] fix(proxy_server.py): enable rate limiting concurrent user requests --- litellm/proxy/{types.py => _types.py} | 0 litellm/proxy/proxy_server.py | 39 ++++++++++++++++++++++++--- 2 files changed, 35 insertions(+), 4 deletions(-) rename litellm/proxy/{types.py => _types.py} (100%) diff --git a/litellm/proxy/types.py b/litellm/proxy/_types.py similarity index 100% rename from litellm/proxy/types.py rename to litellm/proxy/_types.py diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 54131ee27..51ae34cf9 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -96,7 +96,7 @@ from litellm.proxy.utils import ( get_instance_fn ) import pydantic -from litellm.proxy.types import * +from litellm.proxy._types import * from litellm.caching import DualCache from litellm.health_check import perform_health_check litellm.suppress_debug_info = True @@ -212,14 +212,15 @@ def usage_telemetry( target=litellm.utils.litellm_telemetry, args=(data,), daemon=True ).start() - +def _get_bearer_token(api_key: str): + assert api_key.startswith("Bearer ") # ensure Bearer token passed in + api_key = api_key.replace("Bearer ", "") # extract the token async def user_api_key_auth(request: Request, api_key: str = fastapi.Security(api_key_header)) -> UserAPIKeyAuth: global master_key, prisma_client, llm_model_list, user_custom_auth try: if isinstance(api_key, str): - assert api_key.startswith("Bearer ") # ensure Bearer token passed in - api_key = api_key.replace("Bearer ", "") # extract the token + api_key = _get_bearer_token(api_key=api_key) ### USER-DEFINED AUTH FUNCTION ### if user_custom_auth: response = await user_custom_auth(request=request, api_key=api_key) @@ -745,6 +746,36 @@ def litellm_completion(*args, **kwargs): return StreamingResponse(data_generator(response), media_type='text/event-stream') return response +@app.middleware("http") +async def rate_limit_per_token(request: Request, call_next): + global user_api_key_cache, general_settings + max_parallel_requests = general_settings.get("max_parallel_requests", None) + api_key = request.headers.get("Authorization") + if max_parallel_requests is not None and api_key is not None: # Rate limiting is enabled + api_key = _get_bearer_token(api_key=api_key) + # CHECK IF REQUEST ALLOWED + request_count_api_key = f"{api_key}_request_count" + current = user_api_key_cache.get_cache(key=request_count_api_key) + if current is None: + user_api_key_cache.set_cache(request_count_api_key, 1) + elif int(current) < max_parallel_requests: + # Increase count for this token + user_api_key_cache.set_cache(request_count_api_key, int(current) + 1) + else: + raise HTTPException(status_code=429, detail="Too many requests.") + + + response = await call_next(request) + + # Decrease count for this token + current = user_api_key_cache.get_cache(key=request_count_api_key) + user_api_key_cache.set_cache(request_count_api_key, int(current) - 1) + + return response + else: # Rate limiting is not enabled, just pass the request + response = await call_next(request) + return response + @router.on_event("startup") async def startup_event(): global prisma_client, master_key From caac4f177956f22f85f16a12d5659f8082cf8890 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 6 Dec 2023 15:12:23 -0800 Subject: [PATCH 184/460] docs(virtual_keys.md): fix import line --- docs/my-website/docs/proxy/virtual_keys.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/my-website/docs/proxy/virtual_keys.md b/docs/my-website/docs/proxy/virtual_keys.md index 556e64a56..93abc789b 100644 --- a/docs/my-website/docs/proxy/virtual_keys.md +++ b/docs/my-website/docs/proxy/virtual_keys.md @@ -150,7 +150,7 @@ Here's how: Make sure the response type follows the `UserAPIKeyAuth` pydantic object. This is used by for logging usage specific to that user key. ```python -from litellm.proxy.types import UserAPIKeyAuth +from litellm.proxy._types import UserAPIKeyAuth async def user_api_key_auth(request: Request, api_key: str) -> UserAPIKeyAuth: try: From 51492125b538bad93c7ff8e23595a345a86da4bd Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 6 Dec 2023 16:50:02 -0800 Subject: [PATCH 185/460] test: skip flaky test --- litellm/tests/test_completion.py | 1 + 1 file changed, 1 insertion(+) diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index 69aff761c..a4847bd1f 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -131,6 +131,7 @@ def test_completion_gpt4_turbo(): pytest.fail(f"Error occurred: {e}") # test_completion_gpt4_turbo() +@pytest.mark.skip(reason="this test is flaky") def test_completion_gpt4_vision(): try: litellm.set_verbose=True From 58848841e1884b1911daca8a772288ebde71edc9 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 6 Dec 2023 17:09:02 -0800 Subject: [PATCH 186/460] fix(proxy_server.py): make headers json serializable --- litellm/proxy/proxy_server.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 51ae34cf9..fdf203a00 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -215,6 +215,7 @@ def usage_telemetry( def _get_bearer_token(api_key: str): assert api_key.startswith("Bearer ") # ensure Bearer token passed in api_key = api_key.replace("Bearer ", "") # extract the token + return api_key async def user_api_key_auth(request: Request, api_key: str = fastapi.Security(api_key_header)) -> UserAPIKeyAuth: global master_key, prisma_client, llm_model_list, user_custom_auth @@ -908,10 +909,10 @@ async def chat_completion(request: Request, model: Optional[str] = None, user_ap if "metadata" in data: print(f'received metadata: {data["metadata"]}') data["metadata"]["user_api_key"] = user_api_key_dict.api_key - data["metadata"]["headers"] = request.headers + data["metadata"]["headers"] = dict(request.headers) else: data["metadata"] = {"user_api_key": user_api_key_dict.api_key} - data["metadata"]["headers"] = request.headers + data["metadata"]["headers"] = dict(request.headers) global user_temperature, user_request_timeout, user_max_tokens, user_api_base # override with user settings, these are params passed via cli if user_temperature: From dfb30d38fa9dbcd2acd20002064613ef27845977 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 17:02:24 -0800 Subject: [PATCH 187/460] (feat) proxy print set callbacks --- litellm/proxy/proxy_server.py | 1 + 1 file changed, 1 insertion(+) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index fdf203a00..bb7ca9faf 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -500,6 +500,7 @@ def load_router_config(router: Optional[litellm.Router], config_file_path: str): ) elif key == "callbacks": litellm.callbacks = [get_instance_fn(value=value)] + print_verbose(f"{blue_color_code} Initialized Callbacks - {litellm.callbacks} {reset_color_code}") elif key == "success_callback": litellm.success_callback = [] From 1bac052ecad5d7d66e44ea19b504ae11c1993346 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 17:05:54 -0800 Subject: [PATCH 188/460] (fix) proxy use async logging --- litellm/proxy/custom_callbacks.py | 161 +++++++++++++++++------------- 1 file changed, 89 insertions(+), 72 deletions(-) diff --git a/litellm/proxy/custom_callbacks.py b/litellm/proxy/custom_callbacks.py index 0114f40b0..c5a4a00c5 100644 --- a/litellm/proxy/custom_callbacks.py +++ b/litellm/proxy/custom_callbacks.py @@ -1,9 +1,26 @@ from litellm.integrations.custom_logger import CustomLogger import litellm +import inspect # This file includes the custom callbacks for LiteLLM Proxy # Once defined, these can be passed in proxy_config.yaml class MyCustomHandler(CustomLogger): + def __init__(self): + blue_color_code = "\033[94m" + reset_color_code = "\033[0m" + print(f"{blue_color_code}Initialized LiteLLM custom logger") + try: + print(f"Logger Initialized with following methods:") + methods = [method for method in dir(self) if inspect.ismethod(getattr(self, method))] + + # Pretty print the methods + for method in methods: + print(f" - {method}") + print(f"{reset_color_code}") + except: + pass + + def log_pre_api_call(self, model, messages, kwargs): print(f"Pre-API Call") @@ -45,81 +62,81 @@ class MyCustomHandler(CustomLogger): ) return - def log_failure_event(self, kwargs, response_obj, start_time, end_time): - print(f"On Failure") + async def async_log_failure_event(self, kwargs, response_obj, start_time, end_time): + try: + print(f"On Async Failure !") + print("\nkwargs", kwargs) + # Access kwargs passed to litellm.completion() + model = kwargs.get("model", None) + messages = kwargs.get("messages", None) + user = kwargs.get("user", None) + + # Access litellm_params passed to litellm.completion(), example access `metadata` + litellm_params = kwargs.get("litellm_params", {}) + metadata = litellm_params.get("metadata", {}) # headers passed to LiteLLM proxy, can be found here + + # Acess Exceptions & Traceback + exception_event = kwargs.get("exception", None) + traceback_event = kwargs.get("traceback_exception", None) + + # Calculate cost using litellm.completion_cost() + cost = litellm.completion_cost(completion_response=response_obj) + print("now checking response obj") + + print( + f""" + Model: {model}, + Messages: {messages}, + User: {user}, + Cost: {cost}, + Response: {response_obj} + Proxy Metadata: {metadata} + Exception: {exception_event} + Traceback: {traceback_event} + """ + ) + except Exception as e: + print(f"Exception: {e}") + + + + async def async_log_success_event(self, kwargs, response_obj, start_time, end_time): + print(f"On Async Success!") + # log: key, user, model, prompt, response, tokens, cost + print("\nOn Success") + # Access kwargs passed to litellm.completion() + model = kwargs.get("model", None) + messages = kwargs.get("messages", None) + user = kwargs.get("user", None) + + # Access litellm_params passed to litellm.completion(), example access `metadata` + litellm_params = kwargs.get("litellm_params", {}) + metadata = litellm_params.get("metadata", {}) # headers passed to LiteLLM proxy, can be found here + + # Calculate cost using litellm.completion_cost() + cost = litellm.completion_cost(completion_response=response_obj) + response = response_obj + # tokens used in response + usage = response_obj["usage"] + + print( + f""" + Model: {model}, + Messages: {messages}, + User: {user}, + Usage: {usage}, + Cost: {cost}, + Response: {response} + Proxy Metadata: {metadata} + """ + ) + return + + proxy_handler_instance = MyCustomHandler() + # need to set litellm.callbacks = [customHandler] # on the proxy -## setting only one function -async def async_on_succes_logger(kwargs, response_obj, start_time, end_time): - print(f"On Async Success!") - # log: key, user, model, prompt, response, tokens, cost - print("\nOn Success") - # Access kwargs passed to litellm.completion() - model = kwargs.get("model", None) - messages = kwargs.get("messages", None) - user = kwargs.get("user", None) - - # Access litellm_params passed to litellm.completion(), example access `metadata` - litellm_params = kwargs.get("litellm_params", {}) - metadata = litellm_params.get("metadata", {}) # headers passed to LiteLLM proxy, can be found here - - # Calculate cost using litellm.completion_cost() - cost = litellm.completion_cost(completion_response=response_obj) - response = response_obj - # tokens used in response - usage = response_obj["usage"] - - print( - f""" - Model: {model}, - Messages: {messages}, - User: {user}, - Usage: {usage}, - Cost: {cost}, - Response: {response} - Proxy Metadata: {metadata} - """ - ) - return - - -async def async_on_fail_logger(kwargs, response_obj, start_time, end_time): - print(f"On Async Failure!") - - # Access kwargs passed to litellm.completion() - model = kwargs.get("model", None) - messages = kwargs.get("messages", None) - user = kwargs.get("user", None) - - # Access litellm_params passed to litellm.completion(), example access `metadata` - litellm_params = kwargs.get("litellm_params", {}) - metadata = litellm_params.get("metadata", {}) # headers passed to LiteLLM proxy, can be found here - - # Acess Exceptions & Traceback - exception_event = kwargs.get("exception", None) - traceback_event = kwargs.get("traceback_exception", None) - - # Calculate cost using litellm.completion_cost() - cost = litellm.completion_cost(completion_response=response_obj) - response = response_obj - # tokens used in response - usage = response_obj.get("usage", {}) - - print( - f""" - Model: {model}, - Messages: {messages}, - User: {user}, - Usage: {usage}, - Cost: {cost}, - Response: {response} - Proxy Metadata: {metadata} - Exception: {exception_event} - Traceback: {traceback_event} - """ - ) - # litellm.success_callback = [async_on_succes_logger] \ No newline at end of file From b482b9002c1d9923a5c039e04a081538aec6099b Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 17:13:39 -0800 Subject: [PATCH 189/460] (feat) Custom_logger add async success & async failure --- litellm/integrations/custom_logger.py | 27 ++++++--------------------- 1 file changed, 6 insertions(+), 21 deletions(-) diff --git a/litellm/integrations/custom_logger.py b/litellm/integrations/custom_logger.py index bcfef0fc2..586c90819 100644 --- a/litellm/integrations/custom_logger.py +++ b/litellm/integrations/custom_logger.py @@ -28,6 +28,11 @@ class CustomLogger: # https://docs.litellm.ai/docs/observability/custom_callback def log_failure_event(self, kwargs, response_obj, start_time, end_time): pass + async def async_log_success_event(self, kwargs, response_obj, start_time, end_time): + pass + + async def async_log_failure_event(self, kwargs, response_obj, start_time, end_time): + pass #### SINGLE-USE #### - https://docs.litellm.ai/docs/observability/custom_callback#using-your-custom-callback-function @@ -80,24 +85,4 @@ class CustomLogger: # https://docs.litellm.ai/docs/observability/custom_callback except: # traceback.print_exc() print_verbose(f"Custom Logger Error - {traceback.format_exc()}") - pass - - async def async_log_failure_event(self, kwargs, response_obj, start_time, end_time, print_verbose, callback_func): - # Method definition - try: - kwargs["log_event_type"] = "post_api_call" - await callback_func( - kwargs, # kwargs to func - response_obj, - start_time, - end_time, - ) - print_verbose( - f"Custom Logger - final response object: {response_obj}" - ) - except: - # traceback.print_exc() - print_verbose(f"Custom Logger Error - {traceback.format_exc()}") - pass - - + pass \ No newline at end of file From 8adbf3562389f3fa73dd2acd40878c0d81051424 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 17:15:27 -0800 Subject: [PATCH 190/460] (feat) add async loggers under custom logger --- litellm/utils.py | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/litellm/utils.py b/litellm/utils.py index 08c106668..0b2f5243d 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -995,6 +995,13 @@ class Logging: for callback in litellm._async_success_callback: try: + if isinstance(callback, CustomLogger): # custom logger class + await callback.async_log_success_event( + kwargs=self.model_call_details, + response_obj=result, + start_time=start_time, + end_time=end_time, + ) if callable(callback): # custom logger functions await customLogger.async_log_event( kwargs=self.model_call_details, @@ -1129,15 +1136,22 @@ class Logging: for callback in litellm._async_failure_callback: try: + if isinstance(callback, CustomLogger): # custom logger class + await callback.async_log_failure_event( + kwargs=self.model_call_details, + response_obj=result, + start_time=start_time, + end_time=end_time, + ) if callable(callback): # custom logger functions - await customLogger.async_log_failure_event( + await customLogger.async_log_event( kwargs=self.model_call_details, response_obj=result, start_time=start_time, end_time=end_time, print_verbose=print_verbose, callback_func=callback - ) + ) except: print_verbose( f"LiteLLM.LoggingError: [Non-Blocking] Exception occurred while success logging {traceback.format_exc()}" @@ -1239,6 +1253,10 @@ def client(original_function): litellm.success_callback.append(callback) if callback not in litellm.failure_callback: litellm.failure_callback.append(callback) + if callback not in litellm._async_success_callback: + litellm._async_success_callback.append(callback) + if callback not in litellm._async_failure_callback: + litellm._async_failure_callback.append(callback) if ( len(litellm.input_callback) > 0 or len(litellm.success_callback) > 0 From b60dc20f4bcf1a7df8d638392d3d2b55b45d9654 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 17:16:18 -0800 Subject: [PATCH 191/460] (fix) proxy edit custom logger --- litellm/proxy/custom_callbacks.py | 47 +++++-------------------------- 1 file changed, 7 insertions(+), 40 deletions(-) diff --git a/litellm/proxy/custom_callbacks.py b/litellm/proxy/custom_callbacks.py index c5a4a00c5..18aea8a97 100644 --- a/litellm/proxy/custom_callbacks.py +++ b/litellm/proxy/custom_callbacks.py @@ -31,19 +31,21 @@ class MyCustomHandler(CustomLogger): print(f"On Stream") def log_success_event(self, kwargs, response_obj, start_time, end_time): + print("On Success!") + + async def async_log_success_event(self, kwargs, response_obj, start_time, end_time): + print(f"On Async Success!") # log: key, user, model, prompt, response, tokens, cost - print("\nOn Success") - ### Access kwargs passed to litellm.completion() + # Access kwargs passed to litellm.completion() model = kwargs.get("model", None) messages = kwargs.get("messages", None) user = kwargs.get("user", None) - #### Access litellm_params passed to litellm.completion(), example access `metadata` + # Access litellm_params passed to litellm.completion(), example access `metadata` litellm_params = kwargs.get("litellm_params", {}) metadata = litellm_params.get("metadata", {}) # headers passed to LiteLLM proxy, can be found here - ################################################# - ##### Calculate cost using litellm.completion_cost() ####################### + # Calculate cost using litellm.completion_cost() cost = litellm.completion_cost(completion_response=response_obj) response = response_obj # tokens used in response @@ -99,41 +101,6 @@ class MyCustomHandler(CustomLogger): print(f"Exception: {e}") - - async def async_log_success_event(self, kwargs, response_obj, start_time, end_time): - print(f"On Async Success!") - # log: key, user, model, prompt, response, tokens, cost - print("\nOn Success") - # Access kwargs passed to litellm.completion() - model = kwargs.get("model", None) - messages = kwargs.get("messages", None) - user = kwargs.get("user", None) - - # Access litellm_params passed to litellm.completion(), example access `metadata` - litellm_params = kwargs.get("litellm_params", {}) - metadata = litellm_params.get("metadata", {}) # headers passed to LiteLLM proxy, can be found here - - # Calculate cost using litellm.completion_cost() - cost = litellm.completion_cost(completion_response=response_obj) - response = response_obj - # tokens used in response - usage = response_obj["usage"] - - print( - f""" - Model: {model}, - Messages: {messages}, - User: {user}, - Usage: {usage}, - Cost: {cost}, - Response: {response} - Proxy Metadata: {metadata} - """ - ) - return - - - proxy_handler_instance = MyCustomHandler() From d2de7ffe278841c2146f8099945bf40812e20d1d Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 6 Dec 2023 17:19:10 -0800 Subject: [PATCH 192/460] test(test_proxy_server_langfuse.py): add langfuse proxy testing --- litellm/tests/test_configs/test_config.yaml | 2 + litellm/tests/test_proxy_server_langfuse.py | 64 +++++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 litellm/tests/test_proxy_server_langfuse.py diff --git a/litellm/tests/test_configs/test_config.yaml b/litellm/tests/test_configs/test_config.yaml index fa2079666..253a39774 100644 --- a/litellm/tests/test_configs/test_config.yaml +++ b/litellm/tests/test_configs/test_config.yaml @@ -4,6 +4,8 @@ general_settings: litellm_settings: drop_params: true set_verbose: true + success_callback: ["langfuse"] + model_list: - litellm_params: api_base: https://my-endpoint-europe-berri-992.openai.azure.com/ diff --git a/litellm/tests/test_proxy_server_langfuse.py b/litellm/tests/test_proxy_server_langfuse.py new file mode 100644 index 000000000..0e21a8eb9 --- /dev/null +++ b/litellm/tests/test_proxy_server_langfuse.py @@ -0,0 +1,64 @@ +import sys, os +import traceback +from dotenv import load_dotenv + +load_dotenv() +import os, io + +# this file is to test litellm/proxy + +sys.path.insert( + 0, os.path.abspath("../..") +) # Adds the parent directory to the system path +import pytest, logging +import litellm +from litellm import embedding, completion, completion_cost, Timeout +from litellm import RateLimitError +# Configure logging +logging.basicConfig( + level=logging.DEBUG, # Set the desired logging level + format="%(asctime)s - %(levelname)s - %(message)s", +) + +# test /chat/completion request to the proxy +from fastapi.testclient import TestClient +from fastapi import FastAPI +from litellm.proxy.proxy_server import router, save_worker_config, startup_event # Replace with the actual module where your FastAPI router is defined +filepath = os.path.dirname(os.path.abspath(__file__)) +config_fp = f"{filepath}/test_configs/test_config.yaml" +save_worker_config(config=config_fp, model=None, alias=None, api_base=None, api_version=None, debug=False, temperature=None, max_tokens=None, request_timeout=600, max_budget=None, telemetry=False, drop_params=True, add_function_to_prompt=False, headers=None, save=False, use_queue=False) +app = FastAPI() +app.include_router(router) # Include your router in the test app +@app.on_event("startup") +async def wrapper_startup_event(): + await startup_event() + +# Here you create a fixture that will be used by your tests +# Make sure the fixture returns TestClient(app) +@pytest.fixture(autouse=True) +def client(): + with TestClient(app) as client: + yield client + +def test_chat_completion(client): + try: + # Your test data + test_data = { + "model": "gpt-3.5-turbo", + "messages": [ + { + "role": "user", + "content": "hi" + }, + ], + "max_tokens": 10, + } + print("testing proxy server") + headers = {"Authorization": f"Bearer {os.getenv('PROXY_MASTER_KEY')}"} + response = client.post("/v1/chat/completions", json=test_data, headers=headers) + print(f"response - {response.text}") + assert response.status_code == 200 + result = response.json() + print(f"Received response: {result}") + except Exception as e: + pytest.fail(f"LiteLLM Proxy test failed. Exception - {str(e)}") From d814184bc36f48fa6ab1027bfeece225cc6365d0 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 6 Dec 2023 17:21:47 -0800 Subject: [PATCH 193/460] test: fix test imports --- litellm/proxy/custom_auth.py | 2 +- litellm/tests/test_configs/custom_auth.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/litellm/proxy/custom_auth.py b/litellm/proxy/custom_auth.py index 0cce561ca..933479708 100644 --- a/litellm/proxy/custom_auth.py +++ b/litellm/proxy/custom_auth.py @@ -1,4 +1,4 @@ -from litellm.proxy.types import UserAPIKeyAuth +from litellm.proxy._types import UserAPIKeyAuth from fastapi import Request from dotenv import load_dotenv import os diff --git a/litellm/tests/test_configs/custom_auth.py b/litellm/tests/test_configs/custom_auth.py index f9de3a97a..b37ff8370 100644 --- a/litellm/tests/test_configs/custom_auth.py +++ b/litellm/tests/test_configs/custom_auth.py @@ -1,4 +1,4 @@ -from litellm.proxy.types import UserAPIKeyAuth +from litellm.proxy._types import UserAPIKeyAuth from fastapi import Request from dotenv import load_dotenv import os From 8cd9f18b61116f2a5e25853cb849ff328b42401e Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 17:24:37 -0800 Subject: [PATCH 194/460] (docs) add async success + fail custom logger --- docs/my-website/docs/proxy/logging.md | 70 ++++++++++++++++++++------- 1 file changed, 52 insertions(+), 18 deletions(-) diff --git a/docs/my-website/docs/proxy/logging.md b/docs/my-website/docs/proxy/logging.md index f28a9cf8f..335a3d502 100644 --- a/docs/my-website/docs/proxy/logging.md +++ b/docs/my-website/docs/proxy/logging.md @@ -1,7 +1,7 @@ # Logging - Custom Callbacks, OpenTelemetry, Langfuse Log Proxy Input, Output, Exceptions using Custom Callbacks, Langfuse, OpenTelemetry -## Custom Callback Class +## Custom Callback Class [Async] Use this when you want to run custom callbacks in `python` ### Step 1 - Create your custom `litellm` callback class @@ -28,8 +28,14 @@ class MyCustomHandler(CustomLogger): print(f"On Stream") def log_success_event(self, kwargs, response_obj, start_time, end_time): - # Logging key details: key, user, model, prompt, response, tokens, cost - print("\nOn Success") + print("On Success") + + def log_failure_event(self, kwargs, response_obj, start_time, end_time): + print(f"On Failure") + + async def async_log_success_event(self, kwargs, response_obj, start_time, end_time): + print(f"On Async Success!") + # log: key, user, model, prompt, response, tokens, cost # Access kwargs passed to litellm.completion() model = kwargs.get("model", None) messages = kwargs.get("messages", None) @@ -37,11 +43,13 @@ class MyCustomHandler(CustomLogger): # Access litellm_params passed to litellm.completion(), example access `metadata` litellm_params = kwargs.get("litellm_params", {}) - metadata = litellm_params.get("metadata", {}) # Headers passed to LiteLLM proxy + metadata = litellm_params.get("metadata", {}) # headers passed to LiteLLM proxy, can be found here - # Calculate cost using litellm.completion_cost() + # Calculate cost using litellm.completion_cost() cost = litellm.completion_cost(completion_response=response_obj) - usage = response_obj["usage"] # Tokens used in response + response = response_obj + # tokens used in response + usage = response_obj["usage"] print( f""" @@ -56,8 +64,41 @@ class MyCustomHandler(CustomLogger): ) return - def log_failure_event(self, kwargs, response_obj, start_time, end_time): - print(f"On Failure") + async def async_log_failure_event(self, kwargs, response_obj, start_time, end_time): + try: + print(f"On Async Failure !") + print("\nkwargs", kwargs) + # Access kwargs passed to litellm.completion() + model = kwargs.get("model", None) + messages = kwargs.get("messages", None) + user = kwargs.get("user", None) + + # Access litellm_params passed to litellm.completion(), example access `metadata` + litellm_params = kwargs.get("litellm_params", {}) + metadata = litellm_params.get("metadata", {}) # headers passed to LiteLLM proxy, can be found here + + # Acess Exceptions & Traceback + exception_event = kwargs.get("exception", None) + traceback_event = kwargs.get("traceback_exception", None) + + # Calculate cost using litellm.completion_cost() + cost = litellm.completion_cost(completion_response=response_obj) + print("now checking response obj") + + print( + f""" + Model: {model}, + Messages: {messages}, + User: {user}, + Cost: {cost}, + Response: {response_obj} + Proxy Metadata: {metadata} + Exception: {exception_event} + Traceback: {traceback_event} + """ + ) + except Exception as e: + print(f"Exception: {e}") proxy_handler_instance = MyCustomHandler() @@ -119,7 +160,7 @@ On Success Response: {'id': 'chatcmpl-8S8avKJ1aVBg941y5xzGMSKrYCMvN', 'choices': [{'finish_reason': 'stop', 'index': 0, 'message': {'content': 'Good morning! How can I assist you today?', 'role': 'assistant'}}], 'created': 1701716913, 'model': 'gpt-3.5-turbo-0613', 'object': 'chat.completion', 'system_fingerprint': None, 'usage': {'completion_tokens': 10, 'prompt_tokens': 11, 'total_tokens': 21}} Proxy Metadata: {'user_api_key': None, 'headers': Headers({'host': '0.0.0.0:8000', 'user-agent': 'curl/7.88.1', 'accept': '*/*', 'authorization': 'Bearer sk-1234', 'content-length': '199', 'content-type': 'application/x-www-form-urlencoded'}), 'model_group': 'gpt-3.5-turbo', 'deployment': 'gpt-3.5-turbo-ModelID-gpt-3.5-turbo'} ``` - + ## OpenTelemetry, ElasticSearch From c789865c8792848517323e59c85623023525973e Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 6 Dec 2023 17:24:49 -0800 Subject: [PATCH 195/460] fix(langfuse.py): metadata none error --- litellm/integrations/langfuse.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/integrations/langfuse.py b/litellm/integrations/langfuse.py index ef90e6865..ea5276db2 100644 --- a/litellm/integrations/langfuse.py +++ b/litellm/integrations/langfuse.py @@ -37,7 +37,7 @@ class LangFuseLogger: f"Langfuse Logging - Enters logging function for model {kwargs}" ) litellm_params = kwargs.get("litellm_params", {}) - metadata = litellm_params.get("metadata", {}) + metadata = litellm_params.get("metadata", {}) or {} # if litellm_params['metadata'] == None prompt = [kwargs.get('messages')] optional_params = kwargs.get("optional_params", {}) From 45b41406154d4c8e2f3744126733f4ab0536e125 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 6 Dec 2023 17:40:38 -0800 Subject: [PATCH 196/460] test: fix config import for proxy testing --- litellm/proxy/proxy_server.py | 26 +++++++++---------- .../test_configs/test_config_no_auth.yaml | 21 +++++++++++++++ litellm/tests/test_proxy_server.py | 17 ++++++++---- 3 files changed, 46 insertions(+), 18 deletions(-) create mode 100644 litellm/tests/test_configs/test_config_no_auth.yaml diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index bb7ca9faf..827c66274 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -748,6 +748,19 @@ def litellm_completion(*args, **kwargs): return StreamingResponse(data_generator(response), media_type='text/event-stream') return response +def get_litellm_model_info(model: dict = {}): + model_info = model.get("model_info", {}) + model_to_lookup = model.get("litellm_params", {}).get("model", None) + try: + if "azure" in model_to_lookup: + model_to_lookup = model_info.get("base_model", None) + litellm_model_info = litellm.get_model_info(model_to_lookup) + return litellm_model_info + except: + # this should not block returning on /model/info + # if litellm does not have info on the model it should return {} + return {} + @app.middleware("http") async def rate_limit_per_token(request: Request, call_next): global user_api_key_cache, general_settings @@ -1101,19 +1114,6 @@ async def add_new_model(model_params: ModelParams): except Exception as e: raise HTTPException(status_code=500, detail=f"Internal Server Error: {str(e)}") -def get_litellm_model_info(model: dict = {}): - model_info = model.get("model_info", {}) - model_to_lookup = model.get("litellm_params", {}).get("model", None) - try: - if "azure" in model_to_lookup: - model_to_lookup = model_info.get("base_model", None) - litellm_model_info = litellm.get_model_info(model_to_lookup) - return litellm_model_info - except: - # this should not block returning on /model/info - # if litellm does not have info on the model it should return {} - return {} - #### [BETA] - This is a beta endpoint, format might change based on user feedback https://github.com/BerriAI/litellm/issues/933. If you need a stable endpoint use /model/info @router.get("/v1/model/info", description="Provides more info about each model in /models, including config.yaml descriptions (except api key and api base)", tags=["model management"], dependencies=[Depends(user_api_key_auth)]) async def model_info_v1(request: Request): diff --git a/litellm/tests/test_configs/test_config_no_auth.yaml b/litellm/tests/test_configs/test_config_no_auth.yaml new file mode 100644 index 000000000..1af6e6e6d --- /dev/null +++ b/litellm/tests/test_configs/test_config_no_auth.yaml @@ -0,0 +1,21 @@ +model_list: +- litellm_params: + api_base: https://my-endpoint-europe-berri-992.openai.azure.com/ + api_key: os.environ/AZURE_EUROPE_API_KEY + model: azure/gpt-35-turbo + model_name: azure-model +- litellm_params: + api_base: https://my-endpoint-canada-berri992.openai.azure.com + api_key: os.environ/AZURE_CANADA_API_KEY + model: azure/gpt-35-turbo + model_name: azure-model +- litellm_params: + api_base: https://openai-france-1234.openai.azure.com + api_key: os.environ/AZURE_FRANCE_API_KEY + model: azure/gpt-turbo + model_name: azure-model +- litellm_params: + model: gpt-3.5-turbo + model_info: + description: this is a test openai model + model_name: test_openai_models diff --git a/litellm/tests/test_proxy_server.py b/litellm/tests/test_proxy_server.py index b15ee8307..b9017987c 100644 --- a/litellm/tests/test_proxy_server.py +++ b/litellm/tests/test_proxy_server.py @@ -10,21 +10,28 @@ import os, io sys.path.insert( 0, os.path.abspath("../..") ) # Adds the parent directory to the system path -import pytest +import pytest, logging import litellm from litellm import embedding, completion, completion_cost, Timeout from litellm import RateLimitError +# Configure logging +logging.basicConfig( + level=logging.DEBUG, # Set the desired logging level + format="%(asctime)s - %(levelname)s - %(message)s", +) # test /chat/completion request to the proxy from fastapi.testclient import TestClient from fastapi import FastAPI -from litellm.proxy.proxy_server import router, save_worker_config, initialize # Replace with the actual module where your FastAPI router is defined -save_worker_config(config=None, model=None, alias=None, api_base=None, api_version=None, debug=False, temperature=None, max_tokens=None, request_timeout=600, max_budget=None, telemetry=False, drop_params=True, add_function_to_prompt=False, headers=None, save=False, use_queue=False) +from litellm.proxy.proxy_server import router, save_worker_config, startup_event # Replace with the actual module where your FastAPI router is defined +filepath = os.path.dirname(os.path.abspath(__file__)) +config_fp = f"{filepath}/test_configs/test_config_no_auth.yaml" +save_worker_config(config=config_fp, model=None, alias=None, api_base=None, api_version=None, debug=False, temperature=None, max_tokens=None, request_timeout=600, max_budget=None, telemetry=False, drop_params=True, add_function_to_prompt=False, headers=None, save=False, use_queue=False) app = FastAPI() app.include_router(router) # Include your router in the test app @app.on_event("startup") -async def wrapper_startup_event(): # required to reset config on app init - b/c pytest collects across multiple files - which sets the fastapi client + WORKER CONFIG to whatever was collected last - initialize(config=None, model=None, alias=None, api_base=None, api_version=None, debug=False, temperature=None, max_tokens=None, request_timeout=600, max_budget=None, telemetry=False, drop_params=True, add_function_to_prompt=False, headers=None, save=False, use_queue=False) +async def wrapper_startup_event(): + await startup_event() # Here you create a fixture that will be used by your tests # Make sure the fixture returns TestClient(app) From c8c45ef9c4b7ff2ddb4c56e60bf04f1487be6199 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 17:53:05 -0800 Subject: [PATCH 197/460] (test) async custom logger --- litellm/tests/test_custom_logger.py | 58 ++++++++++++++++++++++++++++- 1 file changed, 56 insertions(+), 2 deletions(-) diff --git a/litellm/tests/test_custom_logger.py b/litellm/tests/test_custom_logger.py index f88bc6868..808eceb33 100644 --- a/litellm/tests/test_custom_logger.py +++ b/litellm/tests/test_custom_logger.py @@ -9,8 +9,11 @@ from litellm.integrations.custom_logger import CustomLogger async_success = False class MyCustomHandler(CustomLogger): - success: bool = False - failure: bool = False + def __init__(self): + self.success: bool = False + self.failure: bool = False + self.async_success: bool = False + self.async_failure: bool = False def log_pre_api_call(self, model, messages, kwargs): print(f"Pre-API Call") @@ -29,6 +32,16 @@ class MyCustomHandler(CustomLogger): print(f"On Failure") self.failure = True + async def async_log_success_event(self, kwargs, response_obj, start_time, end_time): + print(f"On Async success") + self.async_success = True + print("Value of async success: ", self.async_success) + + async def async_log_failure_event(self, kwargs, response_obj, start_time, end_time): + print(f"On Async Failure") + self.async_failure = True + print("Value of async failure: ", self.async_failure) + async def async_test_logging_fn(kwargs, completion_obj, start_time, end_time): global async_success @@ -52,6 +65,7 @@ async def test_chat_openai(): except Exception as e: print(e) pytest.fail(f"An error occurred - {str(e)}") +# test_chat_openai() def test_completion_azure_stream_moderation_failure(): try: @@ -77,3 +91,43 @@ def test_completion_azure_stream_moderation_failure(): assert customHandler.failure == True except Exception as e: pytest.fail(f"Error occurred: {e}") + + +def test_async_custom_handler(): + try: + customHandler2 = MyCustomHandler() + litellm.callbacks = [customHandler2] + messages = [ + {"role": "system", "content": "You are a helpful assistant."}, + { + "role": "user", + "content": "how do i kill someone", + }, + ] + async def test_1(): + try: + response = await litellm.acompletion( + model="gpt-3.5", + messages=messages + ) + except: + pass + + assert customHandler2.async_failure == False + asyncio.run(test_1()) + assert customHandler2.async_failure == True, "async failure is not set to True even after failure" + print("Passed setting async failure") + + async def test_2(): + response = await litellm.acompletion( + model="gpt-3.5-turbo", + messages=messages + ) + print("\n response", response) + assert customHandler2.async_success == False + asyncio.run(test_2()) + assert customHandler2.async_success == True, "async success is not set to True even after success" + print("Passed setting async success") + except Exception as e: + pytest.fail(f"Error occurred: {e}") +# test_async_custom_handler() \ No newline at end of file From 0295509b3b0ec16f70028d7805a5ca694250038b Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 6 Dec 2023 18:01:57 -0800 Subject: [PATCH 198/460] fix(factory.py): fix claude 2.1 prompt template to handle system, assistant, user prompt --- litellm/llms/prompt_templates/factory.py | 18 +++++++++++++----- litellm/tests/test_completion.py | 1 + 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/litellm/llms/prompt_templates/factory.py b/litellm/llms/prompt_templates/factory.py index 2aac70d6e..c580cf4da 100644 --- a/litellm/llms/prompt_templates/factory.py +++ b/litellm/llms/prompt_templates/factory.py @@ -231,12 +231,20 @@ def hf_chat_template(model: str, messages: list): # Anthropic template def claude_2_1_pt(messages: list): # format - https://docs.anthropic.com/claude/docs/how-to-use-system-prompts + """ + Claude v2.1 allows system prompts (no Human: needed), but requires it be followed by Human: + - you can't just pass a system message + - you can't pass a system message and follow that with an assistant message + if system message is passed in, you can only do system, human, assistant or system, human + + if a system message is passed in and followed by an assistant message, insert a blank human message between them. + """ class AnthropicConstants(Enum): HUMAN_PROMPT = "\n\nHuman: " AI_PROMPT = "\n\nAssistant: " prompt = "" - for idx, message in enumerate(messages): # needs to start with `\n\nHuman: ` and end with `\n\nAssistant: ` + for idx, message in enumerate(messages): if message["role"] == "user": prompt += ( f"{AnthropicConstants.HUMAN_PROMPT.value}{message['content']}" @@ -245,13 +253,13 @@ def claude_2_1_pt(messages: list): # format - https://docs.anthropic.com/claude/ prompt += ( f"{message['content']}" ) - else: + elif message["role"] == "assistant": + if idx > 0 and messages[idx - 1]["role"] == "system": + prompt += f"{AnthropicConstants.HUMAN_PROMPT.value}" # Insert a blank human message prompt += ( f"{AnthropicConstants.AI_PROMPT.value}{message['content']}" ) - if idx == 0 and message["role"] == "assistant": # ensure the prompt always starts with `\n\nHuman: ` - prompt = f"{AnthropicConstants.HUMAN_PROMPT.value}" + prompt - prompt += f"{AnthropicConstants.AI_PROMPT.value}" + prompt += f"{AnthropicConstants.AI_PROMPT.value}" # prompt must end with \"\n\nAssistant: " turn return prompt def anthropic_pt(messages: list): # format - https://docs.anthropic.com/claude/reference/complete_post diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index a4847bd1f..7727cc710 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -63,6 +63,7 @@ def test_completion_claude(): def test_completion_claude2_1(): try: print("claude2.1 test request") + messages=[{'role': 'system', 'content': 'Your goal is generate a joke on the topic user gives'}, {'role': 'assistant', 'content': 'Hi, how can i assist you today?'}, {'role': 'user', 'content': 'Generate a 3 liner joke for me'}] # test without max tokens response = completion( model="claude-2.1", From 1b43c7120c5035acf4a7e8f8862a5c5fc6ecae0d Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 18:08:46 -0800 Subject: [PATCH 199/460] (test) custom logger - check kwargs passed all the way --- litellm/tests/test_custom_logger.py | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/litellm/tests/test_custom_logger.py b/litellm/tests/test_custom_logger.py index 808eceb33..44818bc6f 100644 --- a/litellm/tests/test_custom_logger.py +++ b/litellm/tests/test_custom_logger.py @@ -15,6 +15,12 @@ class MyCustomHandler(CustomLogger): self.async_success: bool = False self.async_failure: bool = False + self.async_completion_kwargs = None # test if the kwargs are available, for async_succcess for completion/embedding + self.async_embedding_kwargs = None + + self.async_completion_kwargs_fail = None + self.async_embedding_kwargs_fail = None + def log_pre_api_call(self, model, messages, kwargs): print(f"Pre-API Call") @@ -36,11 +42,15 @@ class MyCustomHandler(CustomLogger): print(f"On Async success") self.async_success = True print("Value of async success: ", self.async_success) + print("\n kwargs: ", kwargs) + self.async_completion_kwargs = kwargs async def async_log_failure_event(self, kwargs, response_obj, start_time, end_time): print(f"On Async Failure") self.async_failure = True print("Value of async failure: ", self.async_failure) + print("\n kwargs: ", kwargs) + self.async_completion_kwargs_fail = kwargs async def async_test_logging_fn(kwargs, completion_obj, start_time, end_time): @@ -107,15 +117,18 @@ def test_async_custom_handler(): async def test_1(): try: response = await litellm.acompletion( - model="gpt-3.5", - messages=messages + model="gpt-3.5-turbo", + messages=messages, + api_key="test", ) except: pass assert customHandler2.async_failure == False asyncio.run(test_1()) - assert customHandler2.async_failure == True, "async failure is not set to True even after failure" + assert customHandler2.async_failure == True, "async failure is not set to True even after failure" + assert customHandler2.async_completion_kwargs_fail.get("model") == "gpt-3.5-turbo" + assert len(str(customHandler2.async_completion_kwargs_fail.get("exception"))) > 10 # exppect APIError("OpenAIException - Error code: 401 - {'error': {'message': 'Incorrect API key provided: test. You can find your API key at https://platform.openai.com/account/api-keys.', 'type': 'invalid_request_error', 'param': None, 'code': 'invalid_api_key'}}"), 'traceback_exception': 'Traceback (most recent call last):\n File "/Users/ishaanjaffer/Github/litellm/litellm/llms/openai.py", line 269, in acompletion\n response = await openai_aclient.chat.completions.create(**data)\n File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/openai/resources/chat/completions.py", line 119 print("Passed setting async failure") async def test_2(): @@ -127,7 +140,9 @@ def test_async_custom_handler(): assert customHandler2.async_success == False asyncio.run(test_2()) assert customHandler2.async_success == True, "async success is not set to True even after success" + assert customHandler2.async_completion_kwargs.get("model") == "gpt-3.5-turbo" + print("Passed setting async success") except Exception as e: pytest.fail(f"Error occurred: {e}") -# test_async_custom_handler() \ No newline at end of file +test_async_custom_handler() \ No newline at end of file From 19b1deb200a3f24e16b5c906b44451517c10ba9f Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 18:14:54 -0800 Subject: [PATCH 200/460] (feat) proxy: protect health endpoint --- litellm/proxy/proxy_server.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 827c66274..0008239cf 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -1281,7 +1281,7 @@ async def retrieve_server_log(request: Request): async def test_endpoint(request: Request): return {"route": request.url.path} -@router.get("/health", description="Check the health of all the endpoints in config.yaml", tags=["health"]) +@router.get("/health", description="Check the health of all the endpoints in config.yaml", tags=["health"], dependencies=[Depends(user_api_key_auth)]) async def health_endpoint(request: Request, model: Optional[str] = fastapi.Query(None, description="Specify the model name (optional)")): global llm_model_list From 882f3f75ca9cfc0eb6694cb6fef0ce7a59e310e1 Mon Sep 17 00:00:00 2001 From: David Manouchehri Date: Wed, 6 Dec 2023 21:32:22 -0500 Subject: [PATCH 201/460] Update Dockerfile to preinstall Prisma CLI --- Dockerfile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Dockerfile b/Dockerfile index fa1147c39..53ec25329 100644 --- a/Dockerfile +++ b/Dockerfile @@ -19,6 +19,9 @@ COPY . /app RUN pip wheel --no-cache-dir --wheel-dir=wheels -r requirements.txt RUN pip install --no-cache-dir --find-links=wheels -r requirements.txt +# Trigger the Prisma CLI to be installed +RUN prisma -v + EXPOSE 4000/tcp # Start the litellm proxy, using the `litellm` cli command https://docs.litellm.ai/docs/simple_proxy From c0eedf28fc0dadf0a47131092d5e7c97d08198a5 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 6 Dec 2023 18:38:44 -0800 Subject: [PATCH 202/460] test: fix proxy server testing --- litellm/proxy/proxy_server.py | 8 +++++--- litellm/tests/test_proxy_server.py | 29 +++++++++++++++++++++-------- litellm/utils.py | 1 + 3 files changed, 27 insertions(+), 11 deletions(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 0008239cf..08918925b 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -234,7 +234,8 @@ async def user_api_key_auth(request: Request, api_key: str = fastapi.Security(ap return UserAPIKeyAuth() if api_key is None: # only require api key if master key is set - raise Exception("No api key passed in.") + raise Exception(f"No api key passed in.") + route = request.url.path # note: never string compare api keys, this is vulenerable to a time attack. Use secrets.compare_digest instead @@ -816,11 +817,12 @@ async def startup_event(): @router.on_event("shutdown") async def shutdown_event(): - global prisma_client + global prisma_client, master_key, user_custom_auth if prisma_client: print("Disconnecting from Prisma") await prisma_client.disconnect() - + master_key = None + user_custom_auth = None #### API ENDPOINTS #### @router.get("/v1/models", dependencies=[Depends(user_api_key_auth)]) @router.get("/models", dependencies=[Depends(user_api_key_auth)]) # if project requires model list diff --git a/litellm/tests/test_proxy_server.py b/litellm/tests/test_proxy_server.py index b9017987c..ce962430b 100644 --- a/litellm/tests/test_proxy_server.py +++ b/litellm/tests/test_proxy_server.py @@ -23,7 +23,7 @@ logging.basicConfig( # test /chat/completion request to the proxy from fastapi.testclient import TestClient from fastapi import FastAPI -from litellm.proxy.proxy_server import router, save_worker_config, startup_event # Replace with the actual module where your FastAPI router is defined +from litellm.proxy.proxy_server import router, save_worker_config, initialize # Replace with the actual module where your FastAPI router is defined filepath = os.path.dirname(os.path.abspath(__file__)) config_fp = f"{filepath}/test_configs/test_config_no_auth.yaml" save_worker_config(config=config_fp, model=None, alias=None, api_base=None, api_version=None, debug=False, temperature=None, max_tokens=None, request_timeout=600, max_budget=None, telemetry=False, drop_params=True, add_function_to_prompt=False, headers=None, save=False, use_queue=False) @@ -31,8 +31,15 @@ app = FastAPI() app.include_router(router) # Include your router in the test app @app.on_event("startup") async def wrapper_startup_event(): - await startup_event() + initialize(config=config_fp) +# Your bearer token +token = os.getenv("PROXY_MASTER_KEY") + +headers = { + "Authorization": f"Bearer {token}" +} + # Here you create a fixture that will be used by your tests # Make sure the fixture returns TestClient(app) @pytest.fixture(autouse=True) @@ -41,6 +48,7 @@ def client(): yield client def test_chat_completion(client): + global headers try: # Your test data test_data = { @@ -53,8 +61,9 @@ def test_chat_completion(client): ], "max_tokens": 10, } + print("testing proxy server") - response = client.post("/v1/chat/completions", json=test_data) + response = client.post("/v1/chat/completions", json=test_data, headers=headers) print(f"response - {response.text}") assert response.status_code == 200 result = response.json() @@ -65,6 +74,7 @@ def test_chat_completion(client): # Run the test def test_chat_completion_azure(client): + global headers try: # Your test data test_data = { @@ -77,8 +87,9 @@ def test_chat_completion_azure(client): ], "max_tokens": 10, } + print("testing proxy server with Azure Request") - response = client.post("/v1/chat/completions", json=test_data) + response = client.post("/v1/chat/completions", json=test_data, headers=headers) assert response.status_code == 200 result = response.json() @@ -92,13 +103,14 @@ def test_chat_completion_azure(client): def test_embedding(client): + global headers try: test_data = { "model": "azure/azure-embedding-model", "input": ["good morning from litellm"], } print("testing proxy server with OpenAI embedding") - response = client.post("/v1/embeddings", json=test_data) + response = client.post("/v1/embeddings", json=test_data, headers=headers) assert response.status_code == 200 result = response.json() @@ -112,6 +124,7 @@ def test_embedding(client): def test_add_new_model(client): + global headers try: test_data = { "model_name": "test_openai_models", @@ -122,8 +135,8 @@ def test_add_new_model(client): "description": "this is a test openai model" } } - client.post("/model/new", json=test_data) - response = client.get("/model/info") + client.post("/model/new", json=test_data, headers=headers) + response = client.get("/model/info", headers=headers) assert response.status_code == 200 result = response.json() print(f"response: {result}") @@ -172,7 +185,7 @@ def test_chat_completion_optional_params(client): litellm.callbacks = [customHandler] print("testing proxy server: optional params") - response = client.post("/v1/chat/completions", json=test_data) + response = client.post("/v1/chat/completions", json=test_data, headers=headers) assert response.status_code == 200 result = response.json() print(f"Received response: {result}") diff --git a/litellm/utils.py b/litellm/utils.py index 0b2f5243d..b37108bfc 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -554,6 +554,7 @@ class Logging: "litellm_params": self.litellm_params, "start_time": self.start_time, "stream": self.stream, + "user": user, **self.optional_params } From d4c6cc3920a5287a1322e08c87c309a29c6df817 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 6 Dec 2023 18:52:49 -0800 Subject: [PATCH 203/460] test: fix testing --- litellm/tests/test_proxy_server.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/tests/test_proxy_server.py b/litellm/tests/test_proxy_server.py index ce962430b..bc22c384f 100644 --- a/litellm/tests/test_proxy_server.py +++ b/litellm/tests/test_proxy_server.py @@ -122,7 +122,7 @@ def test_embedding(client): # Run the test # test_embedding() - +@pytest.mark.skip(reason="hitting yaml load issues on circle-ci") def test_add_new_model(client): global headers try: From fff0228c201c788f99a49277ad80874f70a2145d Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 6 Dec 2023 19:02:58 -0800 Subject: [PATCH 204/460] fix(factory.py): support togethercomputer codellama pt --- litellm/llms/prompt_templates/factory.py | 2 +- litellm/tests/test_together_ai.py | 64 ++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 litellm/tests/test_together_ai.py diff --git a/litellm/llms/prompt_templates/factory.py b/litellm/llms/prompt_templates/factory.py index c580cf4da..ec938f33e 100644 --- a/litellm/llms/prompt_templates/factory.py +++ b/litellm/llms/prompt_templates/factory.py @@ -350,7 +350,7 @@ def prompt_factory(model: str, messages: list, custom_llm_provider: Optional[str elif "mosaicml/mpt" in model: if "chat" in model: return mpt_chat_pt(messages=messages) - elif "codellama/codellama" in model: + elif "codellama/codellama" in model or "togethercomputer/codellama" in model: if "instruct" in model: return llama_2_chat_pt(messages=messages) # https://huggingface.co/blog/codellama#conversational-instructions elif "wizardlm/wizardcoder" in model: diff --git a/litellm/tests/test_together_ai.py b/litellm/tests/test_together_ai.py new file mode 100644 index 000000000..ac7ea6771 --- /dev/null +++ b/litellm/tests/test_together_ai.py @@ -0,0 +1,64 @@ +import sys, os +import traceback + +sys.path.insert( + 0, os.path.abspath("../..") +) # Adds the parent directory to the system path +import time +import litellm +import openai +import pytest + +### Together AI +import together +together.api_key = "60c79880fc49df126d3e87b53f8a463ff6e1c6d27fe64207cde25cdfcd1f2f36" + +sample_message = [ + {"role": "user", "content": "Who are you"}, + {"role": "assistant", "content": "I am your helpful assistant."}, + {"role": "user", "content": "Tell me a joke"}, +] + + +def format_prompt_togetherai(messages, prompt_format, stop_words): + start_token, end_token = prompt_format.split('{prompt}') + prompt = '' + for message in messages: + role = message['role'] + message_content = message['content'] + if role == 'system': + prompt += f"{start_token}\n<>\n{message_content}\n<>\n" + elif role == 'user': + prompt += f"{start_token}{message_content}{end_token}" + else: + prompt += f'{message_content}{stop_words[0]}' + return prompt + + +model = 'togethercomputer/CodeLlama-13b-Instruct' +stop_words = list(together.Models.info(model)['config']['stop']) +prompt_format = str(together.Models.info(model)['config']['prompt_format']) +formatted_prompt = format_prompt_togetherai( + messages=sample_message, prompt_format=prompt_format, stop_words=stop_words) +for token in together.Complete.create_streaming(prompt=formatted_prompt, + model=model, stop=stop_words, max_tokens=512): + print(token, end="") + + +### litellm + +import os +from litellm import completion + +os.environ["TOGETHERAI_API_KEY"] = "60c79880fc49df126d3e87b53f8a463ff6e1c6d27fe64207cde25cdfcd1f2f36" + +sample_message = [ + {"role": "user", "content": "Who are you"}, + {"role": "assistant", "content": "I am your helpful assistant."}, + {"role": "user", "content": "Tell me a joke"}, +] + +res = completion(model="together_ai/togethercomputer/CodeLlama-13b-Instruct", + messages=sample_message, stream=False, max_tokens=1000) + +print(list(res)) \ No newline at end of file From e3b24ec79754e0a69f1b5bc5bc57ae689a746b5d Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 19:03:41 -0800 Subject: [PATCH 205/460] (feat) aembedding - add custom logging support --- litellm/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/main.py b/litellm/main.py index d78c8ceb9..a8b499af4 100644 --- a/litellm/main.py +++ b/litellm/main.py @@ -1677,7 +1677,7 @@ def batch_completion_models_all_responses(*args, **kwargs): return responses ### EMBEDDING ENDPOINTS #################### - +@client async def aembedding(*args, **kwargs): """ Asynchronously calls the `embedding` function with the given arguments and keyword arguments. From 7fcd17cbbe89858ad0862c23e70e5ce7b043cdc6 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 19:04:19 -0800 Subject: [PATCH 206/460] (feat) aembedding callback --- litellm/utils.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/litellm/utils.py b/litellm/utils.py index b37108bfc..3dcfe1362 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -522,6 +522,7 @@ class CallTypes(Enum): embedding = 'embedding' completion = 'completion' acompletion = 'acompletion' + aembedding = 'aembedding' # Logging function -> log the exact model details + what's being sent | Non-Blocking class Logging: @@ -1317,7 +1318,7 @@ def client(original_function): ### PRE-CALL RULES ### if isinstance(messages, list) and len(messages) > 0 and isinstance(messages[0], dict) and "content" in messages[0]: rules_obj.pre_call_rules(input="".join(m["content"] for m in messages if isinstance(m["content"], str)), model=model) - elif call_type == CallTypes.embedding.value: + elif call_type == CallTypes.embedding.value or call_type == CallTypes.aembedding.value: messages = args[1] if len(args) > 1 else kwargs["input"] stream = True if "stream" in kwargs and kwargs["stream"] == True else False logging_obj = Logging(model=model, messages=messages, stream=stream, litellm_call_id=kwargs["litellm_call_id"], function_id=function_id, call_type=call_type, start_time=start_time) From f3469fdef8d8137e6ad1d593f04423833fb35277 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 19:09:04 -0800 Subject: [PATCH 207/460] (test) aembedding on custom logger --- litellm/tests/test_custom_logger.py | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/litellm/tests/test_custom_logger.py b/litellm/tests/test_custom_logger.py index 44818bc6f..dd9c39d67 100644 --- a/litellm/tests/test_custom_logger.py +++ b/litellm/tests/test_custom_logger.py @@ -13,10 +13,13 @@ class MyCustomHandler(CustomLogger): self.success: bool = False self.failure: bool = False self.async_success: bool = False + self.async_success_embedding: bool = False self.async_failure: bool = False + self.async_failure_embedding: bool = False self.async_completion_kwargs = None # test if the kwargs are available, for async_succcess for completion/embedding self.async_embedding_kwargs = None + self.async_embedding_response = None self.async_completion_kwargs_fail = None self.async_embedding_kwargs_fail = None @@ -43,6 +46,10 @@ class MyCustomHandler(CustomLogger): self.async_success = True print("Value of async success: ", self.async_success) print("\n kwargs: ", kwargs) + if kwargs.get("model") == "text-embedding-ada-002": + self.async_success_embedding = True + self.async_embedding_kwargs = kwargs + self.async_embedding_response = response_obj self.async_completion_kwargs = kwargs async def async_log_failure_event(self, kwargs, response_obj, start_time, end_time): @@ -107,6 +114,7 @@ def test_async_custom_handler(): try: customHandler2 = MyCustomHandler() litellm.callbacks = [customHandler2] + litellm.set_verbose = True messages = [ {"role": "system", "content": "You are a helpful assistant."}, { @@ -134,7 +142,10 @@ def test_async_custom_handler(): async def test_2(): response = await litellm.acompletion( model="gpt-3.5-turbo", - messages=messages + messages=[{ + "role": "user", + "content": "hello from litellm test", + }] ) print("\n response", response) assert customHandler2.async_success == False @@ -142,6 +153,18 @@ def test_async_custom_handler(): assert customHandler2.async_success == True, "async success is not set to True even after success" assert customHandler2.async_completion_kwargs.get("model") == "gpt-3.5-turbo" + + async def test_3(): + response = await litellm.aembedding( + model="text-embedding-ada-002", + input = ["hello world"], + ) + print("\n response", response) + assert customHandler2.async_success_embedding == False + asyncio.run(test_3()) + assert customHandler2.async_success_embedding == True, "async_success_embedding is not set to True even after success" + assert customHandler2.async_embedding_kwargs.get("model") == "text-embedding-ada-002" + assert customHandler2.async_embedding_response["usage"]["prompt_tokens"] ==2 print("Passed setting async success") except Exception as e: pytest.fail(f"Error occurred: {e}") From 04eecaa4934a89c85f88fd03f7ed57d4f845a60c Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 19:15:08 -0800 Subject: [PATCH 208/460] (test) custom logger on fail --- litellm/tests/test_custom_logger.py | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/litellm/tests/test_custom_logger.py b/litellm/tests/test_custom_logger.py index dd9c39d67..b27c3bf78 100644 --- a/litellm/tests/test_custom_logger.py +++ b/litellm/tests/test_custom_logger.py @@ -57,9 +57,12 @@ class MyCustomHandler(CustomLogger): self.async_failure = True print("Value of async failure: ", self.async_failure) print("\n kwargs: ", kwargs) + if kwargs.get("model") == "text-embedding-ada-002": + self.async_failure_embedding = True + self.async_embedding_kwargs_fail = kwargs + self.async_completion_kwargs_fail = kwargs - async def async_test_logging_fn(kwargs, completion_obj, start_time, end_time): global async_success print(f"ON ASYNC LOGGING") @@ -165,7 +168,28 @@ def test_async_custom_handler(): assert customHandler2.async_success_embedding == True, "async_success_embedding is not set to True even after success" assert customHandler2.async_embedding_kwargs.get("model") == "text-embedding-ada-002" assert customHandler2.async_embedding_response["usage"]["prompt_tokens"] ==2 - print("Passed setting async success") + print("Passed setting async success: Embedding") + + + print("Testing custom failure callback for embedding") + + async def test_4(): + try: + response = await litellm.aembedding( + model="text-embedding-ada-002", + input = ["hello world"], + api_key="test", + ) + except: + pass + + assert customHandler2.async_failure_embedding == False + asyncio.run(test_4()) + assert customHandler2.async_failure_embedding == True, "async failure embedding is not set to True even after failure" + assert customHandler2.async_embedding_kwargs_fail.get("model") == "text-embedding-ada-002" + assert len(str(customHandler2.async_embedding_kwargs_fail.get("exception"))) > 10 # exppect APIError("OpenAIException - Error code: 401 - {'error': {'message': 'Incorrect API key provided: test. You can find your API key at https://platform.openai.com/account/api-keys.', 'type': 'invalid_request_error', 'param': None, 'code': 'invalid_api_key'}}"), 'traceback_exception': 'Traceback (most recent call last):\n File "/Users/ishaanjaffer/Github/litellm/litellm/llms/openai.py", line 269, in acompletion\n response = await openai_aclient.chat.completions.create(**data)\n File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/openai/resources/chat/completions.py", line 119 + print("Passed setting async failure") + except Exception as e: pytest.fail(f"Error occurred: {e}") test_async_custom_handler() \ No newline at end of file From ac7d0a1632045668d2b3d7c79b7f9510eb18c8ff Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 6 Dec 2023 19:34:42 -0800 Subject: [PATCH 209/460] fix(together_ai.py): improve together ai custom prompt templating --- litellm/llms/prompt_templates/factory.py | 76 +++++++++++++++++------- litellm/llms/together_ai.py | 2 +- litellm/tests/test_completion.py | 7 ++- 3 files changed, 61 insertions(+), 24 deletions(-) diff --git a/litellm/llms/prompt_templates/factory.py b/litellm/llms/prompt_templates/factory.py index ec938f33e..37c96d773 100644 --- a/litellm/llms/prompt_templates/factory.py +++ b/litellm/llms/prompt_templates/factory.py @@ -2,7 +2,7 @@ from enum import Enum import requests, traceback import json from jinja2 import Template, exceptions, Environment, meta -from typing import Optional +from typing import Optional, Any def default_pt(messages): return " ".join(message["content"] for message in messages) @@ -159,26 +159,27 @@ def phind_codellama_pt(messages): prompt += "### Assistant\n" + message["content"] + "\n\n" return prompt -def hf_chat_template(model: str, messages: list): +def hf_chat_template(model: str, messages: list, chat_template: Optional[Any]=None): ## get the tokenizer config from huggingface - def _get_tokenizer_config(hf_model_name): - url = f"https://huggingface.co/{hf_model_name}/raw/main/tokenizer_config.json" - # Make a GET request to fetch the JSON data - response = requests.get(url) - if response.status_code == 200: - # Parse the JSON data - tokenizer_config = json.loads(response.content) - return {"status": "success", "tokenizer": tokenizer_config} - else: - return {"status": "failure"} - tokenizer_config = _get_tokenizer_config(model) - if tokenizer_config["status"] == "failure" or "chat_template" not in tokenizer_config["tokenizer"]: - raise Exception("No chat template found") - ## read the bos token, eos token and chat template from the json - tokenizer_config = tokenizer_config["tokenizer"] - bos_token = tokenizer_config["bos_token"] - eos_token = tokenizer_config["eos_token"] - chat_template = tokenizer_config["chat_template"] + if chat_template is None: + def _get_tokenizer_config(hf_model_name): + url = f"https://huggingface.co/{hf_model_name}/raw/main/tokenizer_config.json" + # Make a GET request to fetch the JSON data + response = requests.get(url) + if response.status_code == 200: + # Parse the JSON data + tokenizer_config = json.loads(response.content) + return {"status": "success", "tokenizer": tokenizer_config} + else: + return {"status": "failure"} + tokenizer_config = _get_tokenizer_config(model) + if tokenizer_config["status"] == "failure" or "chat_template" not in tokenizer_config["tokenizer"]: + raise Exception("No chat template found") + ## read the bos token, eos token and chat template from the json + tokenizer_config = tokenizer_config["tokenizer"] + bos_token = tokenizer_config["bos_token"] + eos_token = tokenizer_config["eos_token"] + chat_template = tokenizer_config["chat_template"] def raise_exception(message): raise Exception(f"Error message - {message}") @@ -262,6 +263,35 @@ def claude_2_1_pt(messages: list): # format - https://docs.anthropic.com/claude/ prompt += f"{AnthropicConstants.AI_PROMPT.value}" # prompt must end with \"\n\nAssistant: " turn return prompt +### TOGETHER AI + +def get_model_info(token, model): + headers = { + 'Authorization': f'Bearer {token}' + } + response = requests.get('https://api.together.xyz/models/info', headers=headers) + if response.status_code == 200: + model_info = response.json() + for m in model_info: + if m["name"].lower().strip() == model.strip(): + return m['config'].get('prompt_format', None), m['config'].get('chat_template', None) + return None, None + else: + return None, None + +def format_prompt_togetherai(messages, prompt_format, chat_template): + human_prompt, assistant_prompt = prompt_format.split('{prompt}') + + if chat_template is not None: + prompt = hf_chat_template(model=None, messages=messages, chat_template=chat_template) + elif prompt_format is not None: + prompt = custom_prompt(role_dict={}, messages=messages, initial_prompt_value=human_prompt, final_prompt_value=assistant_prompt) + else: + prompt = default_pt(messages) + return prompt + +### + def anthropic_pt(messages: list): # format - https://docs.anthropic.com/claude/reference/complete_post class AnthropicConstants(Enum): HUMAN_PROMPT = "\n\nHuman: " @@ -328,7 +358,7 @@ def custom_prompt(role_dict: dict, messages: list, initial_prompt_value: str="", prompt += final_prompt_value return prompt -def prompt_factory(model: str, messages: list, custom_llm_provider: Optional[str]=None): +def prompt_factory(model: str, messages: list, custom_llm_provider: Optional[str]=None, api_key: Optional[str]=None): original_model_name = model model = model.lower() if custom_llm_provider == "ollama": @@ -338,7 +368,9 @@ def prompt_factory(model: str, messages: list, custom_llm_provider: Optional[str return claude_2_1_pt(messages=messages) else: return anthropic_pt(messages=messages) - + elif custom_llm_provider == "together_ai": + prompt_format, chat_template = get_model_info(token=api_key, model=model) + return format_prompt_togetherai(messages=messages, prompt_format=prompt_format, chat_template=chat_template) try: if "meta-llama/llama-2" in model and "chat" in model: return llama_2_chat_pt(messages=messages) diff --git a/litellm/llms/together_ai.py b/litellm/llms/together_ai.py index 8e4970a7b..210ed497e 100644 --- a/litellm/llms/together_ai.py +++ b/litellm/llms/together_ai.py @@ -115,7 +115,7 @@ def completion( messages=messages, ) else: - prompt = prompt_factory(model=model, messages=messages) + prompt = prompt_factory(model=model, messages=messages, api_key=api_key, custom_llm_provider="together_ai") # api key required to query together ai model list data = { "model": model, diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index 7727cc710..774131a5c 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -1001,8 +1001,13 @@ def test_replicate_custom_prompt_dict(): ######## Test TogetherAI ######## def test_completion_together_ai(): - model_name = "together_ai/togethercomputer/llama-2-70b-chat" + model_name = "together_ai/togethercomputer/CodeLlama-13b-Instruct" try: + messages =[ + {"role": "user", "content": "Who are you"}, + {"role": "assistant", "content": "I am your helpful assistant."}, + {"role": "user", "content": "Tell me a joke"}, + ] response = completion(model=model_name, messages=messages, max_tokens=256, n=1, logger_fn=logger_fn) # Add any assertions here to check the response print(response) From d3e179e5ad4a91a2e36d804ef4b0367983e41a7c Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 6 Dec 2023 19:35:12 -0800 Subject: [PATCH 210/460] test: fix testing --- litellm/tests/test_together_ai.py | 100 +++++++++++++++--------------- 1 file changed, 50 insertions(+), 50 deletions(-) diff --git a/litellm/tests/test_together_ai.py b/litellm/tests/test_together_ai.py index ac7ea6771..361ca8ee7 100644 --- a/litellm/tests/test_together_ai.py +++ b/litellm/tests/test_together_ai.py @@ -1,64 +1,64 @@ -import sys, os -import traceback +# import sys, os +# import traceback -sys.path.insert( - 0, os.path.abspath("../..") -) # Adds the parent directory to the system path -import time -import litellm -import openai -import pytest +# sys.path.insert( +# 0, os.path.abspath("../..") +# ) # Adds the parent directory to the system path +# import time +# import litellm +# import openai +# import pytest -### Together AI -import together -together.api_key = "60c79880fc49df126d3e87b53f8a463ff6e1c6d27fe64207cde25cdfcd1f2f36" +# ### Together AI +# import together +# together.api_key = "" -sample_message = [ - {"role": "user", "content": "Who are you"}, - {"role": "assistant", "content": "I am your helpful assistant."}, - {"role": "user", "content": "Tell me a joke"}, -] +# sample_message = [ +# {"role": "user", "content": "Who are you"}, +# {"role": "assistant", "content": "I am your helpful assistant."}, +# {"role": "user", "content": "Tell me a joke"}, +# ] -def format_prompt_togetherai(messages, prompt_format, stop_words): - start_token, end_token = prompt_format.split('{prompt}') - prompt = '' - for message in messages: - role = message['role'] - message_content = message['content'] - if role == 'system': - prompt += f"{start_token}\n<>\n{message_content}\n<>\n" - elif role == 'user': - prompt += f"{start_token}{message_content}{end_token}" - else: - prompt += f'{message_content}{stop_words[0]}' - return prompt +# def format_prompt_togetherai(messages, prompt_format, stop_words): +# start_token, end_token = prompt_format.split('{prompt}') +# prompt = '' +# for message in messages: +# role = message['role'] +# message_content = message['content'] +# if role == 'system': +# prompt += f"{start_token}\n<>\n{message_content}\n<>\n" +# elif role == 'user': +# prompt += f"{start_token}{message_content}{end_token}" +# else: +# prompt += f'{message_content}{stop_words[0]}' +# return prompt -model = 'togethercomputer/CodeLlama-13b-Instruct' -stop_words = list(together.Models.info(model)['config']['stop']) -prompt_format = str(together.Models.info(model)['config']['prompt_format']) -formatted_prompt = format_prompt_togetherai( - messages=sample_message, prompt_format=prompt_format, stop_words=stop_words) -for token in together.Complete.create_streaming(prompt=formatted_prompt, - model=model, stop=stop_words, max_tokens=512): - print(token, end="") +# model = 'togethercomputer/CodeLlama-13b-Instruct' +# stop_words = list(together.Models.info(model)['config']['stop']) +# prompt_format = str(together.Models.info(model)['config']['prompt_format']) +# formatted_prompt = format_prompt_togetherai( +# messages=sample_message, prompt_format=prompt_format, stop_words=stop_words) +# for token in together.Complete.create_streaming(prompt=formatted_prompt, +# model=model, stop=stop_words, max_tokens=512): +# print(token, end="") -### litellm +# ### litellm -import os -from litellm import completion +# import os +# from litellm import completion -os.environ["TOGETHERAI_API_KEY"] = "60c79880fc49df126d3e87b53f8a463ff6e1c6d27fe64207cde25cdfcd1f2f36" +# os.environ["TOGETHERAI_API_KEY"] = "" -sample_message = [ - {"role": "user", "content": "Who are you"}, - {"role": "assistant", "content": "I am your helpful assistant."}, - {"role": "user", "content": "Tell me a joke"}, -] +# sample_message = [ +# {"role": "user", "content": "Who are you"}, +# {"role": "assistant", "content": "I am your helpful assistant."}, +# {"role": "user", "content": "Tell me a joke"}, +# ] -res = completion(model="together_ai/togethercomputer/CodeLlama-13b-Instruct", - messages=sample_message, stream=False, max_tokens=1000) +# res = completion(model="together_ai/togethercomputer/CodeLlama-13b-Instruct", +# messages=sample_message, stream=False, max_tokens=1000) -print(list(res)) \ No newline at end of file +# print(list(res)) \ No newline at end of file From 9573123e2bd4885c432115121582549430c526d8 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 6 Dec 2023 19:50:09 -0800 Subject: [PATCH 211/460] =?UTF-8?q?bump:=20version=201.10.11=20=E2=86=92?= =?UTF-8?q?=201.11.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 8fcfe6f13..bdf9b5a85 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "litellm" -version = "1.10.11" +version = "1.11.0" description = "Library to easily interface with LLM API providers" authors = ["BerriAI"] license = "MIT License" @@ -55,7 +55,7 @@ requires = ["poetry-core", "wheel"] build-backend = "poetry.core.masonry.api" [tool.commitizen] -version = "1.10.11" +version = "1.11.0" version_files = [ "pyproject.toml:^version" ] From ee70c4e822649763f11a7e992ced4786366a231b Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 20:13:22 -0800 Subject: [PATCH 212/460] (feat) router - add model_group_alias_map --- litellm/__init__.py | 1 + litellm/router.py | 5 ++ litellm/tests/test_router_get_deployments.py | 52 +++++++++++++++++++- 3 files changed, 57 insertions(+), 1 deletion(-) diff --git a/litellm/__init__.py b/litellm/__init__.py index 9e4a859c7..11757eab8 100644 --- a/litellm/__init__.py +++ b/litellm/__init__.py @@ -45,6 +45,7 @@ caching: bool = False # Not used anymore, will be removed in next MAJOR release caching_with_models: bool = False # # Not used anymore, will be removed in next MAJOR release - https://github.com/BerriAI/litellm/discussions/648 cache: Optional[Cache] = None # cache object <- use this - https://docs.litellm.ai/docs/caching model_alias_map: Dict[str, str] = {} +model_group_alias_map: Dict[str, str] = {} max_budget: float = 0.0 # set the max budget across all providers _current_cost = 0 # private variable, used if max budget is set error_logs: Dict = {} diff --git a/litellm/router.py b/litellm/router.py index fcdb203cf..e9be7fe7f 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -1101,6 +1101,11 @@ class Router: return deployment raise ValueError(f"LiteLLM Router: Trying to call specific deployment, but Model:{model} does not exist in Model List: {self.model_list}") + # check if aliases set on litellm model alias map + if model in litellm.model_group_alias_map: + self.print_verbose(f"Using a model alias. Got Request for {model}, sending requests to {litellm.model_group_alias_map.get(model)}") + model = litellm.model_group_alias_map.get(model) + ## get healthy deployments ### get all deployments ### filter out the deployments currently cooling down diff --git a/litellm/tests/test_router_get_deployments.py b/litellm/tests/test_router_get_deployments.py index d180cc6d4..bcc19685a 100644 --- a/litellm/tests/test_router_get_deployments.py +++ b/litellm/tests/test_router_get_deployments.py @@ -284,4 +284,54 @@ def test_weighted_selection_router_no_rpm_set(): except Exception as e: traceback.print_exc() pytest.fail(f"Error occurred: {e}") -test_weighted_selection_router_no_rpm_set() \ No newline at end of file +# test_weighted_selection_router_no_rpm_set() + + + +def test_model_group_aliases(): + try: + litellm.set_verbose = False + litellm.model_group_alias_map = {"gpt-4": "gpt-3.5-turbo"} + model_list = [ + { + "model_name": "gpt-3.5-turbo", + "litellm_params": { + "model": "gpt-3.5-turbo-0613", + "api_key": os.getenv("OPENAI_API_KEY"), + "rpm": 6, + }, + }, + { + "model_name": "gpt-3.5-turbo", + "litellm_params": { + "model": "azure/chatgpt-v-2", + "api_key": os.getenv("AZURE_API_KEY"), + "api_base": os.getenv("AZURE_API_BASE"), + "api_version": os.getenv("AZURE_API_VERSION"), + "rpm": 1440, + }, + }, + { + "model_name": "claude-1", + "litellm_params": { + "model": "bedrock/claude1.2", + "rpm": 1440, + }, + } + ] + router = Router( + model_list=model_list, + ) + + for _ in range(20): + selected_model = router.get_available_deployment("gpt-4") + print("\n selected model", selected_model) + selected_model_name = selected_model.get("model_name") + if selected_model_name is not "gpt-3.5-turbo": + pytest.fail(f"Selected model {selected_model_name} is not gpt-3.5-turbo") + + router.reset() + except Exception as e: + traceback.print_exc() + pytest.fail(f"Error occurred: {e}") +# test_model_group_aliases() \ No newline at end of file From 900b8d66f3fdc9e4a68407715d6d9ed5af304b58 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 20:23:24 -0800 Subject: [PATCH 213/460] (feat) proxy use model_group_alias_map --- litellm/proxy/proxy_config.yaml | 5 +---- litellm/proxy/proxy_server.py | 2 ++ 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/litellm/proxy/proxy_config.yaml b/litellm/proxy/proxy_config.yaml index 4ebc3060e..1c096aac7 100644 --- a/litellm/proxy/proxy_config.yaml +++ b/litellm/proxy/proxy_config.yaml @@ -40,14 +40,11 @@ model_list: model_info: mode: completion - litellm_settings: # setting callback class # callbacks: custom_callbacks.proxy_handler_instance # sets litellm.callbacks = [proxy_handler_instance] + model_group_alias_map: {"gpt-4": "openai-gpt-3.5"} # all requests with gpt-4 model_name, get sent to openai-gpt-3.5 - # setting a callback function for success and failure - success_callback: [custom_callbacks.async_on_succes_logger] - failure_callback: [custom_callbacks.async_on_fail_logger] general_settings: # otel: True # OpenTelemetry Logger diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 08918925b..256e77444 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -944,6 +944,8 @@ async def chat_completion(request: Request, model: Optional[str] = None, user_ap response = await llm_router.acompletion(**data) elif llm_router is not None and data["model"] in llm_router.deployment_names: # model in router deployments, calling a specific deployment on the router response = await llm_router.acompletion(**data, specific_deployment = True) + elif llm_router is not None and data["model"] in litellm.model_group_alias_map: # model set in model_group_alias_map + response = await llm_router.acompletion(**data) else: # router is not set response = await litellm.acompletion(**data) if 'stream' in data and data['stream'] == True: # use generate_responses to stream responses From 095aa94e71a725295165c17fb94e3da2c9d77738 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 20:26:57 -0800 Subject: [PATCH 214/460] (fix) linting --- litellm/tests/test_custom_logger.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/litellm/tests/test_custom_logger.py b/litellm/tests/test_custom_logger.py index b27c3bf78..0702cb52c 100644 --- a/litellm/tests/test_custom_logger.py +++ b/litellm/tests/test_custom_logger.py @@ -10,19 +10,19 @@ from litellm.integrations.custom_logger import CustomLogger async_success = False class MyCustomHandler(CustomLogger): def __init__(self): - self.success: bool = False - self.failure: bool = False - self.async_success: bool = False - self.async_success_embedding: bool = False - self.async_failure: bool = False - self.async_failure_embedding: bool = False + self.success: bool = False # type: ignore + self.failure: bool = False # type: ignore + self.async_success: bool = False # type: ignore + self.async_success_embedding: bool = False # type: ignore + self.async_failure: bool = False # type: ignore + self.async_failure_embedding: bool = False # type: ignore - self.async_completion_kwargs = None # test if the kwargs are available, for async_succcess for completion/embedding - self.async_embedding_kwargs = None - self.async_embedding_response = None + self.async_completion_kwargs = None # type: ignore + self.async_embedding_kwargs = None # type: ignore + self.async_embedding_response = None # type: ignore - self.async_completion_kwargs_fail = None - self.async_embedding_kwargs_fail = None + self.async_completion_kwargs_fail = None # type: ignore + self.async_embedding_kwargs_fail = None # type: ignore def log_pre_api_call(self, model, messages, kwargs): print(f"Pre-API Call") From 7b389d10cadb68f779eda0c2e801e940c032c975 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 20:30:33 -0800 Subject: [PATCH 215/460] (linting) fix --- litellm/router.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/router.py b/litellm/router.py index e9be7fe7f..630e853f6 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -1104,7 +1104,7 @@ class Router: # check if aliases set on litellm model alias map if model in litellm.model_group_alias_map: self.print_verbose(f"Using a model alias. Got Request for {model}, sending requests to {litellm.model_group_alias_map.get(model)}") - model = litellm.model_group_alias_map.get(model) + model = litellm.model_group_alias_map[model] ## get healthy deployments ### get all deployments From fa70b1f85b0617515c797a54b73580c101f34543 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 20:35:14 -0800 Subject: [PATCH 216/460] (test) unset model_group_alias_map after test --- litellm/proxy/proxy_server.py | 2 +- litellm/tests/test_router_get_deployments.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 256e77444..bff4d5daa 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -944,7 +944,7 @@ async def chat_completion(request: Request, model: Optional[str] = None, user_ap response = await llm_router.acompletion(**data) elif llm_router is not None and data["model"] in llm_router.deployment_names: # model in router deployments, calling a specific deployment on the router response = await llm_router.acompletion(**data, specific_deployment = True) - elif llm_router is not None and data["model"] in litellm.model_group_alias_map: # model set in model_group_alias_map + elif llm_router is not None and litellm.model_group_alias_map is not None and data["model"] in litellm.model_group_alias_map: # model set in model_group_alias_map response = await llm_router.acompletion(**data) else: # router is not set response = await litellm.acompletion(**data) diff --git a/litellm/tests/test_router_get_deployments.py b/litellm/tests/test_router_get_deployments.py index bcc19685a..712867a51 100644 --- a/litellm/tests/test_router_get_deployments.py +++ b/litellm/tests/test_router_get_deployments.py @@ -322,7 +322,7 @@ def test_model_group_aliases(): router = Router( model_list=model_list, ) - + litellm.model_group_alias_map = {} for _ in range(20): selected_model = router.get_available_deployment("gpt-4") print("\n selected model", selected_model) From 7ddc0dad240f9992ad1bced98f05e75a8a51c74b Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Wed, 6 Dec 2023 21:25:30 -0800 Subject: [PATCH 217/460] (test) fix test_model_group_aliases --- litellm/tests/test_router_get_deployments.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/tests/test_router_get_deployments.py b/litellm/tests/test_router_get_deployments.py index 712867a51..3e6bbd2b6 100644 --- a/litellm/tests/test_router_get_deployments.py +++ b/litellm/tests/test_router_get_deployments.py @@ -322,7 +322,6 @@ def test_model_group_aliases(): router = Router( model_list=model_list, ) - litellm.model_group_alias_map = {} for _ in range(20): selected_model = router.get_available_deployment("gpt-4") print("\n selected model", selected_model) @@ -331,6 +330,7 @@ def test_model_group_aliases(): pytest.fail(f"Selected model {selected_model_name} is not gpt-3.5-turbo") router.reset() + litellm.model_group_alias_map = {} except Exception as e: traceback.print_exc() pytest.fail(f"Error occurred: {e}") From a4c79fd116a41952cf8549112debb8d8d22de9b4 Mon Sep 17 00:00:00 2001 From: David Manouchehri Date: Thu, 7 Dec 2023 01:12:25 -0500 Subject: [PATCH 218/460] (pricing) Add Claude v2.1 for Bedrock --- model_prices_and_context_window.json | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/model_prices_and_context_window.json b/model_prices_and_context_window.json index ac500abdb..6f224156d 100644 --- a/model_prices_and_context_window.json +++ b/model_prices_and_context_window.json @@ -644,6 +644,14 @@ "litellm_provider": "bedrock", "mode": "chat" }, + "anthropic.claude-v2:1": { + "max_tokens": 200000, + "max_output_tokens": 8191, + "input_cost_per_token": 0.00001102, + "output_cost_per_token": 0.00003268, + "litellm_provider": "bedrock", + "mode": "chat" + }, "anthropic.claude-instant-v1": { "max_tokens": 100000, "max_output_tokens": 8191, From f1779ff4c81a97c51765e507f851e93983c90c0b Mon Sep 17 00:00:00 2001 From: David Manouchehri Date: Thu, 7 Dec 2023 01:19:59 -0500 Subject: [PATCH 219/460] (pricing) Fix Claude on Bedrock prices --- model_prices_and_context_window.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/model_prices_and_context_window.json b/model_prices_and_context_window.json index 6f224156d..454b2504a 100644 --- a/model_prices_and_context_window.json +++ b/model_prices_and_context_window.json @@ -631,24 +631,24 @@ "anthropic.claude-v1": { "max_tokens": 100000, "max_output_tokens": 8191, - "input_cost_per_token": 0.00001102, - "output_cost_per_token": 0.00003268, + "input_cost_per_token": 0.000008, + "output_cost_per_token": 0.000024, "litellm_provider": "bedrock", "mode": "chat" }, "anthropic.claude-v2": { "max_tokens": 100000, "max_output_tokens": 8191, - "input_cost_per_token": 0.00001102, - "output_cost_per_token": 0.00003268, + "input_cost_per_token": 0.000008, + "output_cost_per_token": 0.000024, "litellm_provider": "bedrock", "mode": "chat" }, "anthropic.claude-v2:1": { "max_tokens": 200000, "max_output_tokens": 8191, - "input_cost_per_token": 0.00001102, - "output_cost_per_token": 0.00003268, + "input_cost_per_token": 0.000008, + "output_cost_per_token": 0.000024, "litellm_provider": "bedrock", "mode": "chat" }, From c1e95740b0f29589b065b38deb5fe1e9939b6298 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 6 Dec 2023 22:44:01 -0800 Subject: [PATCH 220/460] fix(bedrock.py): fix output format for cohere embeddings --- litellm/llms/bedrock.py | 7 +++++-- litellm/main.py | 18 +++++++++++------- litellm/proxy/proxy_server.py | 18 +++++++++++++++++- litellm/tests/test_embedding.py | 11 +++++++---- 4 files changed, 40 insertions(+), 14 deletions(-) diff --git a/litellm/llms/bedrock.py b/litellm/llms/bedrock.py index 8b05f0153..9b6510400 100644 --- a/litellm/llms/bedrock.py +++ b/litellm/llms/bedrock.py @@ -552,8 +552,8 @@ def _embedding_func_single( ## FORMAT EMBEDDING INPUT ## provider = model.split(".")[0] inference_params = copy.deepcopy(optional_params) - input = input.replace(os.linesep, " ") if provider == "amazon": + input = input.replace(os.linesep, " ") data = {"inputText": input, **inference_params} # data = json.dumps(data) elif provider == "cohere": @@ -590,7 +590,10 @@ def _embedding_func_single( original_response=response_body, ) if provider == "cohere": - return response_body.get("embeddings") + response = response_body.get("embeddings") + # flatten list + response = [item for sublist in response for item in sublist] + return response elif provider == "amazon": return response_body.get("embedding") except Exception as e: diff --git a/litellm/main.py b/litellm/main.py index a8b499af4..6d7fc3403 100644 --- a/litellm/main.py +++ b/litellm/main.py @@ -1775,16 +1775,20 @@ def embedding( rpm = kwargs.pop("rpm", None) tpm = kwargs.pop("tpm", None) aembedding = kwargs.pop("aembedding", None) - + openai_params = ["functions", "function_call", "temperature", "temperature", "top_p", "n", "stream", "stop", "max_tokens", "presence_penalty", "frequency_penalty", "logit_bias", "user", "request_timeout", "api_base", "api_version", "api_key", "deployment_id", "organization", "base_url", "default_headers", "timeout", "response_format", "seed", "tools", "tool_choice", "max_retries", "encoding_format"] + litellm_params = ["metadata", "acompletion", "caching", "return_async", "mock_response", "api_key", "api_version", "api_base", "force_timeout", "logger_fn", "verbose", "custom_llm_provider", "litellm_logging_obj", "litellm_call_id", "use_client", "id", "fallbacks", "azure", "headers", "model_list", "num_retries", "context_window_fallback_dict", "roles", "final_prompt_value", "bos_token", "eos_token", "request_timeout", "complete_response", "self", "client", "rpm", "tpm", "input_cost_per_token", "output_cost_per_token", "hf_model_name"] + default_params = openai_params + litellm_params + non_default_params = {k: v for k,v in kwargs.items() if k not in default_params} # model-specific params - pass them straight to the model/provider optional_params = {} - for param in kwargs: - if param != "metadata": # filter out metadata from optional_params - optional_params[param] = kwargs[param] + for param in non_default_params: + optional_params[param] = kwargs[param] model, custom_llm_provider, dynamic_api_key, api_base = get_llm_provider(model=model, custom_llm_provider=custom_llm_provider, api_base=api_base, api_key=api_key) + + try: response = None logging = litellm_logging_obj - logging.update_environment_variables(model=model, user="", optional_params={}, litellm_params={"timeout": timeout, "azure": azure, "litellm_call_id": litellm_call_id, "logger_fn": logger_fn}) + logging.update_environment_variables(model=model, user="", optional_params=optional_params, litellm_params={"timeout": timeout, "azure": azure, "litellm_call_id": litellm_call_id, "logger_fn": logger_fn}) if azure == True or custom_llm_provider == "azure": # azure configs api_type = get_secret("AZURE_API_TYPE") or "azure" @@ -1903,7 +1907,7 @@ def embedding( input=input, encoding=encoding, logging_obj=logging, - optional_params=kwargs, + optional_params=optional_params, model_response= EmbeddingResponse() ) elif custom_llm_provider == "sagemaker": @@ -1912,7 +1916,7 @@ def embedding( input=input, encoding=encoding, logging_obj=logging, - optional_params=kwargs, + optional_params=optional_params, model_response= EmbeddingResponse(), print_verbose=print_verbose ) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index bff4d5daa..2b0a36934 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -989,6 +989,7 @@ async def embeddings(request: Request, user_api_key_dict: UserAPIKeyAuth = Depen body = await request.body() data = orjson.loads(body) + data["user"] = user_api_key_dict.user_id data["model"] = ( general_settings.get("embedding_model", None) # server default @@ -1001,9 +1002,24 @@ async def embeddings(request: Request, user_api_key_dict: UserAPIKeyAuth = Depen data["metadata"]["user_api_key"] = user_api_key_dict.api_key else: data["metadata"] = {"user_api_key": user_api_key_dict.api_key} + router_model_names = [m["model_name"] for m in llm_model_list] if llm_model_list is not None else [] + print(f"received data: {data['input']}") + if "input" in data and isinstance(data['input'], list) and isinstance(data['input'][0], list) and isinstance(data['input'][0][0], int): # check if array of tokens passed in + # check if non-openai/azure model called - e.g. for langchain integration + if data["model"] in router_model_names: + for m in llm_model_list: + if m["model_name"] == data["model"] and (m["litellm_params"]["model"] in litellm.open_ai_embedding_models + or m["litellm_params"]["model"].startswith("azure/")): + pass + else: + # non-openai/azure embedding model called with token input + input_list = [] + for i in data["input"]: + input_list.append(litellm.decode(model="gpt-3.5-turbo", tokens=i)) + data["input"] = input_list + break ## ROUTE TO CORRECT ENDPOINT ## - router_model_names = [m["model_name"] for m in llm_model_list] if llm_model_list is not None else [] if llm_router is not None and data["model"] in router_model_names: # model in router model list response = await llm_router.aembedding(**data) elif llm_router is not None and data["model"] in llm_router.deployment_names: # model in router deployments, calling a specific deployment on the router diff --git a/litellm/tests/test_embedding.py b/litellm/tests/test_embedding.py index bca0887ae..5361d1927 100644 --- a/litellm/tests/test_embedding.py +++ b/litellm/tests/test_embedding.py @@ -161,20 +161,23 @@ def test_bedrock_embedding_titan(): print(f"response:", response) except Exception as e: pytest.fail(f"Error occurred: {e}") -test_bedrock_embedding_titan() +# test_bedrock_embedding_titan() def test_bedrock_embedding_cohere(): try: - # litellm.set_verbose=True + litellm.set_verbose=False response = embedding( model="cohere.embed-multilingual-v3", input=["good morning from litellm, attempting to embed data", "lets test a second string for good measure"], aws_region_name="os.environ/AWS_REGION_NAME_2" ) + assert isinstance(response['data'][0]['embedding'], list), "Expected response to be a list" + print(f"type of first embedding:", type(response['data'][0]['embedding'][0])) + assert all(isinstance(x, float) for x in response['data'][0]['embedding']), "Expected response to be a list of floats" # print(f"response:", response) except Exception as e: pytest.fail(f"Error occurred: {e}") -# test_bedrock_embedding_cohere() +test_bedrock_embedding_cohere() # comment out hf tests - since hf endpoints are unstable def test_hf_embedding(): @@ -234,7 +237,7 @@ def test_sagemaker_embeddings(): print(f"response: {response}") except Exception as e: pytest.fail(f"Error occurred: {e}") -test_sagemaker_embeddings() +# test_sagemaker_embeddings() # def local_proxy_embeddings(): # litellm.set_verbose=True # response = embedding( From 6fae3fde22437c8da7d717c9cbabe91fb84bdacf Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 6 Dec 2023 22:46:45 -0800 Subject: [PATCH 221/460] test(test_embeddings.py): improve testing for titan embeddings --- litellm/tests/test_embedding.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/litellm/tests/test_embedding.py b/litellm/tests/test_embedding.py index 5361d1927..71e59819f 100644 --- a/litellm/tests/test_embedding.py +++ b/litellm/tests/test_embedding.py @@ -159,6 +159,9 @@ def test_bedrock_embedding_titan(): "lets test a second string for good measure"] ) print(f"response:", response) + assert isinstance(response['data'][0]['embedding'], list), "Expected response to be a list" + print(f"type of first embedding:", type(response['data'][0]['embedding'][0])) + assert all(isinstance(x, float) for x in response['data'][0]['embedding']), "Expected response to be a list of floats" except Exception as e: pytest.fail(f"Error occurred: {e}") # test_bedrock_embedding_titan() @@ -177,7 +180,7 @@ def test_bedrock_embedding_cohere(): except Exception as e: pytest.fail(f"Error occurred: {e}") -test_bedrock_embedding_cohere() +# test_bedrock_embedding_cohere() # comment out hf tests - since hf endpoints are unstable def test_hf_embedding(): From e8f526e45f1cda670e40b49e9c630ee80afba254 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 6 Dec 2023 22:46:53 -0800 Subject: [PATCH 222/460] =?UTF-8?q?bump:=20version=201.11.0=20=E2=86=92=20?= =?UTF-8?q?1.11.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index bdf9b5a85..be84351ee 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "litellm" -version = "1.11.0" +version = "1.11.1" description = "Library to easily interface with LLM API providers" authors = ["BerriAI"] license = "MIT License" @@ -55,7 +55,7 @@ requires = ["poetry-core", "wheel"] build-backend = "poetry.core.masonry.api" [tool.commitizen] -version = "1.11.0" +version = "1.11.1" version_files = [ "pyproject.toml:^version" ] From bd8d59e69371126b6985d248f07db49e905ecab4 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 6 Dec 2023 22:49:30 -0800 Subject: [PATCH 223/460] refactor(proxy_server.py): linting fix --- litellm/proxy/proxy_server.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 2b0a36934..abc954452 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -1006,7 +1006,7 @@ async def embeddings(request: Request, user_api_key_dict: UserAPIKeyAuth = Depen print(f"received data: {data['input']}") if "input" in data and isinstance(data['input'], list) and isinstance(data['input'][0], list) and isinstance(data['input'][0][0], int): # check if array of tokens passed in # check if non-openai/azure model called - e.g. for langchain integration - if data["model"] in router_model_names: + if llm_model_list is not None and data["model"] in router_model_names: for m in llm_model_list: if m["model_name"] == data["model"] and (m["litellm_params"]["model"] in litellm.open_ai_embedding_models or m["litellm_params"]["model"].startswith("azure/")): From 8cc0e8e5c56a4fff97d853404edda41fcc68b1d1 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 6 Dec 2023 22:57:14 -0800 Subject: [PATCH 224/460] ci(pre-commit-config.yaml): adding mypy linting as a pre-commit hook --- .pre-commit-config.yaml | 11 ++++++++++- litellm/_logging.py | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 8bda916bc..5e74b6596 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -5,4 +5,13 @@ repos: - id: flake8 exclude: ^litellm/tests/|^litellm/proxy/|^litellm/integrations/ additional_dependencies: [flake8-print] - files: litellm/.*\.py \ No newline at end of file + files: litellm/.*\.py +- repo: local + hooks: + - id: mypy + name: mypy + entry: python3 -m mypy --ignore-missing-imports + language: system + types: [python] + files: ^litellm/ + exclude: ^litellm/tests/ \ No newline at end of file diff --git a/litellm/_logging.py b/litellm/_logging.py index fd21d22e3..ab776b9b6 100644 --- a/litellm/_logging.py +++ b/litellm/_logging.py @@ -2,4 +2,4 @@ set_verbose = False def print_verbose(print_statement): if set_verbose: - print(print_statement) \ No newline at end of file + print(print_statement) # noqa \ No newline at end of file From d18a5e8a119242412cfd1b2e076dddadf6003390 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 6 Dec 2023 23:14:02 -0800 Subject: [PATCH 225/460] docs(quick_start.md): adding langchain embedding tutorials to docs --- docs/my-website/docs/proxy/quick_start.md | 34 +++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/docs/my-website/docs/proxy/quick_start.md b/docs/my-website/docs/proxy/quick_start.md index d74de240d..f6775bf41 100644 --- a/docs/my-website/docs/proxy/quick_start.md +++ b/docs/my-website/docs/proxy/quick_start.md @@ -114,6 +114,40 @@ response = chat(messages) print(response) ``` + + + +```python +from langchain.embeddings import OpenAIEmbeddings + +embeddings = OpenAIEmbeddings(model="sagemaker-embeddings", openai_api_base="http://0.0.0.0:8000", openai_api_key="temp-key") + + +text = "This is a test document." + +query_result = embeddings.embed_query(text) + +print(f"SAGEMAKER EMBEDDINGS") +print(query_result[:5]) + +embeddings = OpenAIEmbeddings(model="bedrock-embeddings", openai_api_base="http://0.0.0.0:8000", openai_api_key="temp-key") + +text = "This is a test document." + +query_result = embeddings.embed_query(text) + +print(f"BEDROCK EMBEDDINGS") +print(query_result[:5]) + +embeddings = OpenAIEmbeddings(model="bedrock-titan-embeddings", openai_api_base="http://0.0.0.0:8000", openai_api_key="temp-key") + +text = "This is a test document." + +query_result = embeddings.embed_query(text) + +print(f"TITAN EMBEDDINGS") +print(query_result[:5]) +``` From c7aaa4adf8495657b1c2bf5c8bd21a54c34d9169 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Thu, 7 Dec 2023 09:22:01 -0800 Subject: [PATCH 226/460] docs(deploy.md): add docker instructions to deploy docs --- docs/my-website/docs/proxy/deploy.md | 72 +++++++++++++++++++++++++++- litellm/proxy/utils.py | 21 -------- 2 files changed, 71 insertions(+), 22 deletions(-) diff --git a/docs/my-website/docs/proxy/deploy.md b/docs/my-website/docs/proxy/deploy.md index 5f9c4cb5f..5c4657ea3 100644 --- a/docs/my-website/docs/proxy/deploy.md +++ b/docs/my-website/docs/proxy/deploy.md @@ -1,5 +1,75 @@ # Deploying LiteLLM Proxy -### Deploy on Render https://render.com/ +## Quick Start Docker Image: Github Container Registry + +### Pull the litellm ghcr docker image +See the latest available ghcr docker image here: +https://github.com/berriai/litellm/pkgs/container/litellm + +```shell +docker pull ghcr.io/berriai/litellm:main-v1.10.1 +``` + +### Run the Docker Image +```shell +docker run ghcr.io/berriai/litellm:main-v1.10.0 +``` + +#### Run the Docker Image with LiteLLM CLI args + +See all supported CLI args [here](https://docs.litellm.ai/docs/proxy/cli): + +Here's how you can run the docker image and pass your config to `litellm` +```shell +docker run ghcr.io/berriai/litellm:main-v1.10.0 --config your_config.yaml +``` + +Here's how you can run the docker image and start litellm on port 8002 with `num_workers=8` +```shell +docker run ghcr.io/berriai/litellm:main-v1.10.0 --port 8002 --num_workers 8 +``` + +#### Run the Docker Image using docker compose + +**Step 1** + +- (Recommended) Use the example file `docker-compose.example.yml` given in the project root. e.g. https://github.com/BerriAI/litellm/blob/main/docker-compose.example.yml + +- Rename the file `docker-compose.example.yml` to `docker-compose.yml`. + +Here's an example `docker-compose.yml` file +```yaml +version: "3.9" +services: + litellm: + image: ghcr.io/berriai/litellm:main + ports: + - "8000:8000" # Map the container port to the host, change the host port if necessary + volumes: + - ./litellm-config.yaml:/app/config.yaml # Mount the local configuration file + # You can change the port or number of workers as per your requirements or pass any new supported CLI augument. Make sure the port passed here matches with the container port defined above in `ports` value + command: [ "--config", "/app/config.yaml", "--port", "8000", "--num_workers", "8" ] + +# ...rest of your docker-compose config if any +``` + +**Step 2** + +Create a `litellm-config.yaml` file with your LiteLLM config relative to your `docker-compose.yml` file. + +Check the config doc [here](https://docs.litellm.ai/docs/proxy/configs) + +**Step 3** + +Run the command `docker-compose up` or `docker compose up` as per your docker installation. + +> Use `-d` flag to run the container in detached mode (background) e.g. `docker compose up -d` + + +Your LiteLLM container should be running now on the defined port e.g. `8000`. + + +## Deploy on Render https://render.com/ + diff --git a/litellm/proxy/utils.py b/litellm/proxy/utils.py index 9c6a2c17e..9e4ec5900 100644 --- a/litellm/proxy/utils.py +++ b/litellm/proxy/utils.py @@ -97,27 +97,6 @@ class PrismaClient: await self.db.disconnect() # ### CUSTOM FILE ### -# def get_instance_fn(value: str, config_file_path: Optional[str]=None): -# try: -# # Split the path by dots to separate module from instance -# parts = value.split(".") -# # The module path is all but the last part, and the instance is the last part -# module_path = ".".join(parts[:-1]) -# instance_name = parts[-1] - -# if config_file_path is not None: -# directory = os.path.dirname(config_file_path) -# module_path = os.path.join(directory, module_path) -# # Dynamically import the module -# module = importlib.import_module(module_path) - -# # Get the instance from the module -# instance = getattr(module, instance_name) - -# return instance -# except ImportError as e: -# print(e) -# raise ImportError(f"Could not import file at {value}") def get_instance_fn(value: str, config_file_path: Optional[str] = None) -> Any: try: From e9d93c624c7be9cf2c06fed88c95dd5943fea1da Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Thu, 7 Dec 2023 09:37:07 -0800 Subject: [PATCH 227/460] (fix) vertex ai - streaming chunks --- litellm/utils.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/litellm/utils.py b/litellm/utils.py index 3dcfe1362..86f5a835c 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -5311,8 +5311,15 @@ class CustomStreamWrapper: self.sent_last_chunk = True elif self.custom_llm_provider and self.custom_llm_provider == "vertex_ai": try: - - completion_obj["content"] = str(chunk) + # print(chunk) + if hasattr(chunk, 'text'): + # vertexAI chunks return + # MultiCandidateTextGenerationResponse(text=' ```python\n# This Python code says "Hi" 100 times.\n\n# Create', _prediction_response=Prediction(predictions=[{'candidates': [{'content': ' ```python\n# This Python code says "Hi" 100 times.\n\n# Create', 'author': '1'}], 'citationMetadata': [{'citations': None}], 'safetyAttributes': [{'blocked': False, 'scores': None, 'categories': None}]}], deployed_model_id='', model_version_id=None, model_resource_name=None, explanations=None), is_blocked=False, safety_attributes={}, candidates=[ ```python + # This Python code says "Hi" 100 times. + # Create]) + completion_obj["content"] = chunk.text + else: + completion_obj["content"] = str(chunk) except StopIteration as e: if self.sent_last_chunk: raise e From d2eee342fbf69f520056c4583b88ee0673322822 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Thu, 7 Dec 2023 09:38:14 -0800 Subject: [PATCH 228/460] (feat) vertex ai - better debugging --- litellm/llms/vertex_ai.py | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/litellm/llms/vertex_ai.py b/litellm/llms/vertex_ai.py index 9d468306b..11a1e0c6e 100644 --- a/litellm/llms/vertex_ai.py +++ b/litellm/llms/vertex_ai.py @@ -93,45 +93,58 @@ def completion( prompt = " ".join([message["content"] for message in messages]) mode = "" + + request_str = "" if model in litellm.vertex_chat_models: chat_model = ChatModel.from_pretrained(model) mode = "chat" + request_str += f"chat_model = ChatModel.from_pretrained({model})\n" elif model in litellm.vertex_text_models: text_model = TextGenerationModel.from_pretrained(model) mode = "text" + request_str += f"text_model = TextGenerationModel.from_pretrained({model})\n" elif model in litellm.vertex_code_text_models: text_model = CodeGenerationModel.from_pretrained(model) mode = "text" + request_str += f"text_model = CodeGenerationModel.from_pretrained({model})\n" else: # vertex_code_chat_models chat_model = CodeChatModel.from_pretrained(model) mode = "chat" + request_str += f"chat_model = CodeChatModel.from_pretrained({model})\n" if mode == "chat": chat = chat_model.start_chat() + request_str+= f"chat = chat_model.start_chat()\n" ## LOGGING - logging_obj.pre_call(input=prompt, api_key=None, additional_args={"complete_input_dict": optional_params}) + if "stream" in optional_params and optional_params["stream"] == True: # NOTE: VertexAI does not accept stream=True as a param and raises an error, # we handle this by removing 'stream' from optional params and sending the request # after we get the response we add optional_params["stream"] = True, since main.py needs to know it's a streaming response to then transform it for the OpenAI format optional_params.pop("stream", None) # vertex ai raises an error when passing stream in optional params + request_str += f"chat.send_message_streaming({prompt}, **{optional_params})\n" + logging_obj.pre_call(input=prompt, api_key=None, additional_args={"complete_input_dict": optional_params, "request_str": request_str}) model_response = chat.send_message_streaming(prompt, **optional_params) optional_params["stream"] = True return model_response + request_str += f"chat.send_message({prompt}, **{optional_params}).text\n" + logging_obj.pre_call(input=prompt, api_key=None, additional_args={"complete_input_dict": optional_params, "request_str": request_str}) completion_response = chat.send_message(prompt, **optional_params).text elif mode == "text": - ## LOGGING - logging_obj.pre_call(input=prompt, api_key=None) if "stream" in optional_params and optional_params["stream"] == True: optional_params.pop("stream", None) # See note above on handling streaming for vertex ai + request_str += f"text_model.predict_streaming({prompt}, **{optional_params})\n" + logging_obj.pre_call(input=prompt, api_key=None, additional_args={"complete_input_dict": optional_params, "request_str": request_str}) model_response = text_model.predict_streaming(prompt, **optional_params) optional_params["stream"] = True return model_response + request_str += f"text_model.predict({prompt}, **{optional_params}).text\n" + logging_obj.pre_call(input=prompt, api_key=None, additional_args={"complete_input_dict": optional_params, "request_str": request_str}) completion_response = text_model.predict(prompt, **optional_params).text ## LOGGING From e823e8d99ed3c46023c362eb56ab013902a5d4c0 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Thu, 7 Dec 2023 10:20:21 -0800 Subject: [PATCH 229/460] (test) add vertex ai to ci/cd --- .../tests/test_amazing_vertex_completion.py | 101 ++++++++++++++++++ litellm/tests/test_completion.py | 39 +------ litellm/tests/vertex_key.json | 13 +++ 3 files changed, 115 insertions(+), 38 deletions(-) create mode 100644 litellm/tests/test_amazing_vertex_completion.py create mode 100644 litellm/tests/vertex_key.json diff --git a/litellm/tests/test_amazing_vertex_completion.py b/litellm/tests/test_amazing_vertex_completion.py new file mode 100644 index 000000000..b0de9548c --- /dev/null +++ b/litellm/tests/test_amazing_vertex_completion.py @@ -0,0 +1,101 @@ + +import sys, os +import traceback +from dotenv import load_dotenv + +load_dotenv() +import os, io + +sys.path.insert( + 0, os.path.abspath("../..") +) # Adds the parent directory to the system path +import pytest +import litellm +from litellm import embedding, completion, completion_cost, Timeout +from litellm import RateLimitError +import json +import os +import tempfile + +litellm.num_retries = 3 +litellm.cache = None +user_message = "Write a short poem about the sky" +messages = [{"content": user_message, "role": "user"}] + + +def load_vertex_ai_credentials(): + # Define the path to the vertex_key.json file + vertex_key_path = 'vertex_key.json' + + # Read the existing content of the file or create an empty dictionary + try: + with open(vertex_key_path, 'r') as file: + # Read the file content + content = file.read() + + # If the file is empty or not valid JSON, create an empty dictionary + if not content or not content.strip(): + service_account_key_data = {} + else: + # Attempt to load the existing JSON content + file.seek(0) + service_account_key_data = json.load(file) + except FileNotFoundError: + # If the file doesn't exist, create an empty dictionary + service_account_key_data = {} + + # Update the service_account_key_data with environment variables + private_key_id = os.environ.get("VERTEX_AI_PRIVATE_KEY_ID", "") + private_key = os.environ.get("VERTEX_AI_PRIVATE_KEY", "") + + service_account_key_data["private_key_id"] = private_key_id + service_account_key_data["private_key"] = private_key + + # Create a temporary file + with tempfile.NamedTemporaryFile(mode='w+', delete=False) as temp_file: + # Write the updated content to the temporary file + json.dump(service_account_key_data, temp_file, indent=2) + + # Export the temporary file as GOOGLE_APPLICATION_CREDENTIALS + os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = os.path.abspath(temp_file.name) + + +def test_vertex_ai(): + + load_vertex_ai_credentials() + test_models = ["codechat-bison"] + litellm.vertex_chat_models + litellm.vertex_code_chat_models + litellm.vertex_text_models + litellm.vertex_code_text_models + # test_models = ["chat-bison"] + litellm.set_verbose=True + for model in test_models: + try: + if model in ["code-gecko@001", "code-gecko@latest", "code-bison@001"]: + # our account does not have access to this model + continue + print("making request", model) + response = completion(model=model, messages=[{'role': 'user', 'content': 'hi'}]) + print(response) + + print(response.usage.completion_tokens) + print(response['usage']['completion_tokens']) + assert type(response.choices[0].message.content) == str + except Exception as e: + pytest.fail(f"Error occurred: {e}") +test_vertex_ai() + +def test_vertex_ai_stream(): + litellm.set_verbose=True + + test_models = litellm.vertex_chat_models + litellm.vertex_code_chat_models + litellm.vertex_text_models + litellm.vertex_code_text_models + for model in test_models: + try: + if model in ["code-gecko@001", "code-gecko@latest", "code-bison@001"]: + # our account does not have access to this model + continue + print("making request", model) + response = completion(model=model, messages=[{"role": "user", "content": "write 100 line code code for saying hi"}], stream=True) + for chunk in response: + print(chunk) + # pass + except Exception as e: + pytest.fail(f"Error occurred: {e}") +test_vertex_ai_stream() diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index 774131a5c..023f1ebd2 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -1051,7 +1051,7 @@ def test_completion_sagemaker(): print(response) except Exception as e: pytest.fail(f"Error occurred: {e}") -test_completion_sagemaker() +# test_completion_sagemaker() def test_completion_chat_sagemaker(): try: @@ -1319,43 +1319,6 @@ def test_completion_bedrock_claude_completion_auth(): # test_completion_custom_api_base() -# def test_vertex_ai(): -# test_models = ["codechat-bison"] + litellm.vertex_chat_models + litellm.vertex_code_chat_models + litellm.vertex_text_models + litellm.vertex_code_text_models -# # test_models = ["chat-bison"] -# for model in test_models: -# try: -# if model in ["code-gecko@001", "code-gecko@latest"]: -# # our account does not have access to this model -# continue -# print("making request", model) -# response = completion(model=model, messages=[{'role': 'user', 'content': 'hi'}]) -# print(response) - -# print(response.usage.completion_tokens) -# print(response['usage']['completion_tokens']) -# assert type(response.choices[0].message.content) == str -# except Exception as e: -# pytest.fail(f"Error occurred: {e}") -# test_vertex_ai() - -# def test_vertex_ai_stream(): -# litellm.set_verbose=False -# test_models = litellm.vertex_chat_models + litellm.vertex_code_chat_models + litellm.vertex_text_models + litellm.vertex_code_text_models -# for model in test_models: -# try: -# if model in ["code-gecko@001", "code-gecko@latest"]: -# # our account does not have access to this model -# continue -# print("making request", model) -# response = completion(model=model, messages=[{"role": "user", "content": "write 100 line code code for saying hi"}], stream=True) -# for chunk in response: -# print(chunk) -# # pass -# except Exception as e: -# pytest.fail(f"Error occurred: {e}") -# test_vertex_ai_stream() - - def test_completion_with_fallbacks(): print(f"RUNNING TEST COMPLETION WITH FALLBACKS - test_completion_with_fallbacks") fallbacks = ["gpt-3.5-turbo", "gpt-3.5-turbo", "command-nightly"] diff --git a/litellm/tests/vertex_key.json b/litellm/tests/vertex_key.json new file mode 100644 index 000000000..728fcdb98 --- /dev/null +++ b/litellm/tests/vertex_key.json @@ -0,0 +1,13 @@ +{ + "type": "service_account", + "project_id": "hardy-device-386718", + "private_key_id": "", + "private_key": "", + "client_email": "litellm-vertexai-ci-cd@hardy-device-386718.iam.gserviceaccount.com", + "client_id": "110281020501213430254", + "auth_uri": "https://accounts.google.com/o/oauth2/auth", + "token_uri": "https://oauth2.googleapis.com/token", + "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", + "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/litellm-vertexai-ci-cd%40hardy-device-386718.iam.gserviceaccount.com", + "universe_domain": "googleapis.com" +} \ No newline at end of file From f32e55780a3419543326be558e2bfb778d56a384 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Thu, 7 Dec 2023 10:21:09 -0800 Subject: [PATCH 230/460] (ci/cd) add google-cloud-aiplatform --- .circleci/requirements.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.circleci/requirements.txt b/.circleci/requirements.txt index b7291c9c6..148749e4b 100644 --- a/.circleci/requirements.txt +++ b/.circleci/requirements.txt @@ -10,4 +10,5 @@ anthropic boto3 appdirs orjson -pydantic \ No newline at end of file +pydantic +google-cloud-aiplatform \ No newline at end of file From a2b89b212c0d0adf9a0f3eb7cc95ef3af45b7db8 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Thu, 7 Dec 2023 10:30:29 -0800 Subject: [PATCH 231/460] (ci/cd) pip install google-cloud-aiplatform --- .circleci/config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index caf0e8396..d3d51a483 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -29,6 +29,7 @@ jobs: pip install pytest-asyncio pip install mypy pip install -q google-generativeai + pip install google-cloud-aiplatform pip install "boto3>=1.28.57" pip install appdirs pip install langchain From 01c7dc197a4a7d9ff8eeea0a39116e4d9624e919 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Thu, 7 Dec 2023 10:31:32 -0800 Subject: [PATCH 232/460] (ci/cd) vertex ai --- litellm/tests/test_amazing_vertex_completion.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/tests/test_amazing_vertex_completion.py b/litellm/tests/test_amazing_vertex_completion.py index b0de9548c..580d5a4ca 100644 --- a/litellm/tests/test_amazing_vertex_completion.py +++ b/litellm/tests/test_amazing_vertex_completion.py @@ -8,7 +8,7 @@ import os, io sys.path.insert( 0, os.path.abspath("../..") -) # Adds the parent directory to the system path +) # Adds the parent directory to the system path import pytest import litellm from litellm import embedding, completion, completion_cost, Timeout From 378f211a295a27ef8db9b6802ad08e93ce375039 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Thu, 7 Dec 2023 10:36:58 -0800 Subject: [PATCH 233/460] (ci/cd) debugging --- litellm/tests/test_amazing_vertex_completion.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/litellm/tests/test_amazing_vertex_completion.py b/litellm/tests/test_amazing_vertex_completion.py index 580d5a4ca..1d9aa9b61 100644 --- a/litellm/tests/test_amazing_vertex_completion.py +++ b/litellm/tests/test_amazing_vertex_completion.py @@ -51,10 +51,15 @@ def load_vertex_ai_credentials(): service_account_key_data["private_key_id"] = private_key_id service_account_key_data["private_key"] = private_key + for key in service_account_key_data: + if key not in ["private_key_id", "private_key"]: + print(f"Key: {key}, Value: {service_account_key_data[key]}") + # Create a temporary file with tempfile.NamedTemporaryFile(mode='w+', delete=False) as temp_file: # Write the updated content to the temporary file json.dump(service_account_key_data, temp_file, indent=2) + # Export the temporary file as GOOGLE_APPLICATION_CREDENTIALS os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = os.path.abspath(temp_file.name) From 0f8225c3eb26548777c9fd1de02265a0bb7c52de Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Thu, 7 Dec 2023 10:38:06 -0800 Subject: [PATCH 234/460] (ci/cd) use relative path for vertex --- litellm/tests/test_amazing_vertex_completion.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/tests/test_amazing_vertex_completion.py b/litellm/tests/test_amazing_vertex_completion.py index 1d9aa9b61..ba0506a0f 100644 --- a/litellm/tests/test_amazing_vertex_completion.py +++ b/litellm/tests/test_amazing_vertex_completion.py @@ -25,7 +25,7 @@ messages = [{"content": user_message, "role": "user"}] def load_vertex_ai_credentials(): # Define the path to the vertex_key.json file - vertex_key_path = 'vertex_key.json' + vertex_key_path = os.getcwd + '/vertex_key.json' # Read the existing content of the file or create an empty dictionary try: From 8dd6786123ef33f09431690ffef561a4c40ef43d Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Thu, 7 Dec 2023 10:39:24 -0800 Subject: [PATCH 235/460] (ci/cd) vertex ai --- litellm/tests/test_amazing_vertex_completion.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/tests/test_amazing_vertex_completion.py b/litellm/tests/test_amazing_vertex_completion.py index ba0506a0f..a028250ce 100644 --- a/litellm/tests/test_amazing_vertex_completion.py +++ b/litellm/tests/test_amazing_vertex_completion.py @@ -25,7 +25,7 @@ messages = [{"content": user_message, "role": "user"}] def load_vertex_ai_credentials(): # Define the path to the vertex_key.json file - vertex_key_path = os.getcwd + '/vertex_key.json' + vertex_key_path = os.getcwd() + '/vertex_key.json' # Read the existing content of the file or create an empty dictionary try: From 85668ff41553aa8c13d4c9fa198f84441c99fad9 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Thu, 7 Dec 2023 10:44:45 -0800 Subject: [PATCH 236/460] (ci/cd) vertex ai --- litellm/tests/test_amazing_vertex_completion.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/litellm/tests/test_amazing_vertex_completion.py b/litellm/tests/test_amazing_vertex_completion.py index a028250ce..ddc834876 100644 --- a/litellm/tests/test_amazing_vertex_completion.py +++ b/litellm/tests/test_amazing_vertex_completion.py @@ -25,12 +25,15 @@ messages = [{"content": user_message, "role": "user"}] def load_vertex_ai_credentials(): # Define the path to the vertex_key.json file - vertex_key_path = os.getcwd() + '/vertex_key.json' + print("loading vertex ai credentials") + filepath = os.path.dirname(os.path.abspath(__file__)) + vertex_key_path = filepath + '/vertex_key.json' # Read the existing content of the file or create an empty dictionary try: with open(vertex_key_path, 'r') as file: # Read the file content + print("Read vertexai file path") content = file.read() # If the file is empty or not valid JSON, create an empty dictionary From 90d474ff211fade10b765e78ffc4d7587ec2e51c Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Thu, 7 Dec 2023 10:50:58 -0800 Subject: [PATCH 237/460] (ci/cd) vertex ai --- litellm/tests/test_amazing_vertex_completion.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/tests/test_amazing_vertex_completion.py b/litellm/tests/test_amazing_vertex_completion.py index ddc834876..b1e4e6b5e 100644 --- a/litellm/tests/test_amazing_vertex_completion.py +++ b/litellm/tests/test_amazing_vertex_completion.py @@ -56,7 +56,7 @@ def load_vertex_ai_credentials(): for key in service_account_key_data: if key not in ["private_key_id", "private_key"]: - print(f"Key: {key}, Value: {service_account_key_data[key]}") + print(f"Key: {key}, Value: {service_account_key_data[key][:10]}...{service_account_key_data[key][:-10]}") # Create a temporary file with tempfile.NamedTemporaryFile(mode='w+', delete=False) as temp_file: From 69fc2694bbe00bd8242d025904c3ab7bfd6ad795 Mon Sep 17 00:00:00 2001 From: James4Ever0 Date: Fri, 8 Dec 2023 02:58:28 +0800 Subject: [PATCH 238/460] Update factory.py Fixing issue when calling from write-the -> langchain -> litellm served ollama --- litellm/llms/prompt_templates/factory.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/litellm/llms/prompt_templates/factory.py b/litellm/llms/prompt_templates/factory.py index 37c96d773..4274ef0e1 100644 --- a/litellm/llms/prompt_templates/factory.py +++ b/litellm/llms/prompt_templates/factory.py @@ -74,7 +74,7 @@ def ollama_pt(model, messages): # https://github.com/jmorganca/ollama/blob/af4cf messages=messages ) else: - prompt = "".join(m["content"] for m in messages) + prompt = "".join(m["content"] if isinstance(m['content'], str) is str else "".join(m['content']) for m in messages) return prompt def mistral_instruct_pt(messages): @@ -397,4 +397,4 @@ def prompt_factory(model: str, messages: list, custom_llm_provider: Optional[str return hf_chat_template(original_model_name, messages) except: return default_pt(messages=messages) # default that covers Bloom, T-5, any non-chat tuned model (e.g. base Llama2) - \ No newline at end of file + From 077f6b1298101079b72396bdf04f8ca0cf737720 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Thu, 7 Dec 2023 11:19:29 -0800 Subject: [PATCH 239/460] (ci/cd) vertex ai --- litellm/tests/test_amazing_vertex_completion.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/litellm/tests/test_amazing_vertex_completion.py b/litellm/tests/test_amazing_vertex_completion.py index b1e4e6b5e..c87438489 100644 --- a/litellm/tests/test_amazing_vertex_completion.py +++ b/litellm/tests/test_amazing_vertex_completion.py @@ -50,13 +50,16 @@ def load_vertex_ai_credentials(): # Update the service_account_key_data with environment variables private_key_id = os.environ.get("VERTEX_AI_PRIVATE_KEY_ID", "") private_key = os.environ.get("VERTEX_AI_PRIVATE_KEY", "") + private_key = private_key.replace("\\n", "\n") + + # from infisical import InfisicalClient + # client = InfisicalClient(token=os.getenv("INFISICAL_TOKEN")) + # private_key = (client.get_secret(secret_name="VERTEX_AI_PRIVATE_KEY", environment="prod").secret_value) + # private_key = private_key.replace("\\n", "\n") service_account_key_data["private_key_id"] = private_key_id service_account_key_data["private_key"] = private_key - for key in service_account_key_data: - if key not in ["private_key_id", "private_key"]: - print(f"Key: {key}, Value: {service_account_key_data[key][:10]}...{service_account_key_data[key][:-10]}") # Create a temporary file with tempfile.NamedTemporaryFile(mode='w+', delete=False) as temp_file: From d77e0cc716aeda8a4da9266f55658a14fd24696d Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Thu, 7 Dec 2023 11:27:37 -0800 Subject: [PATCH 240/460] docs(config.md): adding docs on parallel request rate limiting --- docs/my-website/docs/proxy/configs.md | 19 +- docs/my-website/package-lock.json | 8668 ++++++++++++++++++++++++- docs/my-website/package.json | 1 + docs/my-website/yarn.lock | 5649 ++++++++++++++-- litellm/proxy/_types.py | 31 +- litellm/proxy/proxy_server.py | 21 + 6 files changed, 14004 insertions(+), 385 deletions(-) diff --git a/docs/my-website/docs/proxy/configs.md b/docs/my-website/docs/proxy/configs.md index 490da2294..9977b3dc9 100644 --- a/docs/my-website/docs/proxy/configs.md +++ b/docs/my-website/docs/proxy/configs.md @@ -12,6 +12,9 @@ Set model list, `api_base`, `api_key`, `temperature` & proxy server settings (`m | `general_settings` | Server settings, example setting `master_key: sk-my_special_key` | | `environment_variables` | Environment Variables example, `REDIS_HOST`, `REDIS_PORT` | +**Complete List:** Check the Swagger UI docs on `/#/config.yaml` (e.g. http://0.0.0.0:8000/#/config.yaml), for everything you can pass in the config.yaml. + + ## Quick Start Set a model alias for your deployments. @@ -301,4 +304,18 @@ model_list: ```shell $ litellm --config /path/to/config.yaml -``` \ No newline at end of file +``` + +## Max Parallel Requests + +To rate limit a user based on the number of parallel requests, e.g.: +if user's parallel requests > x, send a 429 error +if user's parallel requests <= x, let them use the API freely. + +set the max parallel request limit on the config.yaml (note: this expects the user to be passing in an api key). + +```yaml +general_settings: + max_parallel_requests: 100 # max parallel requests for a user = 100 +``` + diff --git a/docs/my-website/package-lock.json b/docs/my-website/package-lock.json index a605fee7f..1809f37c6 100644 --- a/docs/my-website/package-lock.json +++ b/docs/my-website/package-lock.json @@ -14,6 +14,7 @@ "@docusaurus/preset-classic": "2.4.1", "@mdx-js/react": "^1.6.22", "clsx": "^1.2.1", + "docusaurus": "^1.14.7", "docusaurus-lunr-search": "^2.4.1", "prism-react-renderer": "^1.3.5", "react": "^17.0.2", @@ -773,6 +774,22 @@ "@babel/core": "^7.13.0" } }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-proposal-object-rest-spread": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", @@ -1885,6 +1902,28 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/polyfill": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.12.1.tgz", + "integrity": "sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==", + "deprecated": "🚨 This package has been deprecated in favor of separate inclusion of a polyfill and regenerator-runtime (when needed). See the @babel/polyfill docs (https://babeljs.io/docs/en/babel-polyfill) for more information.", + "dependencies": { + "core-js": "^2.6.5", + "regenerator-runtime": "^0.13.4" + } + }, + "node_modules/@babel/polyfill/node_modules/core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", + "hasInstallScript": true + }, + "node_modules/@babel/polyfill/node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, "node_modules/@babel/preset-env": { "version": "7.22.10", "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.10.tgz", @@ -2036,6 +2075,110 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/register": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.22.15.tgz", + "integrity": "sha512-V3Q3EqoQdn65RCgTLwauZaTfd1ShhwPmbBv+1dkZV/HpCGMKVyn6oFcRlI7RaKqiDQjX2Qd3AuoEguBgdjIKlg==", + "dependencies": { + "clone-deep": "^4.0.1", + "find-cache-dir": "^2.0.0", + "make-dir": "^2.1.0", + "pirates": "^4.0.5", + "source-map-support": "^0.5.16" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/register/node_modules/find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/register/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/register/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/register/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/register/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/register/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/register/node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/register/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, "node_modules/@babel/regjsgen": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", @@ -3098,6 +3241,23 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", + "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", + "dependencies": { + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@mrmlnc/readdir-enhanced/node_modules/glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig==" + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -3458,6 +3618,14 @@ "@types/node": "*" } }, + "node_modules/@types/cheerio": { + "version": "0.22.35", + "resolved": "https://registry.npmjs.org/@types/cheerio/-/cheerio-0.22.35.tgz", + "integrity": "sha512-yD57BchKRvTV+JD53UZ6PD8KWY5g5rvvMLRnZR3EQBCZXiDT/HR+pKpMzFGlWNhFrXlo7VPZXtKvIEwZkAWOIA==", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/connect": { "version": "3.4.35", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", @@ -3610,6 +3778,11 @@ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" }, + "node_modules/@types/q": { + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.8.tgz", + "integrity": "sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==" + }, "node_modules/@types/qs": { "version": "6.9.7", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", @@ -4053,6 +4226,11 @@ "algoliasearch": ">= 3.1 < 6" } }, + "node_modules/alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha512-0FcBfdcmaumGPQ0qPn7Q5qTgz/ooXgIyp1rf8ik5bGX8mpE2YHjC0P/eyQvxu1GURYQgq9ozf2mteQ5ZD9YiyQ==" + }, "node_modules/ansi-align": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", @@ -4090,6 +4268,17 @@ "ansi-html": "bin/ansi-html" } }, + "node_modules/ansi-red": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", + "integrity": "sha512-ewaIr5y+9CUTGFwZfpECUbFlGcC0GCw1oqR9RI6h1gQCd9Aj2GxSckCnPsVJnmfMZbwFYE+leZGASgkWl06Jow==", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -4112,6 +4301,14 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -4129,6 +4326,44 @@ "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" }, + "node_modules/arch": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/archive-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz", + "integrity": "sha512-zV4Ky0v1F8dBrdYElwTvQhweQ0P7Kwc1aluqJsYtOBP01jXcWCyW2IEfI1YiqsG+Iy7ZR+o5LF1N+PGECBxHWA==", + "dependencies": { + "file-type": "^4.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/archive-type/node_modules/file-type": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", + "integrity": "sha512-f2UbFQEk7LXgWpi5ntcO86OeA/cC80fuDDDaX/fZ2ZGel+AF7leRQqBBW1eJNiiQkrZlAoM6P+VYP5P6bOlDEQ==", + "engines": { + "node": ">=4" + } + }, "node_modules/arg": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", @@ -4139,6 +4374,50 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/array-flatten": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", @@ -4152,11 +4431,159 @@ "node": ">=8" } }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array.prototype.filter": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz", + "integrity": "sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.find": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.2.2.tgz", + "integrity": "sha512-DRumkfW97iZGOfn+lIXbkVrXL04sfYKX+EfOodo8XboR5sxPDVvOjZTF/rysusa9lmhmSOeD6Vp6RKQP+eP4Tg==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.reduce": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.6.tgz", + "integrity": "sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, "node_modules/at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", @@ -4165,6 +4592,17 @@ "node": ">= 4.0.0" } }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, "node_modules/autocomplete.js": { "version": "0.37.1", "resolved": "https://registry.npmjs.org/autocomplete.js/-/autocomplete.js-0.37.1.tgz", @@ -4173,6 +4611,14 @@ "immediate": "^3.2.3" } }, + "node_modules/autolinker": { + "version": "3.16.2", + "resolved": "https://registry.npmjs.org/autolinker/-/autolinker-3.16.2.tgz", + "integrity": "sha512-JiYl7j2Z19F9NdTmirENSUUIIL/9MytEWtmzhfmsKPCp9E+G35Y0UNCMoM9tFigxT59qSc8Ml2dlZXOCVTYwuA==", + "dependencies": { + "tslib": "^2.3.0" + } + }, "node_modules/autoprefixer": { "version": "10.4.14", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", @@ -4205,6 +4651,30 @@ "postcss": "^8.1.0" } }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==" + }, "node_modules/axios": { "version": "0.25.0", "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", @@ -4326,6 +4796,14 @@ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, + "node_modules/babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "bin": { + "babylon": "bin/babylon.js" + } + }, "node_modules/bail": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", @@ -4340,6 +4818,34 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/base16": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz", @@ -4378,6 +4884,22 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/big-integer": { + "version": "1.6.52", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", + "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", + "engines": { + "node": ">=0.6" + } + }, "node_modules/big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", @@ -4386,6 +4908,624 @@ "node": "*" } }, + "node_modules/bin-build": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bin-build/-/bin-build-3.0.0.tgz", + "integrity": "sha512-jcUOof71/TNAI2uM5uoUaDq2ePcVBQ3R/qhxAz1rX7UfvduAL/RXD3jXzvn8cVcDJdGVkiR1shal3OH0ImpuhA==", + "dependencies": { + "decompress": "^4.0.0", + "download": "^6.2.2", + "execa": "^0.7.0", + "p-map-series": "^1.0.0", + "tempfile": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/bin-build/node_modules/cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", + "dependencies": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "node_modules/bin-build/node_modules/execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==", + "dependencies": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/bin-build/node_modules/get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/bin-build/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/bin-build/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/bin-build/node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/bin-build/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/bin-build/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/bin-build/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/bin-build/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/bin-build/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" + }, + "node_modules/bin-check": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bin-check/-/bin-check-4.1.0.tgz", + "integrity": "sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==", + "dependencies": { + "execa": "^0.7.0", + "executable": "^4.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/bin-check/node_modules/cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", + "dependencies": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "node_modules/bin-check/node_modules/execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==", + "dependencies": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/bin-check/node_modules/get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/bin-check/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/bin-check/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/bin-check/node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/bin-check/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/bin-check/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/bin-check/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/bin-check/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/bin-check/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" + }, + "node_modules/bin-version": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-3.1.0.tgz", + "integrity": "sha512-Mkfm4iE1VFt4xd4vH+gx+0/71esbfus2LsnCGe8Pi4mndSPyT+NGES/Eg99jx8/lUGWfu3z2yuB/bt5UB+iVbQ==", + "dependencies": { + "execa": "^1.0.0", + "find-versions": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/bin-version-check": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-4.0.0.tgz", + "integrity": "sha512-sR631OrhC+1f8Cvs8WyVWOA33Y8tgwjETNPyyD/myRBXLkfS/vl74FmH/lFcRl9KY3zwGh7jFhvyk9vV3/3ilQ==", + "dependencies": { + "bin-version": "^3.0.0", + "semver": "^5.6.0", + "semver-truncate": "^1.1.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/bin-version-check/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/bin-version/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/bin-version/node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/bin-version/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/bin-version/node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/bin-version/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/bin-version/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/bin-version/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/bin-version/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/bin-version/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/bin-wrapper": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-4.1.0.tgz", + "integrity": "sha512-hfRmo7hWIXPkbpi0ZltboCMVrU+0ClXR/JgbCKKjlDjQf6igXa7OwdqNcFWQZPZTgiY7ZpzE3+LjjkLiTN2T7Q==", + "dependencies": { + "bin-check": "^4.1.0", + "bin-version-check": "^4.0.0", + "download": "^7.1.0", + "import-lazy": "^3.1.0", + "os-filter-obj": "^2.0.0", + "pify": "^4.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/bin-wrapper/node_modules/@sindresorhus/is": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", + "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", + "engines": { + "node": ">=4" + } + }, + "node_modules/bin-wrapper/node_modules/cacheable-request": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", + "integrity": "sha512-vag0O2LKZ/najSoUwDbVlnlCFvhBE/7mGTY2B5FgCBDcRD+oVV1HYTOwM6JZfMg/hIcM6IwnTZ1uQQL5/X3xIQ==", + "dependencies": { + "clone-response": "1.0.2", + "get-stream": "3.0.0", + "http-cache-semantics": "3.8.1", + "keyv": "3.0.0", + "lowercase-keys": "1.0.0", + "normalize-url": "2.0.1", + "responselike": "1.0.2" + } + }, + "node_modules/bin-wrapper/node_modules/clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==", + "dependencies": { + "mimic-response": "^1.0.0" + } + }, + "node_modules/bin-wrapper/node_modules/download": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/download/-/download-7.1.0.tgz", + "integrity": "sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==", + "dependencies": { + "archive-type": "^4.0.0", + "caw": "^2.0.1", + "content-disposition": "^0.5.2", + "decompress": "^4.2.0", + "ext-name": "^5.0.0", + "file-type": "^8.1.0", + "filenamify": "^2.0.0", + "get-stream": "^3.0.0", + "got": "^8.3.1", + "make-dir": "^1.2.0", + "p-event": "^2.1.0", + "pify": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/bin-wrapper/node_modules/download/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/bin-wrapper/node_modules/file-type": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-8.1.0.tgz", + "integrity": "sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/bin-wrapper/node_modules/get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/bin-wrapper/node_modules/got": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", + "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", + "dependencies": { + "@sindresorhus/is": "^0.7.0", + "cacheable-request": "^2.1.1", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "into-stream": "^3.1.0", + "is-retry-allowed": "^1.1.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "mimic-response": "^1.0.0", + "p-cancelable": "^0.4.0", + "p-timeout": "^2.0.1", + "pify": "^3.0.0", + "safe-buffer": "^5.1.1", + "timed-out": "^4.0.1", + "url-parse-lax": "^3.0.0", + "url-to-options": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/bin-wrapper/node_modules/got/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/bin-wrapper/node_modules/http-cache-semantics": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", + "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==" + }, + "node_modules/bin-wrapper/node_modules/import-lazy": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-3.1.0.tgz", + "integrity": "sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/bin-wrapper/node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/bin-wrapper/node_modules/keyv": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", + "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", + "dependencies": { + "json-buffer": "3.0.0" + } + }, + "node_modules/bin-wrapper/node_modules/lowercase-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", + "integrity": "sha512-RPlX0+PHuvxVDZ7xX+EBVAp4RsVxP/TdDSN2mJYdiq1Lc4Hz7EUSjUI7RZrKKlmrIzVhf6Jo2stj7++gVarS0A==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/bin-wrapper/node_modules/make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/bin-wrapper/node_modules/make-dir/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/bin-wrapper/node_modules/normalize-url": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", + "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", + "dependencies": { + "prepend-http": "^2.0.0", + "query-string": "^5.0.1", + "sort-keys": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/bin-wrapper/node_modules/p-cancelable": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", + "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/bin-wrapper/node_modules/p-event": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz", + "integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==", + "dependencies": { + "p-timeout": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/bin-wrapper/node_modules/p-timeout": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", + "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/bin-wrapper/node_modules/sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", + "dependencies": { + "is-plain-obj": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/binary": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", + "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==", + "dependencies": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + }, + "engines": { + "node": "*" + } + }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -4404,6 +5544,22 @@ "readable-stream": "^3.4.0" } }, + "node_modules/bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==" + }, + "node_modules/body": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/body/-/body-5.1.0.tgz", + "integrity": "sha512-chUsBxGRtuElD6fmw1gHLpvnKdVLK302peeFa9ZqAEk8TyzZ3fygLyUEDDPTJvL9+Bor0dIwn6ePOsRM2y0zQQ==", + "dependencies": { + "continuable-cache": "^0.3.1", + "error": "^7.0.0", + "raw-body": "~1.1.0", + "safe-json-parse": "~1.0.1" + } + }, "node_modules/body-parser": { "version": "1.20.1", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", @@ -4448,6 +5604,28 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, + "node_modules/body/node_modules/bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz", + "integrity": "sha512-/x68VkHLeTl3/Ll8IvxdwzhrT+IyKc52e/oyHhA2RwqPqswSnjVbSddfPRwAsJtbilMAPSRWwAlpxdYsSWOTKQ==" + }, + "node_modules/body/node_modules/raw-body": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-1.1.7.tgz", + "integrity": "sha512-WmJJU2e9Y6M5UzTOkHaM7xJGAPQD8PNzx3bAd2+uhZAim6wDk6dAZxPVYLF67XhbR4hmKGh33Lpmh4XWrCH5Mg==", + "dependencies": { + "bytes": "1", + "string_decoder": "0.10" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/body/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" + }, "node_modules/bonjour-service": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", @@ -4559,11 +5737,54 @@ "ieee754": "^1.1.13" } }, + "node_modules/buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dependencies": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "node_modules/buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==" + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, + "node_modules/buffer-indexof-polyfill": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", + "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==", + "engines": { + "node": ">=0.2.0" + } + }, "node_modules/bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -4572,6 +5793,25 @@ "node": ">= 0.8" } }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/cacheable-request": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", @@ -4620,17 +5860,53 @@ } }, "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/call-me-maybe": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz", + "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==" + }, + "node_modules/caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", + "dependencies": { + "callsites": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/caller-callsite/node_modules/callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", + "dependencies": { + "caller-callsite": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -4667,6 +5943,26 @@ "node": ">= 6" } }, + "node_modules/camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ==", + "dependencies": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/camelcase-keys/node_modules/camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/caniuse-api": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", @@ -4697,6 +5993,25 @@ } ] }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" + }, + "node_modules/caw": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz", + "integrity": "sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==", + "dependencies": { + "get-proxy": "^2.0.0", + "isurl": "^1.0.0-alpha5", + "tunnel-agent": "^0.6.0", + "url-to-options": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/ccount": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", @@ -4706,6 +6021,17 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==", + "dependencies": { + "traverse": ">=0.3.0 <0.4" + }, + "engines": { + "node": "*" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -4837,6 +6163,48 @@ "node": ">=8" } }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/classnames": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz", + "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==" + }, "node_modules/clean-css": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz", @@ -4931,6 +6299,96 @@ "node": ">=6" } }, + "node_modules/coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "dependencies": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/coa/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/coa/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/coa/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/coa/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/coa/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/coa/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/coa/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/coffee-script": { + "version": "1.12.7", + "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz", + "integrity": "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==", + "deprecated": "CoffeeScript on NPM has moved to \"coffeescript\" (no hyphen)", + "bin": { + "cake": "bin/cake", + "coffee": "bin/coffee" + }, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/collapse-white-space": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", @@ -4940,6 +6398,18 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/color": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", @@ -5003,6 +6473,17 @@ "node": ">=10" } }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/comma-separated-tokens": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", @@ -5025,6 +6506,14 @@ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" }, + "node_modules/component-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/compressible": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", @@ -5084,6 +6573,69 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/concat-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/concat-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/concat-with-sourcemaps": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", + "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==", + "dependencies": { + "source-map": "^0.6.1" + } + }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, "node_modules/configstore": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", @@ -5118,6 +6670,11 @@ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" }, + "node_modules/console-stream": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/console-stream/-/console-stream-0.1.1.tgz", + "integrity": "sha512-QC/8l9e6ofi6nqZ5PawlDgzmMw3OxIXtvolBzap/F4UDBJlDaZRSNbL/lb41C29FcbSJncBFlJFj2WJoNyZRfQ==" + }, "node_modules/consolidated-events": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/consolidated-events/-/consolidated-events-2.0.2.tgz", @@ -5139,6 +6696,11 @@ "node": ">= 0.6" } }, + "node_modules/continuable-cache": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/continuable-cache/-/continuable-cache-0.3.1.tgz", + "integrity": "sha512-TF30kpKhTH8AGCG3dut0rdd/19B7Z+qCnrMoBLpyQu/2drZdNrrpcjPEoJeSVsQM+8KmWG5O56oPDjSSUsuTyA==" + }, "node_modules/convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", @@ -5157,6 +6719,14 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/copy-text-to-clipboard": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz", @@ -5353,6 +6923,19 @@ "node": ">= 8" } }, + "node_modules/crowdin-cli": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/crowdin-cli/-/crowdin-cli-0.3.0.tgz", + "integrity": "sha512-s1vSRqWalCqd+vW7nF4oZo1a2pMpEgwIiwVlPRD0HmGY3HjJwQKXqZ26NpX5qCDVN8UdEsScy+2jle0PPQBmAg==", + "dependencies": { + "request": "^2.53.0", + "yamljs": "^0.2.1", + "yargs": "^2.3.0" + }, + "bin": { + "crowdin-cli": "bin/crowdin-cli" + } + }, "node_modules/crypto-random-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", @@ -5361,6 +6944,14 @@ "node": ">=8" } }, + "node_modules/css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha512-zj5D7X1U2h2zsXOAM8EyUREBnnts6H+Jm+d1M2DbiQQcUtnqgQsMrdo8JW9R80YFUmIdBZeMu5wvYM7hcgWP/Q==", + "engines": { + "node": "*" + } + }, "node_modules/css-declaration-sorter": { "version": "6.4.1", "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", @@ -5504,6 +7095,11 @@ "url": "https://github.com/sponsors/fb55" } }, + "node_modules/css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" + }, "node_modules/css-selector-parser": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/css-selector-parser/-/css-selector-parser-1.4.1.tgz", @@ -5624,6 +7220,62 @@ "postcss": "^8.2.15" } }, + "node_modules/cssnano-util-get-arguments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", + "integrity": "sha512-6RIcwmV3/cBMG8Aj5gucQRsJb4vv4I4rn6YjPbVWd5+Pn/fuG+YseGvXGk00XLkoZkaj31QOD7vMUpNPC4FIuw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano-util-get-match": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", + "integrity": "sha512-JPMZ1TSMRUPVIqEalIBNoBtAYbi8okvcFns4O0YIhcdGebeYZK7dMyHJiQ6GqNBA9kE0Hym4Aqym5rPdsV/4Cw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano-util-raw-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", + "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano-util-raw-cache/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" + }, + "node_modules/cssnano-util-raw-cache/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/cssnano-util-same-parent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", + "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/cssnano-utils": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", @@ -5651,6 +7303,28 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" }, + "node_modules/currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==", + "dependencies": { + "array-find-index": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -5667,6 +7341,40 @@ } } }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/decompress": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", + "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", + "dependencies": { + "decompress-tar": "^4.0.0", + "decompress-tarbz2": "^4.0.0", + "decompress-targz": "^4.0.0", + "decompress-unzip": "^4.0.1", + "graceful-fs": "^4.1.10", + "make-dir": "^1.0.0", + "pify": "^2.3.0", + "strip-dirs": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/decompress-response": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", @@ -5678,6 +7386,222 @@ "node": ">=4" } }, + "node_modules/decompress-tar": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", + "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", + "dependencies": { + "file-type": "^5.2.0", + "is-stream": "^1.1.0", + "tar-stream": "^1.5.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-tar/node_modules/bl": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", + "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "dependencies": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/decompress-tar/node_modules/file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-tar/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decompress-tar/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/decompress-tar/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/decompress-tar/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/decompress-tar/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/decompress-tar/node_modules/tar-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", + "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "dependencies": { + "bl": "^1.0.0", + "buffer-alloc": "^1.2.0", + "end-of-stream": "^1.0.0", + "fs-constants": "^1.0.0", + "readable-stream": "^2.3.0", + "to-buffer": "^1.1.1", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/decompress-tarbz2": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", + "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", + "dependencies": { + "decompress-tar": "^4.1.0", + "file-type": "^6.1.0", + "is-stream": "^1.1.0", + "seek-bzip": "^1.0.5", + "unbzip2-stream": "^1.0.9" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-tarbz2/node_modules/file-type": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", + "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-tarbz2/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decompress-targz": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", + "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", + "dependencies": { + "decompress-tar": "^4.1.1", + "file-type": "^5.2.0", + "is-stream": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-targz/node_modules/file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-targz/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decompress-unzip": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", + "integrity": "sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==", + "dependencies": { + "file-type": "^3.8.0", + "get-stream": "^2.2.0", + "pify": "^2.3.0", + "yauzl": "^2.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-unzip/node_modules/file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decompress-unzip/node_modules/get-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", + "integrity": "sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==", + "dependencies": { + "object-assign": "^4.0.1", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decompress-unzip/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decompress/node_modules/make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress/node_modules/make-dir/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -5686,6 +7610,11 @@ "node": ">=4.0.0" } }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + }, "node_modules/deepmerge": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", @@ -5710,6 +7639,19 @@ "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" }, + "node_modules/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/define-lazy-prop": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", @@ -5733,6 +7675,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/del": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", @@ -5754,6 +7708,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -5838,6 +7800,14 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, + "node_modules/diacritics-map": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/diacritics-map/-/diacritics-map-0.1.0.tgz", + "integrity": "sha512-3omnDTYrGigU0i4cJjvaKwD52B8aoqyX/NEIkukFFkogBemsIbhSa1O414fpTp5nuszJG6lvQ5vBvDVNCbSsaQ==", + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -5861,6 +7831,11 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/discontinuous-range": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", + "integrity": "sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ==" + }, "node_modules/dns-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", @@ -5877,6 +7852,70 @@ "node": ">=6" } }, + "node_modules/docusaurus": { + "version": "1.14.7", + "resolved": "https://registry.npmjs.org/docusaurus/-/docusaurus-1.14.7.tgz", + "integrity": "sha512-UWqar4ZX0lEcpLc5Tg+MwZ2jhF/1n1toCQRSeoxDON/D+E9ToLr+vTRFVMP/Tk84NXSVjZFRlrjWwM2pXzvLsQ==", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/plugin-proposal-class-properties": "^7.12.1", + "@babel/plugin-proposal-object-rest-spread": "^7.12.1", + "@babel/polyfill": "^7.12.1", + "@babel/preset-env": "^7.12.1", + "@babel/preset-react": "^7.12.5", + "@babel/register": "^7.12.1", + "@babel/traverse": "^7.12.5", + "@babel/types": "^7.12.6", + "autoprefixer": "^9.7.5", + "babylon": "^6.18.0", + "chalk": "^3.0.0", + "classnames": "^2.2.6", + "commander": "^4.0.1", + "crowdin-cli": "^0.3.0", + "cssnano": "^4.1.10", + "enzyme": "^3.10.0", + "enzyme-adapter-react-16": "^1.15.1", + "escape-string-regexp": "^2.0.0", + "express": "^4.17.1", + "feed": "^4.2.1", + "fs-extra": "^9.0.1", + "gaze": "^1.1.3", + "github-slugger": "^1.3.0", + "glob": "^7.1.6", + "highlight.js": "^9.16.2", + "imagemin": "^6.0.0", + "imagemin-gifsicle": "^6.0.1", + "imagemin-jpegtran": "^6.0.0", + "imagemin-optipng": "^6.0.0", + "imagemin-svgo": "^7.0.0", + "lodash": "^4.17.20", + "markdown-toc": "^1.2.0", + "mkdirp": "^0.5.1", + "portfinder": "^1.0.28", + "postcss": "^7.0.23", + "prismjs": "^1.22.0", + "react": "^16.8.4", + "react-dev-utils": "^11.0.1", + "react-dom": "^16.8.4", + "remarkable": "^2.0.0", + "request": "^2.88.0", + "shelljs": "^0.8.4", + "sitemap": "^3.2.2", + "tcp-port-used": "^1.0.1", + "tiny-lr": "^1.1.1", + "tree-node-cli": "^1.2.5", + "truncate-html": "^1.0.3" + }, + "bin": { + "docusaurus-build": "lib/build-files.js", + "docusaurus-examples": "lib/copy-examples.js", + "docusaurus-publish": "lib/publish-gh-pages.js", + "docusaurus-rename-version": "lib/rename-version.js", + "docusaurus-start": "lib/start-server.js", + "docusaurus-version": "lib/version.js", + "docusaurus-write-translations": "lib/write-translations.js" + } + }, "node_modules/docusaurus-lunr-search": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/docusaurus-lunr-search/-/docusaurus-lunr-search-2.4.1.tgz", @@ -5906,6 +7945,1510 @@ "react-dom": "^16.8.4 || ^17" } }, + "node_modules/docusaurus/node_modules/@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/docusaurus/node_modules/address": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", + "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==", + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/docusaurus/node_modules/airbnb-prop-types": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/airbnb-prop-types/-/airbnb-prop-types-2.16.0.tgz", + "integrity": "sha512-7WHOFolP/6cS96PhKNrslCLMYAI8yB1Pp6u6XmxozQOiZbsI5ycglZr5cHhBFfuRcQQjzCMith5ZPZdYiJCxUg==", + "dependencies": { + "array.prototype.find": "^2.1.1", + "function.prototype.name": "^1.1.2", + "is-regex": "^1.1.0", + "object-is": "^1.1.2", + "object.assign": "^4.1.0", + "object.entries": "^1.1.2", + "prop-types": "^15.7.2", + "prop-types-exact": "^1.2.0", + "react-is": "^16.13.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "peerDependencies": { + "react": "^0.14 || ^15.0.0 || ^16.0.0-alpha" + } + }, + "node_modules/docusaurus/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/docusaurus/node_modules/autoprefixer": { + "version": "9.8.8", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz", + "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", + "dependencies": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "picocolors": "^0.2.1", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + }, + "node_modules/docusaurus/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/docusaurus/node_modules/browserslist": { + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.2.tgz", + "integrity": "sha512-HI4lPveGKUR0x2StIz+2FXfDk9SfVMrxn6PLh1JeGUwcuoDkdKZebWiyLRJ68iIPDpMI4JLVDf7S7XzslgWOhw==", + "dependencies": { + "caniuse-lite": "^1.0.30001125", + "electron-to-chromium": "^1.3.564", + "escalade": "^3.0.2", + "node-releases": "^1.1.61" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + }, + "node_modules/docusaurus/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/docusaurus/node_modules/color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "node_modules/docusaurus/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/docusaurus/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/docusaurus/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/docusaurus/node_modules/cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "dependencies": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/docusaurus/node_modules/css-declaration-sorter": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", + "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "dependencies": { + "postcss": "^7.0.1", + "timsort": "^0.3.0" + }, + "engines": { + "node": ">4" + } + }, + "node_modules/docusaurus/node_modules/css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "node_modules/docusaurus/node_modules/css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "dependencies": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/docusaurus/node_modules/css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/docusaurus/node_modules/cssnano": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.11.tgz", + "integrity": "sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==", + "dependencies": { + "cosmiconfig": "^5.0.0", + "cssnano-preset-default": "^4.0.8", + "is-resolvable": "^1.0.0", + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/docusaurus/node_modules/cssnano-preset-default": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz", + "integrity": "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==", + "dependencies": { + "css-declaration-sorter": "^4.0.1", + "cssnano-util-raw-cache": "^4.0.1", + "postcss": "^7.0.0", + "postcss-calc": "^7.0.1", + "postcss-colormin": "^4.0.3", + "postcss-convert-values": "^4.0.1", + "postcss-discard-comments": "^4.0.2", + "postcss-discard-duplicates": "^4.0.2", + "postcss-discard-empty": "^4.0.1", + "postcss-discard-overridden": "^4.0.1", + "postcss-merge-longhand": "^4.0.11", + "postcss-merge-rules": "^4.0.3", + "postcss-minify-font-values": "^4.0.2", + "postcss-minify-gradients": "^4.0.2", + "postcss-minify-params": "^4.0.2", + "postcss-minify-selectors": "^4.0.2", + "postcss-normalize-charset": "^4.0.1", + "postcss-normalize-display-values": "^4.0.2", + "postcss-normalize-positions": "^4.0.2", + "postcss-normalize-repeat-style": "^4.0.2", + "postcss-normalize-string": "^4.0.2", + "postcss-normalize-timing-functions": "^4.0.2", + "postcss-normalize-unicode": "^4.0.1", + "postcss-normalize-url": "^4.0.1", + "postcss-normalize-whitespace": "^4.0.2", + "postcss-ordered-values": "^4.1.2", + "postcss-reduce-initial": "^4.0.3", + "postcss-reduce-transforms": "^4.0.2", + "postcss-svgo": "^4.0.3", + "postcss-unique-selectors": "^4.0.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/docusaurus/node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/docusaurus/node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/docusaurus/node_modules/domutils/node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "node_modules/docusaurus/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/docusaurus/node_modules/enzyme-adapter-react-16": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.7.tgz", + "integrity": "sha512-LtjKgvlTc/H7adyQcj+aq0P0H07LDL480WQl1gU512IUyaDo/sbOaNDdZsJXYW2XaoPqrLLE9KbZS+X2z6BASw==", + "dependencies": { + "enzyme-adapter-utils": "^1.14.1", + "enzyme-shallow-equal": "^1.0.5", + "has": "^1.0.3", + "object.assign": "^4.1.4", + "object.values": "^1.1.5", + "prop-types": "^15.8.1", + "react-is": "^16.13.1", + "react-test-renderer": "^16.0.0-0", + "semver": "^5.7.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "peerDependencies": { + "enzyme": "^3.0.0", + "react": "^16.0.0-0", + "react-dom": "^16.0.0-0" + } + }, + "node_modules/docusaurus/node_modules/enzyme-adapter-utils": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.14.1.tgz", + "integrity": "sha512-JZgMPF1QOI7IzBj24EZoDpaeG/p8Os7WeBZWTJydpsH7JRStc7jYbHE4CmNQaLqazaGFyLM8ALWA3IIZvxW3PQ==", + "dependencies": { + "airbnb-prop-types": "^2.16.0", + "function.prototype.name": "^1.1.5", + "has": "^1.0.3", + "object.assign": "^4.1.4", + "object.fromentries": "^2.0.5", + "prop-types": "^15.8.1", + "semver": "^5.7.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "peerDependencies": { + "react": "0.13.x || 0.14.x || ^15.0.0-0 || ^16.0.0-0" + } + }, + "node_modules/docusaurus/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/docusaurus/node_modules/filesize": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.1.0.tgz", + "integrity": "sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/docusaurus/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/docusaurus/node_modules/fork-ts-checker-webpack-plugin": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz", + "integrity": "sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==", + "dependencies": { + "@babel/code-frame": "^7.5.5", + "chalk": "^2.4.1", + "micromatch": "^3.1.10", + "minimatch": "^3.0.4", + "semver": "^5.6.0", + "tapable": "^1.0.0", + "worker-rpc": "^0.1.0" + }, + "engines": { + "node": ">=6.11.5", + "yarn": ">=1.0.0" + } + }, + "node_modules/docusaurus/node_modules/fork-ts-checker-webpack-plugin/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/docusaurus/node_modules/fork-ts-checker-webpack-plugin/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/docusaurus/node_modules/fork-ts-checker-webpack-plugin/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/docusaurus/node_modules/fork-ts-checker-webpack-plugin/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/docusaurus/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/docusaurus/node_modules/globby": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", + "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/docusaurus/node_modules/gzip-size": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", + "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", + "dependencies": { + "duplexer": "^0.1.1", + "pify": "^4.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/docusaurus/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/docusaurus/node_modules/immer": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/immer/-/immer-8.0.1.tgz", + "integrity": "sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/docusaurus/node_modules/import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", + "dependencies": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/docusaurus/node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "node_modules/docusaurus/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/docusaurus/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/docusaurus/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/docusaurus/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/docusaurus/node_modules/loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/docusaurus/node_modules/mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" + }, + "node_modules/docusaurus/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/docusaurus/node_modules/micromatch/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/docusaurus/node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/docusaurus/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/docusaurus/node_modules/node-releases": { + "version": "1.1.77", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.77.tgz", + "integrity": "sha512-rB1DUFUNAN4Gn9keO2K1efO35IDK7yKHCdCaIMvFO7yUYmmZYeDjnGKle26G4rwj+LKRQpjyUUvMkPglwGCYNQ==" + }, + "node_modules/docusaurus/node_modules/normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/docusaurus/node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dependencies": { + "boolbase": "~1.0.0" + } + }, + "node_modules/docusaurus/node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/docusaurus/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/docusaurus/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" + }, + "node_modules/docusaurus/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/docusaurus/node_modules/postcss-calc": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", + "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", + "dependencies": { + "postcss": "^7.0.27", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" + } + }, + "node_modules/docusaurus/node_modules/postcss-colormin": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", + "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "dependencies": { + "browserslist": "^4.0.0", + "color": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/docusaurus/node_modules/postcss-colormin/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/docusaurus/node_modules/postcss-convert-values": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", + "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "dependencies": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/docusaurus/node_modules/postcss-convert-values/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/docusaurus/node_modules/postcss-discard-comments": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", + "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/docusaurus/node_modules/postcss-discard-duplicates": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/docusaurus/node_modules/postcss-discard-empty": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", + "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/docusaurus/node_modules/postcss-discard-overridden": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", + "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/docusaurus/node_modules/postcss-merge-longhand": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", + "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "dependencies": { + "css-color-names": "0.0.4", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "stylehacks": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/docusaurus/node_modules/postcss-merge-longhand/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/docusaurus/node_modules/postcss-merge-rules": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", + "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "cssnano-util-same-parent": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0", + "vendors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/docusaurus/node_modules/postcss-merge-rules/node_modules/postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dependencies": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/docusaurus/node_modules/postcss-minify-font-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", + "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "dependencies": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/docusaurus/node_modules/postcss-minify-font-values/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/docusaurus/node_modules/postcss-minify-gradients": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", + "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", + "dependencies": { + "cssnano-util-get-arguments": "^4.0.0", + "is-color-stop": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/docusaurus/node_modules/postcss-minify-gradients/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/docusaurus/node_modules/postcss-minify-params": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", + "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", + "dependencies": { + "alphanum-sort": "^1.0.0", + "browserslist": "^4.0.0", + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "uniqs": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/docusaurus/node_modules/postcss-minify-params/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/docusaurus/node_modules/postcss-minify-selectors": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", + "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "dependencies": { + "alphanum-sort": "^1.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/docusaurus/node_modules/postcss-minify-selectors/node_modules/postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dependencies": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/docusaurus/node_modules/postcss-normalize-charset": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", + "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/docusaurus/node_modules/postcss-normalize-display-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", + "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", + "dependencies": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/docusaurus/node_modules/postcss-normalize-display-values/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/docusaurus/node_modules/postcss-normalize-positions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", + "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", + "dependencies": { + "cssnano-util-get-arguments": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/docusaurus/node_modules/postcss-normalize-positions/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/docusaurus/node_modules/postcss-normalize-repeat-style": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", + "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", + "dependencies": { + "cssnano-util-get-arguments": "^4.0.0", + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/docusaurus/node_modules/postcss-normalize-repeat-style/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/docusaurus/node_modules/postcss-normalize-string": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", + "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", + "dependencies": { + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/docusaurus/node_modules/postcss-normalize-string/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/docusaurus/node_modules/postcss-normalize-timing-functions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", + "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", + "dependencies": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/docusaurus/node_modules/postcss-normalize-timing-functions/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/docusaurus/node_modules/postcss-normalize-unicode": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", + "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "dependencies": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/docusaurus/node_modules/postcss-normalize-unicode/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/docusaurus/node_modules/postcss-normalize-url": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", + "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "dependencies": { + "is-absolute-url": "^2.0.0", + "normalize-url": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/docusaurus/node_modules/postcss-normalize-url/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/docusaurus/node_modules/postcss-normalize-whitespace": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", + "dependencies": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/docusaurus/node_modules/postcss-normalize-whitespace/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/docusaurus/node_modules/postcss-ordered-values": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", + "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "dependencies": { + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/docusaurus/node_modules/postcss-ordered-values/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/docusaurus/node_modules/postcss-reduce-initial": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", + "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/docusaurus/node_modules/postcss-reduce-transforms": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "dependencies": { + "cssnano-util-get-match": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/docusaurus/node_modules/postcss-reduce-transforms/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/docusaurus/node_modules/postcss-svgo": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz", + "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==", + "dependencies": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "svgo": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/docusaurus/node_modules/postcss-svgo/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/docusaurus/node_modules/postcss-unique-selectors": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", + "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "dependencies": { + "alphanum-sort": "^1.0.0", + "postcss": "^7.0.0", + "uniqs": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/docusaurus/node_modules/prompts": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", + "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/docusaurus/node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/docusaurus/node_modules/react": { + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", + "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/docusaurus/node_modules/react-dev-utils": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-11.0.4.tgz", + "integrity": "sha512-dx0LvIGHcOPtKbeiSUM4jqpBl3TcY7CDjZdfOIcKeznE7BWr9dg0iPG90G5yfVQ+p/rGNMXdbfStvzQZEVEi4A==", + "dependencies": { + "@babel/code-frame": "7.10.4", + "address": "1.1.2", + "browserslist": "4.14.2", + "chalk": "2.4.2", + "cross-spawn": "7.0.3", + "detect-port-alt": "1.1.6", + "escape-string-regexp": "2.0.0", + "filesize": "6.1.0", + "find-up": "4.1.0", + "fork-ts-checker-webpack-plugin": "4.1.6", + "global-modules": "2.0.0", + "globby": "11.0.1", + "gzip-size": "5.1.1", + "immer": "8.0.1", + "is-root": "2.1.0", + "loader-utils": "2.0.0", + "open": "^7.0.2", + "pkg-up": "3.1.0", + "prompts": "2.4.0", + "react-error-overlay": "^6.0.9", + "recursive-readdir": "2.2.2", + "shell-quote": "1.7.2", + "strip-ansi": "6.0.0", + "text-table": "0.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/docusaurus/node_modules/react-dev-utils/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/docusaurus/node_modules/react-dev-utils/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/docusaurus/node_modules/react-dev-utils/node_modules/chalk/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/docusaurus/node_modules/react-dev-utils/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/docusaurus/node_modules/react-dom": { + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", + "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.19.1" + }, + "peerDependencies": { + "react": "^16.14.0" + } + }, + "node_modules/docusaurus/node_modules/react-test-renderer": { + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.14.0.tgz", + "integrity": "sha512-L8yPjqPE5CZO6rKsKXRO/rVPiaCOy0tQQJbC+UjPNlobl5mad59lvPjwFsQHTvL03caVDIVr9x9/OSgDe6I5Eg==", + "dependencies": { + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "react-is": "^16.8.6", + "scheduler": "^0.19.1" + }, + "peerDependencies": { + "react": "^16.14.0" + } + }, + "node_modules/docusaurus/node_modules/recursive-readdir": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", + "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", + "dependencies": { + "minimatch": "3.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/docusaurus/node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/docusaurus/node_modules/scheduler": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", + "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "node_modules/docusaurus/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/docusaurus/node_modules/shell-quote": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", + "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" + }, + "node_modules/docusaurus/node_modules/sitemap": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-3.2.2.tgz", + "integrity": "sha512-TModL/WU4m2q/mQcrDgNANn0P4LwprM9MMvG4hu5zP4c6IIKs2YLTu6nXXnNr8ODW/WFtxKggiJ1EGn2W0GNmg==", + "dependencies": { + "lodash.chunk": "^4.2.0", + "lodash.padstart": "^4.6.1", + "whatwg-url": "^7.0.0", + "xmlbuilder": "^13.0.0" + }, + "engines": { + "node": ">=6.0.0", + "npm": ">=4.0.0" + } + }, + "node_modules/docusaurus/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/docusaurus/node_modules/stylehacks": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", + "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", + "dependencies": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/docusaurus/node_modules/stylehacks/node_modules/postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dependencies": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/docusaurus/node_modules/svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", + "dependencies": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/docusaurus/node_modules/svgo/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/docusaurus/node_modules/svgo/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/docusaurus/node_modules/svgo/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/docusaurus/node_modules/svgo/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/docusaurus/node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/docusaurus/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/docusaurus/node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/docusaurus/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" + }, + "node_modules/docusaurus/node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, "node_modules/dom-converter": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", @@ -5993,11 +9536,174 @@ "node": ">=8" } }, + "node_modules/download": { + "version": "6.2.5", + "resolved": "https://registry.npmjs.org/download/-/download-6.2.5.tgz", + "integrity": "sha512-DpO9K1sXAST8Cpzb7kmEhogJxymyVUd5qz/vCOSyvwtp2Klj2XcDt5YUuasgxka44SxF0q5RriKIwJmQHG2AuA==", + "dependencies": { + "caw": "^2.0.0", + "content-disposition": "^0.5.2", + "decompress": "^4.0.0", + "ext-name": "^5.0.0", + "file-type": "5.2.0", + "filenamify": "^2.0.0", + "get-stream": "^3.0.0", + "got": "^7.0.0", + "make-dir": "^1.0.0", + "p-event": "^1.0.0", + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/download/node_modules/file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/download/node_modules/get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/download/node_modules/got": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", + "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", + "dependencies": { + "decompress-response": "^3.2.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-plain-obj": "^1.1.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "p-cancelable": "^0.3.0", + "p-timeout": "^1.1.1", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "url-parse-lax": "^1.0.0", + "url-to-options": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/download/node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/download/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/download/node_modules/make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/download/node_modules/p-cancelable": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", + "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/download/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/download/node_modules/prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/download/node_modules/url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==", + "dependencies": { + "prepend-http": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/duplexer2/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/duplexer2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/duplexer2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/duplexer2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/duplexer3": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", @@ -6008,6 +9714,15 @@ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -6079,6 +9794,58 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/enzyme": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.11.0.tgz", + "integrity": "sha512-Dw8/Gs4vRjxY6/6i9wU0V+utmQO9kvh9XLnz3LIudviOnVYDEe2ec+0k+NQoMamn1VrjKgCUOWj5jG/5M5M0Qw==", + "dependencies": { + "array.prototype.flat": "^1.2.3", + "cheerio": "^1.0.0-rc.3", + "enzyme-shallow-equal": "^1.0.1", + "function.prototype.name": "^1.1.2", + "has": "^1.0.3", + "html-element-map": "^1.2.0", + "is-boolean-object": "^1.0.1", + "is-callable": "^1.1.5", + "is-number-object": "^1.0.4", + "is-regex": "^1.0.5", + "is-string": "^1.0.5", + "is-subset": "^0.1.1", + "lodash.escape": "^4.0.1", + "lodash.isequal": "^4.5.0", + "object-inspect": "^1.7.0", + "object-is": "^1.0.2", + "object.assign": "^4.1.0", + "object.entries": "^1.1.1", + "object.values": "^1.1.1", + "raf": "^3.4.1", + "rst-selector-parser": "^2.2.3", + "string.prototype.trim": "^1.2.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/enzyme-shallow-equal": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.5.tgz", + "integrity": "sha512-i6cwm7hN630JXenxxJFBKzgLC3hMTafFQXflvzHgPmDhOBhxUWDe8AeRv1qp2/uWJ2Y8z5yLWMzmAfkTOiOCZg==", + "dependencies": { + "has": "^1.0.3", + "object-is": "^1.1.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/error": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/error/-/error-7.2.1.tgz", + "integrity": "sha512-fo9HBvWnx3NGUKMvMwB/CBCMMrfEJgbDTVDEkPygA3Bdd3lM1OyCd+rbQ8BwnpF6GdVeOLDNmyL4N5Bg80ZvdA==", + "dependencies": { + "string-template": "~0.2.1" + } + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -6087,11 +9854,105 @@ "is-arrayish": "^0.2.1" } }, + "node_modules/es-abstract": { + "version": "1.22.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", + "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.2", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.5", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.2", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.12", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" + }, "node_modules/es-module-lexer": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==" }, + "node_modules/es-set-tostringtag": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", + "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "dependencies": { + "get-intrinsic": "^1.2.2", + "has-tostringtag": "^1.0.0", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -6227,6 +10088,146 @@ "node": ">=0.8.x" } }, + "node_modules/exec-buffer": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/exec-buffer/-/exec-buffer-3.2.0.tgz", + "integrity": "sha512-wsiD+2Tp6BWHoVv3B+5Dcx6E7u5zky+hUwOHjuH2hKSLR3dvRmX8fk8UD8uqQixHs4Wk6eDmiegVrMPjKj7wpA==", + "dependencies": { + "execa": "^0.7.0", + "p-finally": "^1.0.0", + "pify": "^3.0.0", + "rimraf": "^2.5.4", + "tempfile": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/exec-buffer/node_modules/cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", + "dependencies": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "node_modules/exec-buffer/node_modules/execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==", + "dependencies": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/exec-buffer/node_modules/get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/exec-buffer/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/exec-buffer/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/exec-buffer/node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/exec-buffer/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/exec-buffer/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/exec-buffer/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/exec-buffer/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/exec-buffer/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/exec-buffer/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/exec-buffer/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" + }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -6260,6 +10261,147 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/executable": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", + "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", + "dependencies": { + "pify": "^2.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/executable/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha512-AFASGfIlnIbkKPQwX1yHaDjFvh/1gyKJODme52V6IORh69uEYgZp0o9C+qsIGNVEiuuhQU0CSSl++Rlegg1qvA==", + "dependencies": { + "fill-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-range/node_modules/fill-range": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "dependencies": { + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-range/node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "node_modules/expand-range/node_modules/is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha512-QUzH43Gfb9+5yckcrSA0VBDwEtDUchrk4F6tfJZQuNzDJbEDB9cZNzSfXGQ1jqmdDY/kl41lUOWM9syA8z8jlg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-range/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/expand-range/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-range/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/expand-template": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", @@ -6351,6 +10493,29 @@ "node": ">= 0.6" } }, + "node_modules/ext-list": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", + "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", + "dependencies": { + "mime-db": "^1.28.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ext-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", + "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", + "dependencies": { + "ext-list": "^2.0.0", + "sort-keys-length": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -6367,6 +10532,43 @@ "node": ">=0.10.0" } }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "engines": [ + "node >=0.6.0" + ] + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -6377,6 +10579,18 @@ "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==" }, + "node_modules/fast-folder-size": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/fast-folder-size/-/fast-folder-size-1.6.1.tgz", + "integrity": "sha512-F3tRpfkAzb7TT2JNKaJUglyuRjRa+jelQD94s9OSqkfEeytLmupCqQiD+H2KoIXGtp4pB5m4zNmv5m2Ktcr+LA==", + "hasInstallScript": true, + "dependencies": { + "unzipper": "^0.10.11" + }, + "bin": { + "fast-folder-size": "cli.js" + } + }, "node_modules/fast-glob": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", @@ -6405,6 +10619,27 @@ "punycode": "^1.3.2" } }, + "node_modules/fast-xml-parser": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.3.2.tgz", + "integrity": "sha512-rmrXUXwbJedoXkStenj1kkljNF7ugn5ZjR9FJcwmCfcCbtOMDghPajbc+Tck6vE6F5XsDmx+Pr2le9fw8+pXBg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + }, + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + } + ], + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, "node_modules/fastq": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", @@ -6451,6 +10686,14 @@ "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dependencies": { + "pend": "~1.2.0" + } + }, "node_modules/feed": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", @@ -6462,6 +10705,26 @@ "node": ">=0.4.0" } }, + "node_modules/figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ==", + "dependencies": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/file-loader": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", @@ -6498,6 +10761,35 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/file-type": { + "version": "10.11.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-10.11.0.tgz", + "integrity": "sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/filename-reserved-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", + "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/filenamify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz", + "integrity": "sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==", + "dependencies": { + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.0", + "trim-repeated": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/filesize": { "version": "8.0.7", "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", @@ -6575,6 +10867,17 @@ "node": ">=8" } }, + "node_modules/find-versions": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz", + "integrity": "sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==", + "dependencies": { + "semver-regex": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/flux": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.4.tgz", @@ -6606,6 +10909,30 @@ } } }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "engines": { + "node": "*" + } + }, "node_modules/fork-ts-checker-webpack-plugin": { "version": "6.5.3", "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz", @@ -6698,6 +11025,19 @@ "node": ">=6" } }, + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -6718,6 +11058,17 @@ "url": "https://www.patreon.com/infusion" } }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", @@ -6726,6 +11077,47 @@ "node": ">= 0.6" } }, + "node_modules/from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "node_modules/from2/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/from2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/from2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/from2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", @@ -6767,10 +11159,74 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "dependencies": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + }, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/fstream/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/fstream/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/gauge": { "version": "3.0.2", @@ -6809,6 +11265,17 @@ "node": ">=8" } }, + "node_modules/gaze": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "dependencies": { + "globule": "^1.0.0" + }, + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -6818,14 +11285,14 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", + "function-bind": "^1.1.2", "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6836,6 +11303,25 @@ "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" }, + "node_modules/get-proxy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz", + "integrity": "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==", + "dependencies": { + "npm-conf": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", @@ -6847,6 +11333,152 @@ "node": ">=6" } }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/gifsicle": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/gifsicle/-/gifsicle-4.0.1.tgz", + "integrity": "sha512-A/kiCLfDdV+ERV/UB+2O41mifd+RxH8jlRG8DMxZO84Bma/Fw0htqZ+hY2iaalLRNyUu7tYZQslqUBJxBggxbg==", + "hasInstallScript": true, + "dependencies": { + "bin-build": "^3.0.0", + "bin-wrapper": "^4.0.0", + "execa": "^1.0.0", + "logalot": "^2.0.0" + }, + "bin": { + "gifsicle": "cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/gifsicle/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/gifsicle/node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/gifsicle/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gifsicle/node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/gifsicle/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/gifsicle/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/gifsicle/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gifsicle/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gifsicle/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, "node_modules/github-from-package": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", @@ -6957,6 +11589,20 @@ "node": ">=4" } }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -6976,6 +11622,60 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/globule": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.4.tgz", + "integrity": "sha512-OPTIfhMBh7JbBYDpa5b+Q5ptmMWKwcNcFSR/0c6t8V4f3ZAVBEsKNY37QdVqmLRYSMhOUGYrY0QhSoEpzGr/Eg==", + "dependencies": { + "glob": "~7.1.1", + "lodash": "^4.17.21", + "minimatch": "~3.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/globule/node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globule/node_modules/minimatch": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", + "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/got": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", @@ -7036,6 +11736,17 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/gulp-header": { + "version": "1.8.12", + "resolved": "https://registry.npmjs.org/gulp-header/-/gulp-header-1.8.12.tgz", + "integrity": "sha512-lh9HLdb53sC7XIZOYzTXM4lFuXElv3EVkSDhsd7DoJBj7hm+Ni7D3qYbb+Rr8DuM8nRanBvkVO9d7askreXGnQ==", + "deprecated": "Removed event-stream from gulp-header", + "dependencies": { + "concat-with-sourcemaps": "*", + "lodash.template": "^4.4.0", + "through2": "^2.0.0" + } + }, "node_modules/gzip-size": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", @@ -7055,6 +11766,27 @@ "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -7066,6 +11798,33 @@ "node": ">= 0.4.0" } }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -7096,6 +11855,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-symbol-support-x": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", + "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", + "engines": { + "node": "*" + } + }, "node_modules/has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -7107,11 +11874,99 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-to-string-tag-x": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "dependencies": { + "has-symbol-support-x": "^1.4.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "node_modules/has-values/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/has-yarn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", @@ -7120,6 +11975,17 @@ "node": ">=8" } }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/hast-to-hyperscript": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", @@ -7305,6 +12171,21 @@ "he": "bin/he" } }, + "node_modules/hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" + }, + "node_modules/highlight.js": { + "version": "9.18.5", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.18.5.tgz", + "integrity": "sha512-a5bFyofd/BHCX52/8i8uJkjr9DYwXIPnM/plwI6W7ezItLGqzt7X2G2nXuYSfsIJdkwwj/g9DG1LkcGJI/dDoA==", + "deprecated": "Support has ended for 9.x series. Upgrade to @latest", + "hasInstallScript": true, + "engines": { + "node": "*" + } + }, "node_modules/history": { "version": "4.10.1", "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", @@ -7338,6 +12219,11 @@ "react-is": "^16.7.0" } }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + }, "node_modules/hpack.js": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", @@ -7381,6 +12267,28 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha512-M5ezZw4LzXbBKMruP+BNANf0k+19hDQMgpzBIYnya//Al+fjNct9Wf3b1WedLqdEs2hKBvxq/jh+DsHJLj0F9A==" + }, + "node_modules/hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha512-7Wn5GMLuHBjZCb2bTmnDOycho0p/7UVaAeqXZGbHrBCl6Yd/xDhQJAXe6Ga9AXJH2I5zY1dEdYw2u1UptnSBJA==" + }, + "node_modules/html-element-map": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/html-element-map/-/html-element-map-1.3.1.tgz", + "integrity": "sha512-6XMlxrAFX4UEEGxctfFnmrFaaZFNf9i5fNuV5wZ3WWQ4FVaNP1aX1LkX9j2mfEx1NpjeE/rL3nmgEn23GdFmrg==", + "dependencies": { + "array.prototype.filter": "^1.0.0", + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/html-entities": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", @@ -7561,6 +12469,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -7632,6 +12554,538 @@ "node": ">=14.0.0" } }, + "node_modules/imagemin": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-6.1.0.tgz", + "integrity": "sha512-8ryJBL1CN5uSHpiBMX0rJw79C9F9aJqMnjGnrd/1CafegpNuA81RBAAru/jQQEOWlOJJlpRnlcVFF6wq+Ist0A==", + "dependencies": { + "file-type": "^10.7.0", + "globby": "^8.0.1", + "make-dir": "^1.0.0", + "p-pipe": "^1.1.0", + "pify": "^4.0.1", + "replace-ext": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/imagemin-gifsicle": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/imagemin-gifsicle/-/imagemin-gifsicle-6.0.1.tgz", + "integrity": "sha512-kuu47c6iKDQ6R9J10xCwL0lgs0+sMz3LRHqRcJ2CRBWdcNmo3T5hUaM8hSZfksptZXJLGKk8heSAvwtSdB1Fng==", + "dependencies": { + "exec-buffer": "^3.0.0", + "gifsicle": "^4.0.0", + "is-gif": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/imagemin-jpegtran": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/imagemin-jpegtran/-/imagemin-jpegtran-6.0.0.tgz", + "integrity": "sha512-Ih+NgThzqYfEWv9t58EItncaaXIHR0u9RuhKa8CtVBlMBvY0dCIxgQJQCfwImA4AV1PMfmUKlkyIHJjb7V4z1g==", + "dependencies": { + "exec-buffer": "^3.0.0", + "is-jpg": "^2.0.0", + "jpegtran-bin": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/imagemin-optipng": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/imagemin-optipng/-/imagemin-optipng-6.0.0.tgz", + "integrity": "sha512-FoD2sMXvmoNm/zKPOWdhKpWdFdF9qiJmKC17MxZJPH42VMAp17/QENI/lIuP7LCUnLVAloO3AUoTSNzfhpyd8A==", + "dependencies": { + "exec-buffer": "^3.0.0", + "is-png": "^1.0.0", + "optipng-bin": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/imagemin-svgo": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/imagemin-svgo/-/imagemin-svgo-7.1.0.tgz", + "integrity": "sha512-0JlIZNWP0Luasn1HT82uB9nU9aa+vUj6kpT+MjPW11LbprXC+iC4HDwn1r4Q2/91qj4iy9tRZNsFySMlEpLdpg==", + "dependencies": { + "is-svg": "^4.2.1", + "svgo": "^1.3.2" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sindresorhus/imagemin-svgo?sponsor=1" + } + }, + "node_modules/imagemin-svgo/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/imagemin-svgo/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/imagemin-svgo/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/imagemin-svgo/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/imagemin-svgo/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/imagemin-svgo/node_modules/css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "node_modules/imagemin-svgo/node_modules/css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "dependencies": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/imagemin-svgo/node_modules/css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/imagemin-svgo/node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/imagemin-svgo/node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/imagemin-svgo/node_modules/domutils/node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "node_modules/imagemin-svgo/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/imagemin-svgo/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/imagemin-svgo/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/imagemin-svgo/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/imagemin-svgo/node_modules/mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" + }, + "node_modules/imagemin-svgo/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/imagemin-svgo/node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dependencies": { + "boolbase": "~1.0.0" + } + }, + "node_modules/imagemin-svgo/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/imagemin-svgo/node_modules/svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", + "dependencies": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/imagemin/node_modules/@nodelib/fs.stat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", + "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/imagemin/node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/imagemin/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/imagemin/node_modules/dir-glob": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", + "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", + "dependencies": { + "arrify": "^1.0.1", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/imagemin/node_modules/fast-glob": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", + "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "dependencies": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/imagemin/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/imagemin/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/imagemin/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/imagemin/node_modules/globby": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz", + "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==", + "dependencies": { + "array-union": "^1.0.1", + "dir-glob": "2.0.0", + "fast-glob": "^2.0.2", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/imagemin/node_modules/globby/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/imagemin/node_modules/ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==" + }, + "node_modules/imagemin/node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "node_modules/imagemin/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/imagemin/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/imagemin/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/imagemin/node_modules/make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/imagemin/node_modules/make-dir/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/imagemin/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/imagemin/node_modules/micromatch/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/imagemin/node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/imagemin/node_modules/path-type/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/imagemin/node_modules/slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/imagemin/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/immediate": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", @@ -7685,6 +13139,11 @@ "node": ">=8" } }, + "node_modules/indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha512-bup+4tap3Hympa+JBJUG7XuOsdNQ6fxt0MHyXMKuLBKn0OqsTfvUxkUrroEX1+B2VsSHvCjiIcZVxRtYa4nllA==" + }, "node_modules/infima": { "version": "0.2.0-alpha.43", "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.43.tgz", @@ -7717,6 +13176,19 @@ "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" }, + "node_modules/internal-slot": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", + "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", + "dependencies": { + "get-intrinsic": "^1.2.2", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/interpret": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", @@ -7725,6 +13197,18 @@ "node": ">= 0.10" } }, + "node_modules/into-stream": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", + "integrity": "sha512-TcdjPibTksa1NQximqep2r17ISRiNE9fwlfbg3F8ANdvP5/yrFTew86VcO//jk4QTaMlbjypPBq76HN2zaKfZQ==", + "dependencies": { + "from2": "^2.1.1", + "p-is-promise": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", @@ -7733,6 +13217,14 @@ "loose-envify": "^1.0.0" } }, + "node_modules/ip-regex": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", + "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==", + "engines": { + "node": ">=8" + } + }, "node_modules/ipaddr.js": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", @@ -7741,6 +13233,25 @@ "node": ">= 10" } }, + "node_modules/is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha512-vOx7VprsKyllwjSkLV79NIhpyLfr3jAp7VaTCMXOJHu4m0Ew1CZ2fcjASwmV1jI3BWuWHB013M48eyeldk9gYg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz", + "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==", + "dependencies": { + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/is-alphabetical": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", @@ -7763,11 +13274,35 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -7779,6 +13314,21 @@ "node": ">=8" } }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-buffer": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", @@ -7801,6 +13351,17 @@ "node": ">=4" } }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-ci": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", @@ -7817,6 +13378,19 @@ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" }, + "node_modules/is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha512-H1U8Vz0cfXNujrJzEcvvwMDW9Ra+biSYA3ThdQvAnMLJkEHQXn6bWzLkxHtVYJ+Sdbx0b6finn3jZiaVe7MAHA==", + "dependencies": { + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" + } + }, "node_modules/is-core-module": { "version": "2.13.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", @@ -7828,6 +13402,31 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-data-descriptor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz", + "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==", + "dependencies": { + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-decimal": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", @@ -7837,6 +13436,26 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/is-descriptor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", @@ -7867,6 +13486,17 @@ "node": ">=0.10.0" } }, + "node_modules/is-finite": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -7875,6 +13505,17 @@ "node": ">=8" } }, + "node_modules/is-gif": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-gif/-/is-gif-3.0.0.tgz", + "integrity": "sha512-IqJ/jlbw5WJSNfwQ/lHEDXF8rxhRgF6ythk2oiEvhpG29F704eX9NO6TvPfMiq9DrbwgcEDnETYNcZDPewQoVw==", + "dependencies": { + "file-type": "^10.4.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -7910,6 +13551,30 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-jpg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-jpg/-/is-jpg-2.0.0.tgz", + "integrity": "sha512-ODlO0ruzhkzD3sdynIainVP5eoOFNN85rxA1+cwwnPe4dKyX0r5+hxNO5XpCrxlHcmb9vkOit9mhRD2JVuimHg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-natural-number": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", + "integrity": "sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==" + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-npm": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", @@ -7929,6 +13594,20 @@ "node": ">=0.12.0" } }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", @@ -7937,6 +13616,14 @@ "node": ">=0.10.0" } }, + "node_modules/is-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", + "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-path-cwd": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", @@ -7972,6 +13659,29 @@ "node": ">=0.10.0" } }, + "node_modules/is-png": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-png/-/is-png-1.1.0.tgz", + "integrity": "sha512-23Rmps8UEx3Bzqr0JqAtQo0tYP6sDfIfMt1rL9rzlla/zbteftI9LSJoqsIoGgL06sJboDGdVns4RTakAW/WTw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-regexp": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", @@ -7980,6 +13690,19 @@ "node": ">=0.10.0" } }, + "node_modules/is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" + }, + "node_modules/is-retry-allowed": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-root": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", @@ -7988,6 +13711,17 @@ "node": ">=6" } }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -7999,11 +13733,93 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-subset": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", + "integrity": "sha512-6Ybun0IkarhmEqxXCNw/C0bna6Zb/TkfUX9UbwJtK6ObwAVCxmAP308WWTHviM/zAqXk05cdhYsUsZeGQh99iw==" + }, + "node_modules/is-svg": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-4.4.0.tgz", + "integrity": "sha512-v+AgVwiK5DsGtT9ng+m4mClp6zDAmwrW8nZi6Gg15qzvBnRWWdfWA1TGaXyCDnWq5g5asofIgMVl3PjKxvk1ug==", + "dependencies": { + "fast-xml-parser": "^4.1.3" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dependencies": { + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" }, + "node_modules/is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" + }, + "node_modules/is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==" + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-whitespace-character": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", @@ -8013,6 +13829,14 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-word-character": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", @@ -8038,6 +13862,19 @@ "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" }, + "node_modules/is2": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/is2/-/is2-2.0.9.tgz", + "integrity": "sha512-rZkHeBn9Zzq52sd9IUIV3a5mfwBY+o2HePMh0wkGBM4z4qjvy2GwVxQ6nNXSfw6MmVP6gf1QIlWjiOavhM3x5g==", + "dependencies": { + "deep-is": "^0.1.3", + "ip-regex": "^4.1.0", + "is-url": "^1.2.4" + }, + "engines": { + "node": ">=v0.10.0" + } + }, "node_modules/isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", @@ -8056,6 +13893,23 @@ "node": ">=0.10.0" } }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" + }, + "node_modules/isurl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "dependencies": { + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" + }, + "engines": { + "node": ">= 4" + } + }, "node_modules/jest-util": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.2.tgz", @@ -8120,6 +13974,23 @@ "@sideway/pinpoint": "^2.0.0" } }, + "node_modules/jpegtran-bin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jpegtran-bin/-/jpegtran-bin-4.0.0.tgz", + "integrity": "sha512-2cRl1ism+wJUoYAYFt6O/rLBfpXNWG2dUWbgcEkTt5WGMnqI46eEro8T4C5zGROxKRqyKpCBSdHPvt5UYCtxaQ==", + "hasInstallScript": true, + "dependencies": { + "bin-build": "^3.0.0", + "bin-wrapper": "^4.0.0", + "logalot": "^2.0.0" + }, + "bin": { + "jpegtran": "cli.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -8136,6 +14007,11 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" + }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -8152,16 +14028,31 @@ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==" }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" + }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", @@ -8184,6 +14075,20 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, "node_modules/keyv": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", @@ -8228,6 +14133,17 @@ "shell-quote": "^1.7.3" } }, + "node_modules/lazy-cache": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", + "integrity": "sha512-7vp2Acd2+Kz4XkzxGxaB1FWOi8KjWIWsgdfD5MCb86DWvlLqhRPM+d6Pro3iNEL5VT9mstz5hKAlcd+QR6H3aA==", + "dependencies": { + "set-getter": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -8249,6 +14165,91 @@ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, + "node_modules/list-item": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/list-item/-/list-item-1.1.1.tgz", + "integrity": "sha512-S3D0WZ4J6hyM8o5SNKWaMYB1ALSacPZ2nHGEuCjmHZ+dc03gFeNZoNDcqfcnO4vDhTZmNrqrpYZCdXsRh22bzw==", + "dependencies": { + "expand-range": "^1.8.1", + "extend-shallow": "^2.0.1", + "is-number": "^2.1.0", + "repeat-string": "^1.5.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/list-item/node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "node_modules/list-item/node_modules/is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha512-QUzH43Gfb9+5yckcrSA0VBDwEtDUchrk4F6tfJZQuNzDJbEDB9cZNzSfXGQ1jqmdDY/kl41lUOWM9syA8z8jlg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/list-item/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/listenercount": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", + "integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==" + }, + "node_modules/livereload-js": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.4.0.tgz", + "integrity": "sha512-XPQH8Z2GDP/Hwz2PCDrh2mth4yFejwA1OZ/81Ti3LgKyhDcEjsSsqFWZojHG0va/duGd+WyosY7eXLDoOyqcPw==" + }, + "node_modules/load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/load-json-file/node_modules/parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", + "dependencies": { + "error-ex": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/load-json-file/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/loader-runner": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", @@ -8286,6 +14287,26 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "node_modules/lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==" + }, + "node_modules/lodash.assignin": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", + "integrity": "sha512-yX/rx6d/UTVh7sSVWVSIMjfnz95evAgDFdb1ZozC35I9mSFCkmzptOzevxjgbQUsc78NR44LVHWjsoMQXy9FDg==" + }, + "node_modules/lodash.bind": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", + "integrity": "sha512-lxdsn7xxlCymgLYo1gGvVrfHmkjDiyqVv62FAeF2i5ta72BipE1SLxw8hPEPLhD4/247Ijw07UQH7Hq/chT5LA==" + }, + "node_modules/lodash.chunk": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.chunk/-/lodash.chunk-4.2.0.tgz", + "integrity": "sha512-ZzydJKfUHJwHa+hF5X66zLFCBrWn5GeF28OHEr4WVWtNDXlQ/IjWKPBiikqKo2ne0+v6JgCgJ0GzJp8k8bHC7w==" + }, "node_modules/lodash.curry": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", @@ -8296,21 +14317,133 @@ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==" + }, + "node_modules/lodash.escape": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", + "integrity": "sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw==" + }, + "node_modules/lodash.filter": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", + "integrity": "sha512-pXYUy7PR8BCLwX5mgJ/aNtyOvuJTdZAo9EQFUvMIYugqmJxnrYaANvTbgndOzHSCSR0wnlBBfRXJL5SbWxo3FQ==" + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==" + }, + "node_modules/lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==" + }, "node_modules/lodash.flow": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", "integrity": "sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw==" }, + "node_modules/lodash.foreach": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", + "integrity": "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" + }, + "node_modules/lodash.map": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", + "integrity": "sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==" + }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, + "node_modules/lodash.padstart": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz", + "integrity": "sha512-sW73O6S8+Tg66eY56DBk85aQzzUJDtpoXFBgELMd5P/SotAguo+1kYO6RuYgXxA4HJH3LFTFPASX6ET6bjfriw==" + }, + "node_modules/lodash.pick": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "integrity": "sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==" + }, + "node_modules/lodash.reduce": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", + "integrity": "sha512-6raRe2vxCYBhpBu+B+TtNGUzah+hQjVdu3E17wfusjyrXBka2nBS8OH/gjVZ5PvHOhWmIZTYri09Z6n/QfnNMw==" + }, + "node_modules/lodash.reject": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", + "integrity": "sha512-qkTuvgEzYdyhiJBx42YPzPo71R1aEr0z79kAv7Ixg8wPFEjgRgJdUsGMG3Hf3OYSF/kHI79XhNlt+5Ar6OzwxQ==" + }, + "node_modules/lodash.some": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", + "integrity": "sha512-j7MJE+TuT51q9ggt4fSgVqro163BEFjAt3u97IqU+JA2DkWl80nFTrowzLpZ/BnpN7rrl0JA/593NAdd8p/scQ==" + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==" + }, + "node_modules/lodash.template": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", + "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", + "dependencies": { + "lodash._reinterpolate": "^3.0.0", + "lodash.templatesettings": "^4.0.0" + } + }, + "node_modules/lodash.templatesettings": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", + "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "dependencies": { + "lodash._reinterpolate": "^3.0.0" + } + }, "node_modules/lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" }, + "node_modules/logalot": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/logalot/-/logalot-2.1.0.tgz", + "integrity": "sha512-Ah4CgdSRfeCJagxQhcVNMi9BfGYyEKLa6d7OA6xSbld/Hg3Cf2QiOa1mDpmG7Ve8LOH6DN3mdttzjQAvWTyVkw==", + "dependencies": { + "figures": "^1.3.5", + "squeak": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha512-k+yt5n3l48JU4k8ftnKG6V7u32wyH2NfKzeMto9F/QRE0amxy/LayxwlvjjkZEIzqR+19IrtFO8p5kB9QaYUFg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -8322,6 +14455,18 @@ "loose-envify": "cli.js" } }, + "node_modules/loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ==", + "dependencies": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/lower-case": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", @@ -8338,6 +14483,34 @@ "node": ">=0.10.0" } }, + "node_modules/lpad-align": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/lpad-align/-/lpad-align-1.1.2.tgz", + "integrity": "sha512-MMIcFmmR9zlGZtBcFOows6c2COMekHCIFJz3ew/rRpKZ1wR4mXDPzvcVqLarux8M33X4TPSq2Jdw8WJj0q0KbQ==", + "dependencies": { + "get-stdin": "^4.0.1", + "indent-string": "^2.1.0", + "longest": "^1.0.0", + "meow": "^3.3.0" + }, + "bin": { + "lpad-align": "cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lpad-align/node_modules/indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg==", + "dependencies": { + "repeating": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -8378,6 +14551,33 @@ "semver": "bin/semver.js" } }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/markdown-escapes": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", @@ -8387,6 +14587,102 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/markdown-link": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/markdown-link/-/markdown-link-0.1.1.tgz", + "integrity": "sha512-TurLymbyLyo+kAUUAV9ggR9EPcDjP/ctlv9QAFiqUH7c+t6FlsbivPo9OKTU8xdOx9oNd2drW/Fi5RRElQbUqA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/markdown-toc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/markdown-toc/-/markdown-toc-1.2.0.tgz", + "integrity": "sha512-eOsq7EGd3asV0oBfmyqngeEIhrbkc7XVP63OwcJBIhH2EpG2PzFcbZdhy1jutXSlRBBVMNXHvMtSr5LAxSUvUg==", + "dependencies": { + "concat-stream": "^1.5.2", + "diacritics-map": "^0.1.0", + "gray-matter": "^2.1.0", + "lazy-cache": "^2.0.2", + "list-item": "^1.1.1", + "markdown-link": "^0.1.1", + "minimist": "^1.2.0", + "mixin-deep": "^1.1.3", + "object.pick": "^1.2.0", + "remarkable": "^1.7.1", + "repeat-string": "^1.6.1", + "strip-color": "^0.1.0" + }, + "bin": { + "markdown-toc": "cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/markdown-toc/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/markdown-toc/node_modules/autolinker": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/autolinker/-/autolinker-0.28.1.tgz", + "integrity": "sha512-zQAFO1Dlsn69eXaO6+7YZc+v84aquQKbwpzCE3L0stj56ERn9hutFxPopViLjo9G+rWwjozRhgS5KJ25Xy19cQ==", + "dependencies": { + "gulp-header": "^1.7.1" + } + }, + "node_modules/markdown-toc/node_modules/gray-matter": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-2.1.1.tgz", + "integrity": "sha512-vbmvP1Fe/fxuT2QuLVcqb2BfK7upGhhbLIt9/owWEvPYrZZEkelLcq2HqzxosV+PQ67dUFLaAeNpH7C4hhICAA==", + "dependencies": { + "ansi-red": "^0.1.1", + "coffee-script": "^1.12.4", + "extend-shallow": "^2.0.1", + "js-yaml": "^3.8.1", + "toml": "^2.3.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/markdown-toc/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/markdown-toc/node_modules/remarkable": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/remarkable/-/remarkable-1.7.4.tgz", + "integrity": "sha512-e6NKUXgX95whv7IgddywbeN/ItCkWbISmc2DiqHJb0wTrqZIexqdco5b8Z3XZoo/48IdNVKM9ZCvTPJ4F5uvhg==", + "dependencies": { + "argparse": "^1.0.10", + "autolinker": "~0.28.0" + }, + "bin": { + "remarkable": "bin/remarkable.js" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/math-random": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", + "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==" + }, "node_modules/mdast-squeeze-paragraphs": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", @@ -8468,6 +14764,26 @@ "node": ">= 4.0.0" } }, + "node_modules/meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA==", + "dependencies": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -8494,6 +14810,11 @@ "node": ">= 0.6" } }, + "node_modules/microevent.ts": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz", + "integrity": "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==" + }, "node_modules/micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", @@ -8643,6 +14964,29 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-deep/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/mkdirp": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz", @@ -8657,6 +15001,11 @@ "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" }, + "node_modules/moo": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.2.tgz", + "integrity": "sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==" + }, "node_modules/mrmime": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", @@ -8699,11 +15048,81 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/napi-build-utils": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" }, + "node_modules/nearley": { + "version": "2.20.1", + "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.20.1.tgz", + "integrity": "sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==", + "dependencies": { + "commander": "^2.19.0", + "moo": "^0.5.0", + "railroad-diagrams": "^1.0.0", + "randexp": "0.4.6" + }, + "bin": { + "nearley-railroad": "bin/nearley-railroad.js", + "nearley-test": "bin/nearley-test.js", + "nearley-unparse": "bin/nearley-unparse.js", + "nearleyc": "bin/nearleyc.js" + }, + "funding": { + "type": "individual", + "url": "https://nearley.js.org/#give-to-nearley" + } + }, + "node_modules/nearley/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -8717,6 +15136,11 @@ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, "node_modules/no-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", @@ -8796,6 +15220,25 @@ "node": "*" } }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -8828,6 +15271,26 @@ "resolved": "https://registry.npmjs.org/not/-/not-0.1.0.tgz", "integrity": "sha512-5PDmaAsVfnWUgTUbJ3ERwn7u79Z0dYxN9ErxCpVJJqe2RK0PJ3z+iFUxuqjwtlDDegXvtWoxD/3Fzxox7tFGWA==" }, + "node_modules/npm-conf": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", + "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", + "dependencies": { + "config-chain": "^1.1.11", + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-conf/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "engines": { + "node": ">=4" + } + }, "node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -8855,6 +15318,19 @@ "url": "https://github.com/fb55/nth-check?sponsor=1" } }, + "node_modules/num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==" + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "engines": { + "node": "*" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -8863,10 +15339,77 @@ "node": ">=0.10.0" } }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "node_modules/object-copy/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -8879,6 +15422,17 @@ "node": ">= 0.4" } }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object.assign": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", @@ -8896,6 +15450,80 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object.entries": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", + "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.7.tgz", + "integrity": "sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g==", + "dependencies": { + "array.prototype.reduce": "^1.0.6", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "safe-array-concat": "^1.0.0" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.values": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/obuf": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", @@ -8966,6 +15594,34 @@ "opener": "bin/opener-bin.js" } }, + "node_modules/optipng-bin": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/optipng-bin/-/optipng-bin-5.1.0.tgz", + "integrity": "sha512-9baoqZTNNmXQjq/PQTWEXbVV3AMO2sI/GaaqZJZ8SExfAzjijeAP7FEeT+TtyumSw7gr0PZtSUYB/Ke7iHQVKA==", + "hasInstallScript": true, + "dependencies": { + "bin-build": "^3.0.0", + "bin-wrapper": "^4.0.0", + "logalot": "^2.0.0" + }, + "bin": { + "optipng": "cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/os-filter-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-2.0.0.tgz", + "integrity": "sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==", + "dependencies": { + "arch": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/p-cancelable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", @@ -8974,6 +15630,33 @@ "node": ">=6" } }, + "node_modules/p-event": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-1.3.0.tgz", + "integrity": "sha512-hV1zbA7gwqPVFcapfeATaNjQ3J0NuzorHPyG8GPL9g/Y/TplWVBVoCKCXL6Ej2zscrCEv195QNWJXuBH6XZuzA==", + "dependencies": { + "p-timeout": "^1.1.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-is-promise": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", + "integrity": "sha512-zL7VE4JVS2IFSkR2GQKDSPEVxkoH43/p7oEnwpdCndKYJO0HVeRB7fA8TJwuLOTBREtK0ea8eHaxdwcpob5dmg==", + "engines": { + "node": ">=4" + } + }, "node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -9013,6 +15696,33 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-map-series": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-1.0.0.tgz", + "integrity": "sha512-4k9LlvY6Bo/1FcIdV33wqZQES0Py+iKISU9Uc8p8AjWoZPnFKMpVIVD3s0EYn4jzLh1I+WeUZkJ0Yoa4Qfw3Kg==", + "dependencies": { + "p-reduce": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-pipe": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-1.2.0.tgz", + "integrity": "sha512-IA8SqjIGA8l9qOksXJvsvkeQ+VGb0TAzNCzvKvz9wt5wWLqfWbV6fXy43gpR2L4Te8sOq3S+Ql9biAaMKPdbtw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-reduce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", + "integrity": "sha512-3Tx1T3oM1xO/Y8Gj0sWyE78EIJZ+t+aEmXUdvQgvGmSMri7aPTHoovbXEreWKkL5j21Er60XAWLTzKbAKYOujQ==", + "engines": { + "node": ">=4" + } + }, "node_modules/p-retry": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", @@ -9025,6 +15735,17 @@ "node": ">=8" } }, + "node_modules/p-timeout": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", + "integrity": "sha512-gb0ryzr+K2qFqFv6qi3khoeqMZF/+ajxQipEF6NteZVnvz9tzdsfAVj3lYtn1gAXvH5lfLwfxEII799gt/mRIA==", + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -9154,6 +15875,19 @@ "tslib": "^2.0.3" } }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==" + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -9204,6 +15938,16 @@ "node": ">=8" } }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -9220,6 +15964,41 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "engines": { + "node": ">=6" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "engines": { + "node": ">= 6" + } + }, "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -9284,6 +16063,46 @@ "node": ">=4" } }, + "node_modules/portfinder": { + "version": "1.0.32", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz", + "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==", + "dependencies": { + "async": "^2.6.4", + "debug": "^3.2.7", + "mkdirp": "^0.5.6" + }, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/portfinder/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/portfinder/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/postcss": { "version": "8.4.31", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", @@ -9900,6 +16719,17 @@ "node": ">=4" } }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/pretty-error": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", @@ -9968,6 +16798,16 @@ "react-is": "^16.13.1" } }, + "node_modules/prop-types-exact": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/prop-types-exact/-/prop-types-exact-1.2.0.tgz", + "integrity": "sha512-K+Tk3Kd9V0odiXFP9fwDHUYRyvK3Nun3GVyPapSIs5OBkITAm15W0CPFD/YKTkMUAbc0b9CUwRQp2ybiBIq+eA==", + "dependencies": { + "has": "^1.0.3", + "object.assign": "^4.1.0", + "reflect.ownkeys": "^0.2.0" + } + }, "node_modules/property-information": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", @@ -9980,6 +16820,11 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==" + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -10000,6 +16845,16 @@ "node": ">= 0.10" } }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==" + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -10030,6 +16885,15 @@ "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", "integrity": "sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA==" }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, "node_modules/qs": { "version": "6.11.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", @@ -10044,6 +16908,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "dependencies": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/queue": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", @@ -10076,6 +16953,52 @@ "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==" }, + "node_modules/raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "dependencies": { + "performance-now": "^2.1.0" + } + }, + "node_modules/railroad-diagrams": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", + "integrity": "sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A==" + }, + "node_modules/randexp": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz", + "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==", + "dependencies": { + "discontinuous-range": "1.0.0", + "ret": "~0.1.10" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/randomatic": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", + "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", + "dependencies": { + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/randomatic/node_modules/is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -10433,6 +17356,75 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" }, + "node_modules/read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", + "dependencies": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", + "dependencies": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", + "dependencies": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg-up/node_modules/path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", + "dependencies": { + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg/node_modules/path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", + "dependencies": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -10484,6 +17476,34 @@ "node": ">=6.0.0" } }, + "node_modules/redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g==", + "dependencies": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/redent/node_modules/indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg==", + "dependencies": { + "repeating": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/reflect.ownkeys": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz", + "integrity": "sha512-qOLsBKHCpSOFKK1NUOCGC5VyeufB6lEsFe92AL2bhIJsacZS1qdoOZSbPk3MYKuT2cFlRDnulKXuuElIrMjGUg==" + }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -10513,6 +17533,57 @@ "@babel/runtime": "^7.8.4" } }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-not/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-not/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "set-function-name": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/regexpu-core": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", @@ -10752,6 +17823,29 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/remarkable": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/remarkable/-/remarkable-2.0.1.tgz", + "integrity": "sha512-YJyMcOH5lrR+kZdmB0aJJ4+93bEojRZ1HGDn9Eagu6ibg7aVZhc3OWbbShRid+Q5eAfsEqWxpe+g5W5nYNfNiA==", + "dependencies": { + "argparse": "^1.0.10", + "autolinker": "^3.11.0" + }, + "bin": { + "remarkable": "bin/remarkable.js" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/remarkable/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, "node_modules/renderkid": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", @@ -10845,6 +17939,14 @@ "entities": "^2.0.0" } }, + "node_modules/repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", @@ -10853,6 +17955,92 @@ "node": ">=0.10" } }, + "node_modules/repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==", + "dependencies": { + "is-finite": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/replace-ext": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/request/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/request/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, "node_modules/require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", @@ -10903,6 +18091,12 @@ "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", + "deprecated": "https://github.com/lydell/resolve-url#deprecated" + }, "node_modules/responselike": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", @@ -10911,6 +18105,14 @@ "lowercase-keys": "^1.0.0" } }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "engines": { + "node": ">=0.12" + } + }, "node_modules/retry": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", @@ -10928,6 +18130,16 @@ "node": ">=0.10.0" } }, + "node_modules/rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha512-gDK5mkALDFER2YLqH6imYvK6g02gpNGM4ILDZ472EwWfXZnC2ZEpoB2ECXTyOVUKuk/bPJZMzwQPBYICzP+D3w==" + }, + "node_modules/rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha512-zgn5OjNQXLUTdq8m17KdaicF6w89TZs8ZU8y0AYENIU6wG8GG6LLm0yLSiPY8DmaYmHdgRW8rnApjoT0fQRfMg==" + }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -10942,6 +18154,15 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/rst-selector-parser": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz", + "integrity": "sha512-nDG1rZeP6oFTLN6yNDV/uiAvs1+FS/KlrEwh7+y7dpuApDBy6bI2HTBcc0/V8lv9OTqfyD34eF7au2pm8aBbhA==", + "dependencies": { + "lodash.flattendeep": "^4.4.0", + "nearley": "^2.7.10" + } + }, "node_modules/rtl-detect": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.0.4.tgz", @@ -11048,6 +18269,28 @@ "tslib": "^2.1.0" } }, + "node_modules/safe-array-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", + "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -11067,6 +18310,32 @@ } ] }, + "node_modules/safe-json-parse": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-json-parse/-/safe-json-parse-1.0.1.tgz", + "integrity": "sha512-o0JmTu17WGUaUOHa1l0FPGXKBfijbxK6qoHzlkihsDXxzBHvJcA7zgviKR92Xs841rX9pK16unfphLq0/KqX7A==" + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -11124,6 +18393,23 @@ "node": ">=4" } }, + "node_modules/seek-bzip": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", + "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", + "dependencies": { + "commander": "^2.8.1" + }, + "bin": { + "seek-bunzip": "bin/seek-bunzip", + "seek-table": "bin/seek-bzip-table" + } + }, + "node_modules/seek-bzip/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, "node_modules/select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", @@ -11173,6 +18459,33 @@ "semver": "bin/semver.js" } }, + "node_modules/semver-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz", + "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/semver-truncate": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-1.1.2.tgz", + "integrity": "sha512-V1fGg9i4CL3qesB6U0L6XAm4xOJiHmt4QAacazumuasc03BvtFGIMCduv01JWQ69Nv+JST9TqhSCiJoxoY031w==", + "dependencies": { + "semver": "^5.3.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/semver-truncate/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, "node_modules/semver/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -11350,6 +18663,58 @@ "node": ">= 0.8.0" } }, + "node_modules/set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "dependencies": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "dependencies": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-getter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/set-getter/-/set-getter-0.1.1.tgz", + "integrity": "sha512-9sVWOy+gthr+0G9DzqqLaYNA7+5OKkSmcqjL9cBpDEaZrr3ShQlyX2cZ/O/ozE41oxn/Tt0LGEM/w4Rub3A3gw==", + "dependencies": { + "to-object-path": "^0.3.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", @@ -11609,6 +18974,119 @@ "node": ">=8" } }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/snapdragon/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/sockjs": { "version": "0.3.24", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", @@ -11635,6 +19113,36 @@ "node": ">= 6.3.0" } }, + "node_modules/sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==", + "dependencies": { + "is-plain-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sort-keys-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", + "integrity": "sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==", + "dependencies": { + "sort-keys": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sort-keys/node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -11651,6 +19159,19 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, "node_modules/source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", @@ -11660,6 +19181,12 @@ "source-map": "^0.6.0" } }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated" + }, "node_modules/space-separated-tokens": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", @@ -11669,6 +19196,34 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", + "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==" + }, "node_modules/spdy": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", @@ -11697,11 +19252,140 @@ "wbuf": "^1.7.3" } }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, + "node_modules/squeak": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/squeak/-/squeak-1.3.0.tgz", + "integrity": "sha512-YQL1ulInM+ev8nXX7vfXsCsDh6IqXlrremc1hzi77776BtpWgYJUMto3UM05GSAaGzJgWekszjoKDrVNB5XG+A==", + "dependencies": { + "chalk": "^1.0.0", + "console-stream": "^0.1.1", + "lpad-align": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/squeak/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/squeak/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/squeak/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/squeak/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/squeak/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/squeak/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/stable": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", @@ -11717,6 +19401,41 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -11739,6 +19458,14 @@ "queue-tick": "^1.0.1" } }, + "node_modules/strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -11747,6 +19474,11 @@ "safe-buffer": "~5.2.0" } }, + "node_modules/string-template": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", + "integrity": "sha512-Yptehjogou2xm4UJbxJ4CxgZx12HBfeystp0y3x7s4Dj32ltVVG1Gg8YhKjHZkHicuKpZX/ffilA8505VbUbpw==" + }, "node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", @@ -11788,6 +19520,48 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, + "node_modules/string.prototype.trim": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/stringify-object": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", @@ -11812,6 +19586,17 @@ "node": ">=8" } }, + "node_modules/strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", + "dependencies": { + "is-utf8": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/strip-bom-string": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", @@ -11820,6 +19605,30 @@ "node": ">=0.10.0" } }, + "node_modules/strip-color": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/strip-color/-/strip-color-0.1.0.tgz", + "integrity": "sha512-p9LsUieSjWNNAxVCXLeilaDlmuUOrDS5/dF9znM1nZc7EGX5+zEFC0bEevsNIaldjlks+2jns5Siz6F9iK6jwA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", + "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", + "dependencies": { + "is-natural-number": "^4.0.1" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", @@ -11828,6 +19637,20 @@ "node": ">=6" } }, + "node_modules/strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA==", + "dependencies": { + "get-stdin": "^4.0.1" + }, + "bin": { + "strip-indent": "cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -11839,6 +19662,30 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/strip-outer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", + "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", + "dependencies": { + "escape-string-regexp": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-outer/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + }, "node_modules/style-to-object": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", @@ -12014,6 +19861,60 @@ "node": ">=6" } }, + "node_modules/tcp-port-used": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tcp-port-used/-/tcp-port-used-1.0.2.tgz", + "integrity": "sha512-l7ar8lLUD3XS1V2lfoJlCBaeoaWo/2xfYt81hM7VlvR4RrMVFqfmzfhLVk40hAb368uitje5gPtBRL1m/DGvLA==", + "dependencies": { + "debug": "4.3.1", + "is2": "^2.0.6" + } + }, + "node_modules/tcp-port-used/node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/temp-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/tempfile": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-2.0.0.tgz", + "integrity": "sha512-ZOn6nJUgvgC09+doCEF3oB+r3ag7kUvlsXEGX069QRD60p+P3uP7XG9N2/at+EyIRGSN//ZY3LyEotA1YpmjuA==", + "dependencies": { + "temp-dir": "^1.0.0", + "uuid": "^3.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tempfile/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, "node_modules/terser": { "version": "5.19.2", "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.2.tgz", @@ -12118,21 +20019,117 @@ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/through2/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/through2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/through2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/through2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/thunky": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" }, + "node_modules/timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==" + }, "node_modules/tiny-invariant": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" }, + "node_modules/tiny-lr": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-1.1.1.tgz", + "integrity": "sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA==", + "dependencies": { + "body": "^5.1.0", + "debug": "^3.1.0", + "faye-websocket": "~0.10.0", + "livereload-js": "^2.3.0", + "object-assign": "^4.1.0", + "qs": "^6.4.0" + } + }, + "node_modules/tiny-lr/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/tiny-lr/node_modules/faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha512-Xhj93RXbMSq8urNCUq4p9l0P6hnySJ/7YNRhYNug0bLOuii7pKO7xQFb5mx9xZXWCar88pLPb805PvUkwrLZpQ==", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/tiny-warning": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" }, + "node_modules/to-buffer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", + "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" + }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -12141,6 +20138,33 @@ "node": ">=4" } }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/to-readable-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", @@ -12149,6 +20173,20 @@ "node": ">=6" } }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -12160,6 +20198,29 @@ "node": ">=8.0" } }, + "node_modules/to-regex/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/to-vfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/to-vfile/-/to-vfile-6.1.0.tgz", @@ -12181,6 +20242,11 @@ "node": ">=0.6" } }, + "node_modules/toml": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/toml/-/toml-2.3.6.tgz", + "integrity": "sha512-gVweAectJU3ebq//Ferr2JUY4WKSDe5N+z0FvjDncLGyHmIDoxgY/2Ie4qfEIDm4IS7OA6Rmdm7pdEEdMcV/xQ==" + }, "node_modules/totalist": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", @@ -12189,17 +20255,86 @@ "node": ">=6" } }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tough-cookie/node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, + "node_modules/traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==", + "engines": { + "node": "*" + } + }, + "node_modules/tree-node-cli": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/tree-node-cli/-/tree-node-cli-1.6.0.tgz", + "integrity": "sha512-M8um5Lbl76rWU5aC8oOeEhruiCM29lFCKnwpxrwMjpRicHXJx+bb9Cak11G3zYLrMb6Glsrhnn90rHIzDJrjvg==", + "dependencies": { + "commander": "^5.0.0", + "fast-folder-size": "1.6.1", + "pretty-bytes": "^5.6.0" + }, + "bin": { + "tree": "bin/tree.js", + "treee": "bin/tree.js" + } + }, "node_modules/trim": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", "integrity": "sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==", "deprecated": "Use String.prototype.trim() instead" }, + "node_modules/trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha512-Nm4cF79FhSTzrLKGDMi3I4utBtFv8qKy4sq1enftf2gMdpqI8oVQTAfySkTz5r49giVzDj88SVZXP4CeYQwjaw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/trim-repeated": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", + "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==", + "dependencies": { + "escape-string-regexp": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/trim-repeated/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/trim-trailing-lines": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", @@ -12218,6 +20353,117 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/truncate-html": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/truncate-html/-/truncate-html-1.0.4.tgz", + "integrity": "sha512-FpDAlPzpJ3jlZiNEahRs584FS3jOSQafgj4cC9DmAYPct6uMZDLY625+eErRd43G35vGDrNq3i7b4aYUQ/Bxqw==", + "dependencies": { + "@types/cheerio": "^0.22.8", + "cheerio": "0.22.0" + } + }, + "node_modules/truncate-html/node_modules/cheerio": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", + "integrity": "sha512-8/MzidM6G/TgRelkzDG13y3Y9LxBjCb+8yOEZ9+wwq5gVF2w2pV0wmHvjfT0RvuxGyR7UEuK36r+yYMbT4uKgA==", + "dependencies": { + "css-select": "~1.2.0", + "dom-serializer": "~0.1.0", + "entities": "~1.1.1", + "htmlparser2": "^3.9.1", + "lodash.assignin": "^4.0.9", + "lodash.bind": "^4.1.4", + "lodash.defaults": "^4.0.1", + "lodash.filter": "^4.4.0", + "lodash.flatten": "^4.2.0", + "lodash.foreach": "^4.3.0", + "lodash.map": "^4.4.0", + "lodash.merge": "^4.4.0", + "lodash.pick": "^4.2.1", + "lodash.reduce": "^4.4.0", + "lodash.reject": "^4.4.0", + "lodash.some": "^4.4.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/truncate-html/node_modules/css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha512-dUQOBoqdR7QwV90WysXPLXG5LO7nhYBgiWVfxF80DKPF8zx1t/pUd2FYy73emg3zrjtM6dzmYgbHKfV2rxiHQA==", + "dependencies": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, + "node_modules/truncate-html/node_modules/css-what": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", + "engines": { + "node": "*" + } + }, + "node_modules/truncate-html/node_modules/dom-serializer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "dependencies": { + "domelementtype": "^1.3.0", + "entities": "^1.1.1" + } + }, + "node_modules/truncate-html/node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "node_modules/truncate-html/node_modules/domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dependencies": { + "domelementtype": "1" + } + }, + "node_modules/truncate-html/node_modules/domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==", + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/truncate-html/node_modules/entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + }, + "node_modules/truncate-html/node_modules/htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "dependencies": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + } + }, + "node_modules/truncate-html/node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dependencies": { + "boolbase": "~1.0.0" + } + }, "node_modules/tslib": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", @@ -12234,6 +20480,11 @@ "node": "*" } }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" + }, "node_modules/type-fest": { "version": "2.19.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", @@ -12276,6 +20527,72 @@ "node": ">= 0.6" } }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + }, "node_modules/typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", @@ -12315,6 +20632,29 @@ "node": "*" } }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "dependencies": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, "node_modules/unherit": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", @@ -12381,6 +20721,30 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==" + }, + "node_modules/uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha512-mZdDpf3vBV5Efh29kMw5tXoup/buMgxLzOt/XKFKcVmi+15ManNQWr6HfZ2aiZTYlYixbdNJ0KFmIZIv52tHSQ==" + }, "node_modules/unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", @@ -12519,6 +20883,109 @@ "node": ">= 0.8" } }, + "node_modules/unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==" + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/unzipper": { + "version": "0.10.14", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.14.tgz", + "integrity": "sha512-ti4wZj+0bQTiX2KmKWuwj7lhV+2n//uXEotUmGuQqrbVZSEGFMbI68+c6JCQ8aAmUWYvtHEz2A8K6wXvueR/6g==", + "dependencies": { + "big-integer": "^1.6.17", + "binary": "~0.3.0", + "bluebird": "~3.4.1", + "buffer-indexof-polyfill": "~1.0.0", + "duplexer2": "~0.1.4", + "fstream": "^1.0.12", + "graceful-fs": "^4.2.2", + "listenercount": "~1.0.1", + "readable-stream": "~2.3.6", + "setimmediate": "~1.0.4" + } + }, + "node_modules/unzipper/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/unzipper/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/unzipper/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/unzipper/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/update-browserslist-db": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", @@ -12679,6 +21146,12 @@ "node": ">=6" } }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", + "deprecated": "Please see https://github.com/lydell/urix#deprecated" + }, "node_modules/url-loader": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", @@ -12752,6 +21225,22 @@ "node": ">=4" } }, + "node_modules/url-to-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", + "integrity": "sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/use-composed-ref": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz", @@ -12802,6 +21291,20 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, + "node_modules/util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/utila": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", @@ -12835,6 +21338,15 @@ "uuid": "dist/bin/uuid" } }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, "node_modules/value-equal": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", @@ -12848,6 +21360,33 @@ "node": ">= 0.8" } }, + "node_modules/vendors": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", + "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/verror/node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" + }, "node_modules/vfile": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", @@ -13356,6 +21895,39 @@ "node": ">= 8" } }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", + "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.4", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/wide-align": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", @@ -13401,6 +21973,22 @@ "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==" }, + "node_modules/wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha512-xSBsCeh+g+dinoBv3GAOWM4LcVVO68wLXRanibtBSdUvkGWQRGeE9P7IwU9EmDDi4jA6L44lz15CGMwdw9N5+Q==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/worker-rpc": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz", + "integrity": "sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==", + "dependencies": { + "microevent.ts": "~0.1.1" + } + }, "node_modules/wrap-ansi": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", @@ -13508,6 +22096,14 @@ "xml-js": "bin/cli.js" } }, + "node_modules/xmlbuilder": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-13.0.2.tgz", + "integrity": "sha512-Eux0i2QdDYKbdbA6AM6xE4m6ZTZr4G4xF9kahI2ukSEMCzwce2eX9WlTI5J3s+NU7hpasFsr8hWIONae7LluAQ==", + "engines": { + "node": ">=6.0" + } + }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -13529,6 +22125,44 @@ "node": ">= 6" } }, + "node_modules/yamljs": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/yamljs/-/yamljs-0.2.10.tgz", + "integrity": "sha512-sbkbOosewjeRmJ23Hjee1RgTxn+xa7mt4sew3tfD0SdH0LTcswnZC9dhSNq4PIz15roQMzb84DjECyQo5DWIww==", + "dependencies": { + "argparse": "^1.0.7", + "glob": "^7.0.5" + }, + "bin": { + "json2yaml": "bin/json2yaml", + "yaml2json": "bin/yaml2json" + } + }, + "node_modules/yamljs/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/yargs": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-2.3.0.tgz", + "integrity": "sha512-w48USdbTdaVMcE3CnXsEtSY9zYSN7dTyVnLBgrJF2quA5rLwobC9zixxfexereLGFaxjxtR3oWdydC0qoayakw==", + "dependencies": { + "wordwrap": "0.0.2" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/docs/my-website/package.json b/docs/my-website/package.json index 656f507c7..e8be813ba 100644 --- a/docs/my-website/package.json +++ b/docs/my-website/package.json @@ -20,6 +20,7 @@ "@docusaurus/preset-classic": "2.4.1", "@mdx-js/react": "^1.6.22", "clsx": "^1.2.1", + "docusaurus": "^1.14.7", "docusaurus-lunr-search": "^2.4.1", "prism-react-renderer": "^1.3.5", "react": "^17.0.2", diff --git a/docs/my-website/yarn.lock b/docs/my-website/yarn.lock index 16af6457e..5c9fa101d 100644 --- a/docs/my-website/yarn.lock +++ b/docs/my-website/yarn.lock @@ -84,7 +84,7 @@ "@algolia/requester-common" "4.19.1" "@algolia/transporter" "4.19.1" -"@algolia/client-search@4.19.1": +"@algolia/client-search@>= 4.9.1 < 6", "@algolia/client-search@4.19.1": version "4.19.1" resolved "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.19.1.tgz" integrity sha512-mBecfMFS4N+yK/p0ZbK53vrZbL6OtWMk8YmnOv1i0LXx4pelY8TFhqKoTit3NPVPwoSNN0vdSN9dTu1xr1XOVw== @@ -146,27 +146,47 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.22.10", "@babel/code-frame@^7.22.5", "@babel/code-frame@^7.8.3": - version "7.22.10" - resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.10.tgz" - integrity sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA== - dependencies: - "@babel/highlight" "^7.22.10" - chalk "^2.4.2" - -"@babel/code-frame@^7.22.13": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.22.10", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.8.3": version "7.22.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz" integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== dependencies: "@babel/highlight" "^7.22.13" chalk "^2.4.2" +"@babel/code-frame@^7.5.5", "@babel/code-frame@7.10.4": + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz" + integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== + dependencies: + "@babel/highlight" "^7.10.4" + "@babel/compat-data@^7.22.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9": version "7.22.9" resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz" integrity sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ== +"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.0.0-0 || ^8.0.0-0 <8.0.0", "@babel/core@^7.11.6", "@babel/core@^7.12.0", "@babel/core@^7.12.3", "@babel/core@^7.13.0", "@babel/core@^7.18.6", "@babel/core@^7.19.6", "@babel/core@^7.4.0 || ^8.0.0-0 <8.0.0": + version "7.22.10" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.22.10.tgz" + integrity sha512-fTmqbbUBAwCcre6zPzNngvsI0aNrPZe77AeqvDxWM9Nm+04RrJ3CAmGHA9f7lJQY6ZMhRztNemy4uslDxTX4Qw== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.22.10" + "@babel/generator" "^7.22.10" + "@babel/helper-compilation-targets" "^7.22.10" + "@babel/helper-module-transforms" "^7.22.9" + "@babel/helpers" "^7.22.10" + "@babel/parser" "^7.22.10" + "@babel/template" "^7.22.5" + "@babel/traverse" "^7.22.10" + "@babel/types" "^7.22.10" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.2" + semver "^6.3.1" + "@babel/core@7.12.9": version "7.12.9" resolved "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz" @@ -189,40 +209,9 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@^7.18.6", "@babel/core@^7.19.6": - version "7.22.10" - resolved "https://registry.npmjs.org/@babel/core/-/core-7.22.10.tgz" - integrity sha512-fTmqbbUBAwCcre6zPzNngvsI0aNrPZe77AeqvDxWM9Nm+04RrJ3CAmGHA9f7lJQY6ZMhRztNemy4uslDxTX4Qw== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.22.10" - "@babel/generator" "^7.22.10" - "@babel/helper-compilation-targets" "^7.22.10" - "@babel/helper-module-transforms" "^7.22.9" - "@babel/helpers" "^7.22.10" - "@babel/parser" "^7.22.10" - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.10" - "@babel/types" "^7.22.10" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.2" - semver "^6.3.1" - -"@babel/generator@^7.12.5", "@babel/generator@^7.18.7", "@babel/generator@^7.22.10": - version "7.22.10" - resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.22.10.tgz" - integrity sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A== - dependencies: - "@babel/types" "^7.22.10" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - -"@babel/generator@^7.23.3": +"@babel/generator@^7.12.5", "@babel/generator@^7.18.7", "@babel/generator@^7.22.10", "@babel/generator@^7.23.3": version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.3.tgz#86e6e83d95903fbe7613f448613b8b319f330a8e" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.23.3.tgz" integrity sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg== dependencies: "@babel/types" "^7.23.3" @@ -255,7 +244,7 @@ lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.22.10", "@babel/helper-create-class-features-plugin@^7.22.5": +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.22.10", "@babel/helper-create-class-features-plugin@^7.22.5": version "7.22.10" resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.10.tgz" integrity sha512-5IBb77txKYQPpOEdUdIhBx8VrZyDCQ+H82H0+5dX1TmuscP5vJKEE3cKurjtIw/vFwzbVH48VweE78kVDBrqjA== @@ -290,27 +279,14 @@ lodash.debounce "^4.0.8" resolve "^1.14.2" -"@babel/helper-environment-visitor@^7.22.20": +"@babel/helper-environment-visitor@^7.22.20", "@babel/helper-environment-visitor@^7.22.5": version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" + resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz" integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== -"@babel/helper-environment-visitor@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz" - integrity sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q== - -"@babel/helper-function-name@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz" - integrity sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ== - dependencies: - "@babel/template" "^7.22.5" - "@babel/types" "^7.22.5" - -"@babel/helper-function-name@^7.23.0": +"@babel/helper-function-name@^7.22.5", "@babel/helper-function-name@^7.23.0": version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" + resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz" integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== dependencies: "@babel/template" "^7.22.15" @@ -355,16 +331,16 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-plugin-utils@7.10.4": - version "7.10.4" - resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz" - integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== - "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.22.5" resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz" integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== +"@babel/helper-plugin-utils@7.10.4": + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz" + integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== + "@babel/helper-remap-async-to-generator@^7.22.5", "@babel/helper-remap-async-to-generator@^7.22.9": version "7.22.9" resolved "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz" @@ -409,16 +385,11 @@ resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz" integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== -"@babel/helper-validator-identifier@^7.22.20": +"@babel/helper-validator-identifier@^7.22.20", "@babel/helper-validator-identifier@^7.22.5": version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz" integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== -"@babel/helper-validator-identifier@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz" - integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ== - "@babel/helper-validator-option@^7.22.5": version "7.22.5" resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz" @@ -442,32 +413,18 @@ "@babel/traverse" "^7.22.10" "@babel/types" "^7.22.10" -"@babel/highlight@^7.22.10": - version "7.22.10" - resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.10.tgz" - integrity sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ== - dependencies: - "@babel/helper-validator-identifier" "^7.22.5" - chalk "^2.4.2" - js-tokens "^4.0.0" - -"@babel/highlight@^7.22.13": +"@babel/highlight@^7.10.4", "@babel/highlight@^7.22.13": version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz" integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== dependencies: "@babel/helper-validator-identifier" "^7.22.20" chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.12.7", "@babel/parser@^7.18.8", "@babel/parser@^7.22.10", "@babel/parser@^7.22.5": - version "7.22.10" - resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.22.10.tgz" - integrity sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ== - -"@babel/parser@^7.22.15", "@babel/parser@^7.23.3": +"@babel/parser@^7.12.7", "@babel/parser@^7.18.8", "@babel/parser@^7.22.10", "@babel/parser@^7.22.15", "@babel/parser@^7.23.3": version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.3.tgz#0ce0be31a4ca4f1884b5786057cadcb6c3be58f9" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.23.3.tgz" integrity sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw== "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.5": @@ -486,7 +443,15 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/plugin-transform-optional-chaining" "^7.22.5" -"@babel/plugin-proposal-object-rest-spread@7.12.1": +"@babel/plugin-proposal-class-properties@^7.12.1": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz" + integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-proposal-object-rest-spread@^7.12.1", "@babel/plugin-proposal-object-rest-spread@7.12.1": version "7.12.1" resolved "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz" integrity sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA== @@ -563,13 +528,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@7.12.1": - version "7.12.1" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz" - integrity sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-jsx@^7.22.5": version "7.22.5" resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz" @@ -577,6 +535,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" +"@babel/plugin-syntax-jsx@7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz" + integrity sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-logical-assignment-operators@^7.10.4": version "7.10.4" resolved "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" @@ -598,7 +563,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-object-rest-spread@7.8.3", "@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": +"@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3", "@babel/plugin-syntax-object-rest-spread@7.8.3": version "7.8.3" resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== @@ -1098,7 +1063,15 @@ "@babel/helper-create-regexp-features-plugin" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/preset-env@^7.18.6", "@babel/preset-env@^7.19.4": +"@babel/polyfill@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.12.1.tgz" + integrity sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g== + dependencies: + core-js "^2.6.5" + regenerator-runtime "^0.13.4" + +"@babel/preset-env@^7.12.1", "@babel/preset-env@^7.18.6", "@babel/preset-env@^7.19.4": version "7.22.10" resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.10.tgz" integrity sha512-riHpLb1drNkpLlocmSyEg4oYJIQFeXAK/d7rI6mbD0XsvoTOOweXDmQPG/ErxsEhWk3rl3Q/3F6RFQlVFS8m0A== @@ -1193,7 +1166,7 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/preset-react@^7.18.6": +"@babel/preset-react@^7.12.5", "@babel/preset-react@^7.18.6": version "7.22.5" resolved "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.22.5.tgz" integrity sha512-M+Is3WikOpEJHgR385HbuCITPTaPRaNkibTEa9oiofmJvIsrceb4yp9RL9Kb+TE8LznmeyZqpP+Lopwcx59xPQ== @@ -1216,6 +1189,17 @@ "@babel/plugin-transform-modules-commonjs" "^7.22.5" "@babel/plugin-transform-typescript" "^7.22.5" +"@babel/register@^7.12.1": + version "7.22.15" + resolved "https://registry.npmjs.org/@babel/register/-/register-7.22.15.tgz" + integrity sha512-V3Q3EqoQdn65RCgTLwauZaTfd1ShhwPmbBv+1dkZV/HpCGMKVyn6oFcRlI7RaKqiDQjX2Qd3AuoEguBgdjIKlg== + dependencies: + clone-deep "^4.0.1" + find-cache-dir "^2.0.0" + make-dir "^2.1.0" + pirates "^4.0.5" + source-map-support "^0.5.16" + "@babel/regjsgen@^0.8.0": version "0.8.0" resolved "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz" @@ -1236,27 +1220,18 @@ dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.12.7", "@babel/template@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz" - integrity sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw== - dependencies: - "@babel/code-frame" "^7.22.5" - "@babel/parser" "^7.22.5" - "@babel/types" "^7.22.5" - -"@babel/template@^7.22.15": +"@babel/template@^7.12.7", "@babel/template@^7.22.15", "@babel/template@^7.22.5": version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz" integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== dependencies: "@babel/code-frame" "^7.22.13" "@babel/parser" "^7.22.15" "@babel/types" "^7.22.15" -"@babel/traverse@^7.12.9", "@babel/traverse@^7.18.8", "@babel/traverse@^7.22.10": +"@babel/traverse@^7.12.5", "@babel/traverse@^7.12.9", "@babel/traverse@^7.18.8", "@babel/traverse@^7.22.10": version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.3.tgz#26ee5f252e725aa7aca3474aa5b324eaf7908b5b" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.3.tgz" integrity sha512-+K0yF1/9yR0oHdE0StHuEj3uTPzwwbrLGfNOndVJVV2TqA5+j3oljJUb4nmB954FLGjNem976+B+eDuLIjesiQ== dependencies: "@babel/code-frame" "^7.22.13" @@ -1270,18 +1245,9 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.12.7", "@babel/types@^7.20.0", "@babel/types@^7.22.10", "@babel/types@^7.22.5", "@babel/types@^7.4.4": - version "7.22.10" - resolved "https://registry.npmjs.org/@babel/types/-/types-7.22.10.tgz" - integrity sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg== - dependencies: - "@babel/helper-string-parser" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.5" - to-fast-properties "^2.0.0" - -"@babel/types@^7.22.15", "@babel/types@^7.23.0", "@babel/types@^7.23.3": +"@babel/types@^7.12.6", "@babel/types@^7.12.7", "@babel/types@^7.20.0", "@babel/types@^7.22.10", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.3", "@babel/types@^7.4.4": version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.3.tgz#d5ea892c07f2ec371ac704420f4dcdb07b5f9598" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.23.3.tgz" integrity sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw== dependencies: "@babel/helper-string-parser" "^7.22.5" @@ -1313,7 +1279,7 @@ "@docsearch/css" "3.5.1" algoliasearch "^4.0.0" -"@docusaurus/core@2.4.1": +"@docusaurus/core@^2.0.0-alpha.60 || ^2.0.0", "@docusaurus/core@2.4.1": version "2.4.1" resolved "https://registry.npmjs.org/@docusaurus/core/-/core-2.4.1.tgz" integrity sha512-SNsY7PshK3Ri7vtsLXVeAJGS50nJN3RgF836zkyUfAD01Fq+sAk5EwWgLw+nnm5KVNGDu7PRR2kRGDsWvqpo0g== @@ -1536,9 +1502,9 @@ "@docusaurus/utils-validation" "2.4.1" tslib "^2.4.0" -"@docusaurus/plugin-google-gtag@2.4.1", "@docusaurus/plugin-google-gtag@^2.4.1": +"@docusaurus/plugin-google-gtag@^2.4.1", "@docusaurus/plugin-google-gtag@2.4.1": version "2.4.1" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.4.1.tgz#6a3eb91022714735e625c7ca70ef5188fa7bd0dc" + resolved "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.4.1.tgz" integrity sha512-mKIefK+2kGTQBYvloNEKtDmnRD7bxHLsBcxgnbt4oZwzi2nxCGjPX6+9SQO2KCN5HZbNrYmGo5GJfMgoRvy6uA== dependencies: "@docusaurus/core" "2.4.1" @@ -1607,7 +1573,7 @@ "@docusaurus/theme-search-algolia" "2.4.1" "@docusaurus/types" "2.4.1" -"@docusaurus/react-loadable@5.5.2", "react-loadable@npm:@docusaurus/react-loadable@5.5.2": +"@docusaurus/react-loadable@5.5.2": version "5.5.2" resolved "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz" integrity sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ== @@ -1705,7 +1671,7 @@ fs-extra "^10.1.0" tslib "^2.4.0" -"@docusaurus/types@2.4.1": +"@docusaurus/types@*", "@docusaurus/types@2.4.1": version "2.4.1" resolved "https://registry.npmjs.org/@docusaurus/types/-/types-2.4.1.tgz" integrity sha512-0R+cbhpMkhbRXX138UOc/2XZFF8hiZa6ooZAEEJFp5scytzCw4tC1gChMFXrpa3d2tYE6AX8IrOEpSonLmfQuQ== @@ -1875,6 +1841,14 @@ resolved "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz" integrity sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA== +"@mrmlnc/readdir-enhanced@^2.2.1": + version "2.2.1" + resolved "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz" + integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g== + dependencies: + call-me-maybe "^1.0.1" + glob-to-regexp "^0.3.0" + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" @@ -1883,7 +1857,12 @@ "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": +"@nodelib/fs.stat@^1.1.2": + version "1.1.3" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz" + integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== + +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": version "2.0.5" resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== @@ -1928,6 +1907,11 @@ resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz" integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== +"@sindresorhus/is@^0.7.0": + version "0.7.0" + resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz" + integrity sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow== + "@slorber/static-site-generator-webpack-plugin@^4.0.7": version "4.0.7" resolved "https://registry.npmjs.org/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.7.tgz" @@ -1991,7 +1975,7 @@ "@svgr/babel-plugin-transform-react-native-svg" "^6.5.1" "@svgr/babel-plugin-transform-svg-component" "^6.5.1" -"@svgr/core@^6.5.1": +"@svgr/core@*", "@svgr/core@^6.0.0", "@svgr/core@^6.5.1": version "6.5.1" resolved "https://registry.npmjs.org/@svgr/core/-/core-6.5.1.tgz" integrity sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw== @@ -2070,6 +2054,13 @@ dependencies: "@types/node" "*" +"@types/cheerio@^0.22.8": + version "0.22.35" + resolved "https://registry.npmjs.org/@types/cheerio/-/cheerio-0.22.35.tgz" + integrity sha512-yD57BchKRvTV+JD53UZ6PD8KWY5g5rvvMLRnZR3EQBCZXiDT/HR+pKpMzFGlWNhFrXlo7VPZXtKvIEwZkAWOIA== + dependencies: + "@types/node" "*" + "@types/connect-history-api-fallback@^1.3.5": version "1.5.0" resolved "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz" @@ -2216,6 +2207,11 @@ resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz" integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== +"@types/q@^1.5.1": + version "1.5.8" + resolved "https://registry.npmjs.org/@types/q/-/q-1.5.8.tgz" + integrity sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw== + "@types/qs@*": version "6.9.7" resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz" @@ -2252,7 +2248,7 @@ "@types/history" "^4.7.11" "@types/react" "*" -"@types/react@*": +"@types/react@*", "@types/react@>= 16.8.0 < 19.0.0": version "18.2.20" resolved "https://registry.npmjs.org/@types/react/-/react-18.2.20.tgz" integrity sha512-WKNtmsLWJM/3D5mG4U84cysVY31ivmyw85dE84fOCk5Hx78wezB/XEjVPWl2JTZ5FkEeaTJf+VgUAUn3PE7Isw== @@ -2333,7 +2329,7 @@ dependencies: "@types/yargs-parser" "*" -"@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5": +"@webassemblyjs/ast@^1.11.5", "@webassemblyjs/ast@1.11.6": version "1.11.6" resolved "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz" integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q== @@ -2434,7 +2430,7 @@ "@webassemblyjs/wasm-gen" "1.11.6" "@webassemblyjs/wasm-parser" "1.11.6" -"@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5": +"@webassemblyjs/wasm-parser@^1.11.5", "@webassemblyjs/wasm-parser@1.11.6": version "1.11.6" resolved "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz" integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ== @@ -2487,7 +2483,7 @@ acorn-walk@^8.0.0: resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== -acorn@^8.0.4, acorn@^8.7.1, acorn@^8.8.2: +acorn@^8, acorn@^8.0.4, acorn@^8.7.1, acorn@^8.8.2: version "8.10.0" resolved "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz" integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== @@ -2497,6 +2493,11 @@ address@^1.0.1, address@^1.1.2: resolved "https://registry.npmjs.org/address/-/address-1.2.2.tgz" integrity sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA== +address@1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/address/-/address-1.1.2.tgz" + integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA== + aggregate-error@^3.0.0: version "3.1.0" resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" @@ -2505,6 +2506,21 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" +airbnb-prop-types@^2.16.0: + version "2.16.0" + resolved "https://registry.npmjs.org/airbnb-prop-types/-/airbnb-prop-types-2.16.0.tgz" + integrity sha512-7WHOFolP/6cS96PhKNrslCLMYAI8yB1Pp6u6XmxozQOiZbsI5ycglZr5cHhBFfuRcQQjzCMith5ZPZdYiJCxUg== + dependencies: + array.prototype.find "^2.1.1" + function.prototype.name "^1.1.2" + is-regex "^1.1.0" + object-is "^1.1.2" + object.assign "^4.1.0" + object.entries "^1.1.2" + prop-types "^15.7.2" + prop-types-exact "^1.2.0" + react-is "^16.13.1" + ajv-formats@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz" @@ -2524,7 +2540,7 @@ ajv-keywords@^5.1.0: dependencies: fast-deep-equal "^3.1.3" -ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: +ajv@^6.12.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5, ajv@^6.9.1: version "6.12.6" resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -2534,7 +2550,17 @@ ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.0, ajv@^8.9.0: +ajv@^8.0.0: + version "8.12.0" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ajv@^8.8.2, ajv@^8.9.0: version "8.12.0" resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== @@ -2551,7 +2577,7 @@ algoliasearch-helper@^3.10.0: dependencies: "@algolia/events" "^4.0.1" -algoliasearch@^4.0.0, algoliasearch@^4.13.1: +algoliasearch@^4.0.0, algoliasearch@^4.13.1, "algoliasearch@>= 3.1 < 6", "algoliasearch@>= 4.9.1 < 6": version "4.19.1" resolved "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.19.1.tgz" integrity sha512-IJF5b93b2MgAzcE/tuzW0yOPnuUyRgGAtaPv5UUywXM8kzqfdwZTO4sPJBzoGz1eOy6H9uEchsJsBFTELZSu+g== @@ -2571,6 +2597,11 @@ algoliasearch@^4.0.0, algoliasearch@^4.13.1: "@algolia/requester-node-http" "4.19.1" "@algolia/transporter" "4.19.1" +alphanum-sort@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz" + integrity sha512-0FcBfdcmaumGPQ0qPn7Q5qTgz/ooXgIyp1rf8ik5bGX8mpE2YHjC0P/eyQvxu1GURYQgq9ozf2mteQ5ZD9YiyQ== + ansi-align@^3.0.0, ansi-align@^3.0.1: version "3.0.1" resolved "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz" @@ -2583,7 +2614,19 @@ ansi-html-community@^0.0.8: resolved "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz" integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== -ansi-regex@^5.0.1: +ansi-red@^0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz" + integrity sha512-ewaIr5y+9CUTGFwZfpECUbFlGcC0GCw1oqR9RI6h1gQCd9Aj2GxSckCnPsVJnmfMZbwFYE+leZGASgkWl06Jow== + dependencies: + ansi-wrap "0.1.0" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" + integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== + +ansi-regex@^5.0.0, ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== @@ -2593,6 +2636,11 @@ ansi-regex@^6.0.1: resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz" + integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== + ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" @@ -2612,6 +2660,11 @@ ansi-styles@^6.1.0: resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== +ansi-wrap@0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz" + integrity sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw== + anymatch@~3.1.2: version "3.1.3" resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" @@ -2625,12 +2678,24 @@ anymatch@~3.1.2: resolved "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== +arch@^2.1.0: + version "2.2.0" + resolved "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz" + integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== + +archive-type@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz" + integrity sha512-zV4Ky0v1F8dBrdYElwTvQhweQ0P7Kwc1aluqJsYtOBP01jXcWCyW2IEfI1YiqsG+Iy7ZR+o5LF1N+PGECBxHWA== + dependencies: + file-type "^4.2.0" + arg@^5.0.0: version "5.0.2" resolved "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz" integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== -argparse@^1.0.7: +argparse@^1.0.10, argparse@^1.0.7: version "1.0.10" resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== @@ -2642,31 +2707,170 @@ argparse@^2.0.1: resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" - integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz" + integrity sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA== + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz" + integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== + +array-buffer-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz" + integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== + dependencies: + call-bind "^1.0.2" + is-array-buffer "^3.0.1" + +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz" + integrity sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw== array-flatten@^2.1.2: version "2.1.2" resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz" integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz" + integrity sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng== + dependencies: + array-uniq "^1.0.1" + array-union@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz" + integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz" + integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== + +array.prototype.filter@^1.0.0: + version "1.0.3" + resolved "https://registry.npmjs.org/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz" + integrity sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-array-method-boxes-properly "^1.0.0" + is-string "^1.0.7" + +array.prototype.find@^2.1.1: + version "2.2.2" + resolved "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.2.2.tgz" + integrity sha512-DRumkfW97iZGOfn+lIXbkVrXL04sfYKX+EfOodo8XboR5sxPDVvOjZTF/rysusa9lmhmSOeD6Vp6RKQP+eP4Tg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +array.prototype.flat@^1.2.3: + version "1.3.2" + resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz" + integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +array.prototype.reduce@^1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.6.tgz" + integrity sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-array-method-boxes-properly "^1.0.0" + is-string "^1.0.7" + +arraybuffer.prototype.slice@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz" + integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== + dependencies: + array-buffer-byte-length "^1.0.0" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + is-array-buffer "^3.0.2" + is-shared-array-buffer "^1.0.2" + +arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz" + integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== + asap@~2.0.3: version "2.0.6" resolved "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz" integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== +asn1@~0.2.3: + version "0.2.6" + resolved "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@^1.0.0, assert-plus@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" + integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz" + integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== + +async@^2.6.4: + version "2.6.4" + resolved "https://registry.npmjs.org/async/-/async-2.6.4.tgz" + integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== + dependencies: + lodash "^4.17.14" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + at-least-node@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + autocomplete.js@^0.37.0: version "0.37.1" resolved "https://registry.npmjs.org/autocomplete.js/-/autocomplete.js-0.37.1.tgz" @@ -2674,6 +2878,20 @@ autocomplete.js@^0.37.0: dependencies: immediate "^3.2.3" +autolinker@^3.11.0: + version "3.16.2" + resolved "https://registry.npmjs.org/autolinker/-/autolinker-3.16.2.tgz" + integrity sha512-JiYl7j2Z19F9NdTmirENSUUIIL/9MytEWtmzhfmsKPCp9E+G35Y0UNCMoM9tFigxT59qSc8Ml2dlZXOCVTYwuA== + dependencies: + tslib "^2.3.0" + +autolinker@~0.28.0: + version "0.28.1" + resolved "https://registry.npmjs.org/autolinker/-/autolinker-0.28.1.tgz" + integrity sha512-zQAFO1Dlsn69eXaO6+7YZc+v84aquQKbwpzCE3L0stj56ERn9hutFxPopViLjo9G+rWwjozRhgS5KJ25Xy19cQ== + dependencies: + gulp-header "^1.7.1" + autoprefixer@^10.4.12, autoprefixer@^10.4.7: version "10.4.14" resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz" @@ -2686,6 +2904,34 @@ autoprefixer@^10.4.12, autoprefixer@^10.4.7: picocolors "^1.0.0" postcss-value-parser "^4.2.0" +autoprefixer@^9.7.5: + version "9.8.8" + resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz" + integrity sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA== + dependencies: + browserslist "^4.12.0" + caniuse-lite "^1.0.30001109" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + picocolors "^0.2.1" + postcss "^7.0.32" + postcss-value-parser "^4.1.0" + +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz" + integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== + +aws4@^1.8.0: + version "1.12.0" + resolved "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz" + integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== + axios@^0.25.0: version "0.25.0" resolved "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz" @@ -2754,6 +3000,11 @@ babel-plugin-polyfill-regenerator@^0.5.2: dependencies: "@babel/helper-define-polyfill-provider" "^0.4.2" +babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz" + integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== + bail@^1.0.0: version "1.0.5" resolved "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz" @@ -2764,6 +3015,19 @@ balanced-match@^1.0.0: resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +base@^0.11.1: + version "0.11.2" + resolved "https://registry.npmjs.org/base/-/base-0.11.2.tgz" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + base16@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz" @@ -2784,16 +3048,92 @@ bcp-47-match@^1.0.0: resolved "https://registry.npmjs.org/bcp-47-match/-/bcp-47-match-1.0.3.tgz" integrity sha512-LggQ4YTdjWQSKELZF5JwchnBa1u0pIQSZf5lSdOHEdbVP55h0qICA/FUp3+W99q0xqxYa1ZQizTUH87gecII5w== +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz" + integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== + dependencies: + tweetnacl "^0.14.3" + +big-integer@^1.6.17: + version "1.6.52" + resolved "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz" + integrity sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg== + big.js@^5.2.2: version "5.2.2" resolved "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== +bin-build@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/bin-build/-/bin-build-3.0.0.tgz" + integrity sha512-jcUOof71/TNAI2uM5uoUaDq2ePcVBQ3R/qhxAz1rX7UfvduAL/RXD3jXzvn8cVcDJdGVkiR1shal3OH0ImpuhA== + dependencies: + decompress "^4.0.0" + download "^6.2.2" + execa "^0.7.0" + p-map-series "^1.0.0" + tempfile "^2.0.0" + +bin-check@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/bin-check/-/bin-check-4.1.0.tgz" + integrity sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA== + dependencies: + execa "^0.7.0" + executable "^4.1.0" + +bin-version-check@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/bin-version-check/-/bin-version-check-4.0.0.tgz" + integrity sha512-sR631OrhC+1f8Cvs8WyVWOA33Y8tgwjETNPyyD/myRBXLkfS/vl74FmH/lFcRl9KY3zwGh7jFhvyk9vV3/3ilQ== + dependencies: + bin-version "^3.0.0" + semver "^5.6.0" + semver-truncate "^1.1.2" + +bin-version@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/bin-version/-/bin-version-3.1.0.tgz" + integrity sha512-Mkfm4iE1VFt4xd4vH+gx+0/71esbfus2LsnCGe8Pi4mndSPyT+NGES/Eg99jx8/lUGWfu3z2yuB/bt5UB+iVbQ== + dependencies: + execa "^1.0.0" + find-versions "^3.0.0" + +bin-wrapper@^4.0.0: + version "4.1.0" + resolved "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-4.1.0.tgz" + integrity sha512-hfRmo7hWIXPkbpi0ZltboCMVrU+0ClXR/JgbCKKjlDjQf6igXa7OwdqNcFWQZPZTgiY7ZpzE3+LjjkLiTN2T7Q== + dependencies: + bin-check "^4.1.0" + bin-version-check "^4.0.0" + download "^7.1.0" + import-lazy "^3.1.0" + os-filter-obj "^2.0.0" + pify "^4.0.1" + binary-extensions@^2.0.0: version "2.2.0" resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== +binary@~0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz" + integrity sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg== + dependencies: + buffers "~0.1.1" + chainsaw "~0.1.0" + +bl@^1.0.0: + version "1.2.3" + resolved "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz" + integrity sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww== + dependencies: + readable-stream "^2.3.5" + safe-buffer "^5.1.1" + bl@^4.0.3: version "4.1.0" resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" @@ -2803,6 +3143,11 @@ bl@^4.0.3: inherits "^2.0.4" readable-stream "^3.4.0" +bluebird@~3.4.1: + version "3.4.7" + resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz" + integrity sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA== + body-parser@1.20.1: version "1.20.1" resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz" @@ -2821,6 +3166,16 @@ body-parser@1.20.1: type-is "~1.6.18" unpipe "1.0.0" +body@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/body/-/body-5.1.0.tgz" + integrity sha512-chUsBxGRtuElD6fmw1gHLpvnKdVLK302peeFa9ZqAEk8TyzZ3fygLyUEDDPTJvL9+Bor0dIwn6ePOsRM2y0zQQ== + dependencies: + continuable-cache "^0.3.1" + error "^7.0.0" + raw-body "~1.1.0" + safe-json-parse "~1.0.1" + bonjour-service@^1.0.11: version "1.1.1" resolved "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz" @@ -2831,7 +3186,7 @@ bonjour-service@^1.0.11: fast-deep-equal "^3.1.3" multicast-dns "^7.2.5" -boolbase@^1.0.0: +boolbase@^1.0.0, boolbase@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== @@ -2872,6 +3227,22 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +braces@^2.3.1: + version "2.3.2" + resolved "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + braces@^3.0.2, braces@~3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" @@ -2879,7 +3250,7 @@ braces@^3.0.2, braces@~3.0.2: dependencies: fill-range "^7.0.1" -browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.18.1, browserslist@^4.21.4, browserslist@^4.21.5, browserslist@^4.21.9: +browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.18.1, browserslist@^4.21.4, browserslist@^4.21.5, browserslist@^4.21.9, "browserslist@>= 4.21.0": version "4.21.10" resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz" integrity sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ== @@ -2889,12 +3260,50 @@ browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.18.1, browserslist@^4 node-releases "^2.0.13" update-browserslist-db "^1.0.11" +browserslist@^4.12.0, browserslist@4.14.2: + version "4.14.2" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.14.2.tgz" + integrity sha512-HI4lPveGKUR0x2StIz+2FXfDk9SfVMrxn6PLh1JeGUwcuoDkdKZebWiyLRJ68iIPDpMI4JLVDf7S7XzslgWOhw== + dependencies: + caniuse-lite "^1.0.30001125" + electron-to-chromium "^1.3.564" + escalade "^3.0.2" + node-releases "^1.1.61" + +buffer-alloc-unsafe@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz" + integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== + +buffer-alloc@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz" + integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== + dependencies: + buffer-alloc-unsafe "^1.1.0" + buffer-fill "^1.0.0" + +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz" + integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== + +buffer-fill@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz" + integrity sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ== + buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -buffer@^5.5.0: +buffer-indexof-polyfill@~1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz" + integrity sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A== + +buffer@^5.2.1, buffer@^5.5.0: version "5.7.1" resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== @@ -2902,6 +3311,16 @@ buffer@^5.5.0: base64-js "^1.3.1" ieee754 "^1.1.13" +buffers@~0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz" + integrity sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ== + +bytes@1: + version "1.0.0" + resolved "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz" + integrity sha512-/x68VkHLeTl3/Ll8IvxdwzhrT+IyKc52e/oyHhA2RwqPqswSnjVbSddfPRwAsJtbilMAPSRWwAlpxdYsSWOTKQ== + bytes@3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz" @@ -2912,6 +3331,34 @@ bytes@3.1.2: resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +cacheable-request@^2.1.1: + version "2.1.4" + resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz" + integrity sha512-vag0O2LKZ/najSoUwDbVlnlCFvhBE/7mGTY2B5FgCBDcRD+oVV1HYTOwM6JZfMg/hIcM6IwnTZ1uQQL5/X3xIQ== + dependencies: + clone-response "1.0.2" + get-stream "3.0.0" + http-cache-semantics "3.8.1" + keyv "3.0.0" + lowercase-keys "1.0.0" + normalize-url "2.0.1" + responselike "1.0.2" + cacheable-request@^6.0.0: version "6.1.0" resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz" @@ -2925,13 +3372,38 @@ cacheable-request@^6.0.0: normalize-url "^4.1.0" responselike "^1.0.2" -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== +call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz" + integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" + function-bind "^1.1.2" + get-intrinsic "^1.2.1" + set-function-length "^1.1.1" + +call-me-maybe@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz" + integrity sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ== + +caller-callsite@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz" + integrity sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ== + dependencies: + callsites "^2.0.0" + +caller-path@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz" + integrity sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A== + dependencies: + caller-callsite "^2.0.0" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz" + integrity sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ== callsites@^3.0.0: version "3.1.0" @@ -2951,6 +3423,19 @@ camelcase-css@2.0.1: resolved "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz" integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== +camelcase-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz" + integrity sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ== + dependencies: + camelcase "^2.0.0" + map-obj "^1.0.0" + +camelcase@^2.0.0: + version "2.1.1" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz" + integrity sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw== + camelcase@^6.2.0: version "6.3.0" resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" @@ -2966,16 +3451,58 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001464, caniuse-lite@^1.0.30001517: +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001125, caniuse-lite@^1.0.30001464, caniuse-lite@^1.0.30001517: version "1.0.30001519" resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001519.tgz" integrity sha512-0QHgqR+Jv4bxHMp8kZ1Kn8CH55OikjKJ6JmKkZYP1F3D7w+lnFXF70nG5eNfsZS89jadi5Ywy5UCSKLAglIRkg== +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz" + integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== + +caw@^2.0.0, caw@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz" + integrity sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA== + dependencies: + get-proxy "^2.0.0" + isurl "^1.0.0-alpha5" + tunnel-agent "^0.6.0" + url-to-options "^1.0.1" + ccount@^1.0.0: version "1.1.0" resolved "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz" integrity sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg== +chainsaw@~0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz" + integrity sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ== + dependencies: + traverse ">=0.3.0 <0.4" + +chalk@^1.0.0: + version "1.1.3" + resolved "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz" + integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.4.1: + version "2.4.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + chalk@^2.4.2: version "2.4.2" resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" @@ -2985,6 +3512,14 @@ chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" @@ -2993,6 +3528,15 @@ chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@2.4.2: + version "2.4.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + character-entities-legacy@^1.0.0: version "1.1.4" resolved "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz" @@ -3020,7 +3564,7 @@ cheerio-select@^2.1.0: domhandler "^5.0.3" domutils "^3.0.1" -cheerio@^1.0.0-rc.12: +cheerio@^1.0.0-rc.12, cheerio@^1.0.0-rc.3: version "1.0.0-rc.12" resolved "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz" integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== @@ -3033,6 +3577,28 @@ cheerio@^1.0.0-rc.12: parse5 "^7.0.0" parse5-htmlparser2-tree-adapter "^7.0.0" +cheerio@0.22.0: + version "0.22.0" + resolved "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz" + integrity sha512-8/MzidM6G/TgRelkzDG13y3Y9LxBjCb+8yOEZ9+wwq5gVF2w2pV0wmHvjfT0RvuxGyR7UEuK36r+yYMbT4uKgA== + dependencies: + css-select "~1.2.0" + dom-serializer "~0.1.0" + entities "~1.1.1" + htmlparser2 "^3.9.1" + lodash.assignin "^4.0.9" + lodash.bind "^4.1.4" + lodash.defaults "^4.0.1" + lodash.filter "^4.4.0" + lodash.flatten "^4.2.0" + lodash.foreach "^4.3.0" + lodash.map "^4.4.0" + lodash.merge "^4.4.0" + lodash.pick "^4.2.1" + lodash.reduce "^4.4.0" + lodash.reject "^4.4.0" + lodash.some "^4.4.0" + chokidar@^3.4.2, chokidar@^3.5.3: version "3.5.3" resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" @@ -3068,6 +3634,21 @@ ci-info@^3.2.0: resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz" integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +classnames@^2.2.6: + version "2.3.2" + resolved "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz" + integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== + clean-css@^5.2.2, clean-css@^5.3.0: version "5.3.2" resolved "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz" @@ -3115,17 +3696,46 @@ clone-response@^1.0.2: dependencies: mimic-response "^1.0.0" +clone-response@1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz" + integrity sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q== + dependencies: + mimic-response "^1.0.0" + clsx@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz" integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== +coa@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz" + integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== + dependencies: + "@types/q" "^1.5.1" + chalk "^2.4.1" + q "^1.1.2" + +coffee-script@^1.12.4: + version "1.12.7" + resolved "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz" + integrity sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw== + collapse-white-space@^1.0.2: version "1.0.6" resolved "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz" integrity sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ== -color-convert@^1.9.0: +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz" + integrity sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw== + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0, color-convert@^1.9.3: version "1.9.3" resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== @@ -3139,17 +3749,17 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - color-name@^1.0.0, color-name@~1.1.4: version "1.1.4" resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -color-string@^1.9.0: +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-string@^1.6.0, color-string@^1.9.0: version "1.9.1" resolved "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz" integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== @@ -3162,6 +3772,14 @@ color-support@^1.1.2: resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== +color@^3.0.0: + version "3.2.1" + resolved "https://registry.npmjs.org/color/-/color-3.2.1.tgz" + integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== + dependencies: + color-convert "^1.9.3" + color-string "^1.6.0" + color@^4.2.3: version "4.2.3" resolved "https://registry.npmjs.org/color/-/color-4.2.3.tgz" @@ -3185,17 +3803,39 @@ combine-promises@^1.1.0: resolved "https://registry.npmjs.org/combine-promises/-/combine-promises-1.1.0.tgz" integrity sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg== +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + comma-separated-tokens@^1.0.0: version "1.0.8" resolved "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz" integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw== +commander@^2.19.0: + version "2.20.3" + resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + commander@^2.20.0: version "2.20.3" resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@^5.1.0: +commander@^2.8.1: + version "2.20.3" + resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^4.0.1: + version "4.1.1" + resolved "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + +commander@^5.0.0, commander@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz" integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== @@ -3215,6 +3855,11 @@ commondir@^1.0.1: resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz" integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== +component-emitter@^1.2.1: + version "1.3.1" + resolved "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz" + integrity sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ== + compressible@~2.0.16: version "2.0.18" resolved "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz" @@ -3240,6 +3885,31 @@ concat-map@0.0.1: resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== +concat-stream@^1.5.2: + version "1.6.2" + resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +concat-with-sourcemaps@*: + version "1.1.0" + resolved "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz" + integrity sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg== + dependencies: + source-map "^0.6.1" + +config-chain@^1.1.11: + version "1.1.13" + resolved "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz" + integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + configstore@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz" @@ -3267,12 +3937,17 @@ console-control-strings@^1.0.0: resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== +console-stream@^0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/console-stream/-/console-stream-0.1.1.tgz" + integrity sha512-QC/8l9e6ofi6nqZ5PawlDgzmMw3OxIXtvolBzap/F4UDBJlDaZRSNbL/lb41C29FcbSJncBFlJFj2WJoNyZRfQ== + "consolidated-events@^1.1.0 || ^2.0.0": version "2.0.2" resolved "https://registry.npmjs.org/consolidated-events/-/consolidated-events-2.0.2.tgz" integrity sha512-2/uRVMdRypf5z/TW/ncD/66l75P5hH2vM/GR8Jf8HLc2xnfJtmina6F6du8+v4Z2vTrMo7jC+W1tmEEuuELgkQ== -content-disposition@0.5.2: +content-disposition@^0.5.2, content-disposition@0.5.2: version "0.5.2" resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz" integrity sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA== @@ -3289,6 +3964,11 @@ content-type@~1.0.4: resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== +continuable-cache@^0.3.1: + version "0.3.1" + resolved "https://registry.npmjs.org/continuable-cache/-/continuable-cache-0.3.1.tgz" + integrity sha512-TF30kpKhTH8AGCG3dut0rdd/19B7Z+qCnrMoBLpyQu/2drZdNrrpcjPEoJeSVsQM+8KmWG5O56oPDjSSUsuTyA== + convert-source-map@^1.7.0: version "1.9.0" resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz" @@ -3304,6 +3984,11 @@ cookie@0.5.0: resolved "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz" integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz" + integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== + copy-text-to-clipboard@^3.0.1: version "3.2.0" resolved "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz" @@ -3333,6 +4018,11 @@ core-js-pure@^3.30.2: resolved "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.32.0.tgz" integrity sha512-qsev1H+dTNYpDUEURRuOXMvpdtAnNEvQWS/FMJ2Vb5AY8ZP4rAPQldkE27joykZPJTe0+IVgHZYh1P5Xu1/i1g== +core-js@^2.6.5: + version "2.6.12" + resolved "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz" + integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== + core-js@^3.23.3: version "3.32.0" resolved "https://registry.npmjs.org/core-js/-/core-js-3.32.0.tgz" @@ -3343,6 +4033,21 @@ core-util-is@~1.0.0: resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== +core-util-is@1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" + integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== + +cosmiconfig@^5.0.0: + version "5.2.1" + resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz" + integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== + dependencies: + import-fresh "^2.0.0" + is-directory "^0.3.1" + js-yaml "^3.13.1" + parse-json "^4.0.0" + cosmiconfig@^6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz" @@ -3382,7 +4087,27 @@ cross-fetch@^3.1.5: dependencies: node-fetch "^2.6.12" -cross-spawn@^7.0.3: +cross-spawn@^5.0.1: + version "5.1.0" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz" + integrity sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A== + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^6.0.0: + version "6.0.5" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^7.0.3, cross-spawn@7.0.3: version "7.0.3" resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -3391,11 +4116,33 @@ cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" +crowdin-cli@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/crowdin-cli/-/crowdin-cli-0.3.0.tgz" + integrity sha512-s1vSRqWalCqd+vW7nF4oZo1a2pMpEgwIiwVlPRD0HmGY3HjJwQKXqZ26NpX5qCDVN8UdEsScy+2jle0PPQBmAg== + dependencies: + request "^2.53.0" + yamljs "^0.2.1" + yargs "^2.3.0" + crypto-random-string@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz" integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== +css-color-names@^0.0.4, css-color-names@0.0.4: + version "0.0.4" + resolved "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz" + integrity sha512-zj5D7X1U2h2zsXOAM8EyUREBnnts6H+Jm+d1M2DbiQQcUtnqgQsMrdo8JW9R80YFUmIdBZeMu5wvYM7hcgWP/Q== + +css-declaration-sorter@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz" + integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA== + dependencies: + postcss "^7.0.1" + timsort "^0.3.0" + css-declaration-sorter@^6.3.1: version "6.4.1" resolved "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz" @@ -3427,6 +4174,21 @@ css-minimizer-webpack-plugin@^4.0.0: serialize-javascript "^6.0.0" source-map "^0.6.1" +css-select-base-adapter@^0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz" + integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== + +css-select@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz" + integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== + dependencies: + boolbase "^1.0.0" + css-what "^3.2.1" + domutils "^1.7.0" + nth-check "^1.0.2" + css-select@^4.1.3: version "4.3.0" resolved "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz" @@ -3449,6 +4211,16 @@ css-select@^5.1.0: domutils "^3.0.1" nth-check "^2.0.1" +css-select@~1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz" + integrity sha512-dUQOBoqdR7QwV90WysXPLXG5LO7nhYBgiWVfxF80DKPF8zx1t/pUd2FYy73emg3zrjtM6dzmYgbHKfV2rxiHQA== + dependencies: + boolbase "~1.0.0" + css-what "2.1" + domutils "1.5.1" + nth-check "~1.0.1" + css-selector-parser@^1.0.0: version "1.4.1" resolved "https://registry.npmjs.org/css-selector-parser/-/css-selector-parser-1.4.1.tgz" @@ -3462,11 +4234,29 @@ css-tree@^1.1.2, css-tree@^1.1.3: mdn-data "2.0.14" source-map "^0.6.1" +css-tree@1.0.0-alpha.37: + version "1.0.0-alpha.37" + resolved "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz" + integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== + dependencies: + mdn-data "2.0.4" + source-map "^0.6.1" + +css-what@^3.2.1: + version "3.4.2" + resolved "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz" + integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== + css-what@^6.0.1, css-what@^6.1.0: version "6.1.0" resolved "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz" integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== +css-what@2.1: + version "2.1.3" + resolved "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz" + integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== + cssesc@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" @@ -3484,6 +4274,42 @@ cssnano-preset-advanced@^5.3.8: postcss-reduce-idents "^5.2.0" postcss-zindex "^5.1.0" +cssnano-preset-default@^4.0.8: + version "4.0.8" + resolved "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz" + integrity sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ== + dependencies: + css-declaration-sorter "^4.0.1" + cssnano-util-raw-cache "^4.0.1" + postcss "^7.0.0" + postcss-calc "^7.0.1" + postcss-colormin "^4.0.3" + postcss-convert-values "^4.0.1" + postcss-discard-comments "^4.0.2" + postcss-discard-duplicates "^4.0.2" + postcss-discard-empty "^4.0.1" + postcss-discard-overridden "^4.0.1" + postcss-merge-longhand "^4.0.11" + postcss-merge-rules "^4.0.3" + postcss-minify-font-values "^4.0.2" + postcss-minify-gradients "^4.0.2" + postcss-minify-params "^4.0.2" + postcss-minify-selectors "^4.0.2" + postcss-normalize-charset "^4.0.1" + postcss-normalize-display-values "^4.0.2" + postcss-normalize-positions "^4.0.2" + postcss-normalize-repeat-style "^4.0.2" + postcss-normalize-string "^4.0.2" + postcss-normalize-timing-functions "^4.0.2" + postcss-normalize-unicode "^4.0.1" + postcss-normalize-url "^4.0.1" + postcss-normalize-whitespace "^4.0.2" + postcss-ordered-values "^4.1.2" + postcss-reduce-initial "^4.0.3" + postcss-reduce-transforms "^4.0.2" + postcss-svgo "^4.0.3" + postcss-unique-selectors "^4.0.1" + cssnano-preset-default@^5.2.14: version "5.2.14" resolved "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz" @@ -3519,11 +4345,43 @@ cssnano-preset-default@^5.2.14: postcss-svgo "^5.1.0" postcss-unique-selectors "^5.1.1" +cssnano-util-get-arguments@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz" + integrity sha512-6RIcwmV3/cBMG8Aj5gucQRsJb4vv4I4rn6YjPbVWd5+Pn/fuG+YseGvXGk00XLkoZkaj31QOD7vMUpNPC4FIuw== + +cssnano-util-get-match@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz" + integrity sha512-JPMZ1TSMRUPVIqEalIBNoBtAYbi8okvcFns4O0YIhcdGebeYZK7dMyHJiQ6GqNBA9kE0Hym4Aqym5rPdsV/4Cw== + +cssnano-util-raw-cache@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz" + integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA== + dependencies: + postcss "^7.0.0" + +cssnano-util-same-parent@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz" + integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== + cssnano-utils@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz" integrity sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA== +cssnano@^4.1.10: + version "4.1.11" + resolved "https://registry.npmjs.org/cssnano/-/cssnano-4.1.11.tgz" + integrity sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g== + dependencies: + cosmiconfig "^5.0.0" + cssnano-preset-default "^4.0.8" + is-resolvable "^1.0.0" + postcss "^7.0.0" + cssnano@^5.1.12, cssnano@^5.1.8: version "5.1.15" resolved "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz" @@ -3533,7 +4391,7 @@ cssnano@^5.1.12, cssnano@^5.1.8: lilconfig "^2.0.3" yaml "^1.10.2" -csso@^4.2.0: +csso@^4.0.2, csso@^4.2.0: version "4.2.0" resolved "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz" integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== @@ -3545,21 +4403,87 @@ csstype@^3.0.2: resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz" integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== -debug@2.6.9, debug@^2.6.0: +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz" + integrity sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng== + dependencies: + array-find-index "^1.0.1" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz" + integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== + dependencies: + assert-plus "^1.0.0" + +debug@^2.2.0: version "2.6.9" resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@4, debug@^4.1.0, debug@^4.1.1: +debug@^2.3.3: + version "2.6.9" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^2.6.0: + version "2.6.9" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^3.1.0: + version "3.2.7" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^4.1.0, debug@^4.1.1, debug@4: version "4.3.4" resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" -decompress-response@^3.3.0: +debug@2.6.9: + version "2.6.9" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@4.3.1: + version "4.3.1" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + dependencies: + ms "2.1.2" + +decamelize@^1.1.2: + version "1.2.0" + resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" + integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== + +decode-uri-component@^0.2.0: + version "0.2.2" + resolved "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz" + integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== + +decompress-response@^3.2.0, decompress-response@^3.3.0: version "3.3.0" resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz" integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== @@ -3573,11 +4497,69 @@ decompress-response@^6.0.0: dependencies: mimic-response "^3.1.0" +decompress-tar@^4.0.0, decompress-tar@^4.1.0, decompress-tar@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz" + integrity sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ== + dependencies: + file-type "^5.2.0" + is-stream "^1.1.0" + tar-stream "^1.5.2" + +decompress-tarbz2@^4.0.0: + version "4.1.1" + resolved "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz" + integrity sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A== + dependencies: + decompress-tar "^4.1.0" + file-type "^6.1.0" + is-stream "^1.1.0" + seek-bzip "^1.0.5" + unbzip2-stream "^1.0.9" + +decompress-targz@^4.0.0: + version "4.1.1" + resolved "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz" + integrity sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w== + dependencies: + decompress-tar "^4.1.1" + file-type "^5.2.0" + is-stream "^1.1.0" + +decompress-unzip@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz" + integrity sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw== + dependencies: + file-type "^3.8.0" + get-stream "^2.2.0" + pify "^2.3.0" + yauzl "^2.4.2" + +decompress@^4.0.0, decompress@^4.2.0: + version "4.2.1" + resolved "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz" + integrity sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ== + dependencies: + decompress-tar "^4.0.0" + decompress-tarbz2 "^4.0.0" + decompress-targz "^4.0.0" + decompress-unzip "^4.0.1" + graceful-fs "^4.1.10" + make-dir "^1.0.0" + pify "^2.3.0" + strip-dirs "^2.0.0" + deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + deepmerge@^4.2.2: version "4.3.1" resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz" @@ -3595,12 +4577,21 @@ defer-to-connect@^1.0.1: resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz" integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== +define-data-property@^1.0.1, define-data-property@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz" + integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== + dependencies: + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + define-lazy-prop@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz" integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== -define-properties@^1.1.4: +define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz" integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== @@ -3608,6 +4599,28 @@ define-properties@^1.1.4: has-property-descriptors "^1.0.0" object-keys "^1.1.1" +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz" + integrity sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA== + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz" + integrity sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA== + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + del@^6.1.1: version "6.1.1" resolved "https://registry.npmjs.org/del/-/del-6.1.1.tgz" @@ -3622,16 +4635,21 @@ del@^6.1.1: rimraf "^3.0.2" slash "^3.0.0" -depd@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== depd@~1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== +depd@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + destroy@1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" @@ -3654,7 +4672,7 @@ detect-node@^2.0.4: resolved "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz" integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== -detect-port-alt@^1.1.6: +detect-port-alt@^1.1.6, detect-port-alt@1.1.6: version "1.1.6" resolved "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz" integrity sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q== @@ -3670,6 +4688,11 @@ detect-port@^1.3.0: address "^1.0.1" debug "4" +diacritics-map@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/diacritics-map/-/diacritics-map-0.1.0.tgz" + integrity sha512-3omnDTYrGigU0i4cJjvaKwD52B8aoqyX/NEIkukFFkogBemsIbhSa1O414fpTp5nuszJG6lvQ5vBvDVNCbSsaQ== + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" @@ -3677,11 +4700,24 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" +dir-glob@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz" + integrity sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag== + dependencies: + arrify "^1.0.1" + path-type "^3.0.0" + direction@^1.0.0: version "1.0.4" resolved "https://registry.npmjs.org/direction/-/direction-1.0.4.tgz" integrity sha512-GYqKi1aH7PJXxdhTeZBFrg8vUBeKXi+cNprXsC1kpJcbcVnV9wBsrOu1cQEdG0WeQwlfHiy3XvnKfIrJ2R0NzQ== +discontinuous-range@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz" + integrity sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ== + dns-equal@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz" @@ -3714,6 +4750,60 @@ docusaurus-lunr-search@^2.4.1: unified "^9.0.0" unist-util-is "^4.0.2" +docusaurus@^1.14.7: + version "1.14.7" + resolved "https://registry.npmjs.org/docusaurus/-/docusaurus-1.14.7.tgz" + integrity sha512-UWqar4ZX0lEcpLc5Tg+MwZ2jhF/1n1toCQRSeoxDON/D+E9ToLr+vTRFVMP/Tk84NXSVjZFRlrjWwM2pXzvLsQ== + dependencies: + "@babel/core" "^7.12.3" + "@babel/plugin-proposal-class-properties" "^7.12.1" + "@babel/plugin-proposal-object-rest-spread" "^7.12.1" + "@babel/polyfill" "^7.12.1" + "@babel/preset-env" "^7.12.1" + "@babel/preset-react" "^7.12.5" + "@babel/register" "^7.12.1" + "@babel/traverse" "^7.12.5" + "@babel/types" "^7.12.6" + autoprefixer "^9.7.5" + babylon "^6.18.0" + chalk "^3.0.0" + classnames "^2.2.6" + commander "^4.0.1" + crowdin-cli "^0.3.0" + cssnano "^4.1.10" + enzyme "^3.10.0" + enzyme-adapter-react-16 "^1.15.1" + escape-string-regexp "^2.0.0" + express "^4.17.1" + feed "^4.2.1" + fs-extra "^9.0.1" + gaze "^1.1.3" + github-slugger "^1.3.0" + glob "^7.1.6" + highlight.js "^9.16.2" + imagemin "^6.0.0" + imagemin-gifsicle "^6.0.1" + imagemin-jpegtran "^6.0.0" + imagemin-optipng "^6.0.0" + imagemin-svgo "^7.0.0" + lodash "^4.17.20" + markdown-toc "^1.2.0" + mkdirp "^0.5.1" + portfinder "^1.0.28" + postcss "^7.0.23" + prismjs "^1.22.0" + react "^16.8.4" + react-dev-utils "^11.0.1" + react-dom "^16.8.4" + remarkable "^2.0.0" + request "^2.88.0" + shelljs "^0.8.4" + sitemap "^3.2.2" + tcp-port-used "^1.0.1" + tiny-lr "^1.1.1" + tree-node-cli "^1.2.5" + truncate-html "^1.0.3" + dom-converter@^0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz" @@ -3739,11 +4829,39 @@ dom-serializer@^2.0.0: domhandler "^5.0.2" entities "^4.2.0" +dom-serializer@~0.1.0: + version "0.1.1" + resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz" + integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== + dependencies: + domelementtype "^1.3.0" + entities "^1.1.1" + +dom-serializer@0: + version "0.2.2" + resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz" + integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== + dependencies: + domelementtype "^2.0.1" + entities "^2.0.0" + +domelementtype@^1.3.0, domelementtype@^1.3.1, domelementtype@1: + version "1.3.1" + resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== + domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0: version "2.3.0" resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== +domhandler@^2.3.0: + version "2.4.2" + resolved "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz" + integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== + dependencies: + domelementtype "1" + domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: version "4.3.1" resolved "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz" @@ -3758,6 +4876,22 @@ domhandler@^5.0.2, domhandler@^5.0.3: dependencies: domelementtype "^2.3.0" +domutils@^1.5.1, domutils@1.5.1: + version "1.5.1" + resolved "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz" + integrity sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw== + dependencies: + dom-serializer "0" + domelementtype "1" + +domutils@^1.7.0: + version "1.7.0" + resolved "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz" + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== + dependencies: + dom-serializer "0" + domelementtype "1" + domutils@^2.5.2, domutils@^2.8.0: version "2.8.0" resolved "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz" @@ -3791,27 +4925,77 @@ dot-prop@^5.2.0: dependencies: is-obj "^2.0.0" +download@^6.2.2: + version "6.2.5" + resolved "https://registry.npmjs.org/download/-/download-6.2.5.tgz" + integrity sha512-DpO9K1sXAST8Cpzb7kmEhogJxymyVUd5qz/vCOSyvwtp2Klj2XcDt5YUuasgxka44SxF0q5RriKIwJmQHG2AuA== + dependencies: + caw "^2.0.0" + content-disposition "^0.5.2" + decompress "^4.0.0" + ext-name "^5.0.0" + file-type "5.2.0" + filenamify "^2.0.0" + get-stream "^3.0.0" + got "^7.0.0" + make-dir "^1.0.0" + p-event "^1.0.0" + pify "^3.0.0" + +download@^7.1.0: + version "7.1.0" + resolved "https://registry.npmjs.org/download/-/download-7.1.0.tgz" + integrity sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ== + dependencies: + archive-type "^4.0.0" + caw "^2.0.1" + content-disposition "^0.5.2" + decompress "^4.2.0" + ext-name "^5.0.0" + file-type "^8.1.0" + filenamify "^2.0.0" + get-stream "^3.0.0" + got "^8.3.1" + make-dir "^1.2.0" + p-event "^2.1.0" + pify "^3.0.0" + +duplexer@^0.1.1, duplexer@^0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + +duplexer2@~0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz" + integrity sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA== + dependencies: + readable-stream "^2.0.2" + duplexer3@^0.1.4: version "0.1.5" resolved "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz" integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA== -duplexer@^0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz" - integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== - eastasianwidth@^0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz" + integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + ee-first@1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.4.477: +electron-to-chromium@^1.3.564, electron-to-chromium@^1.4.477: version "1.4.490" resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.490.tgz" integrity sha512-6s7NVJz+sATdYnIwhdshx/N/9O6rvMxmhVoDSDFdj6iA45gHR8EQje70+RYsF4GeB+k0IeNSBnP7yG9ZXJFr7A== @@ -3841,7 +5025,7 @@ encodeurl@~1.0.2: resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== -end-of-stream@^1.1.0, end-of-stream@^1.4.1: +end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== @@ -3856,6 +5040,11 @@ enhanced-resolve@^5.15.0: graceful-fs "^4.2.4" tapable "^2.2.0" +entities@^1.1.1, entities@~1.1.1: + version "1.1.2" + resolved "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz" + integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== + entities@^2.0.0: version "2.2.0" resolved "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz" @@ -3866,19 +5055,165 @@ entities@^4.2.0, entities@^4.4.0: resolved "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz" integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== -error-ex@^1.3.1: +enzyme-adapter-react-16@^1.15.1: + version "1.15.7" + resolved "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.7.tgz" + integrity sha512-LtjKgvlTc/H7adyQcj+aq0P0H07LDL480WQl1gU512IUyaDo/sbOaNDdZsJXYW2XaoPqrLLE9KbZS+X2z6BASw== + dependencies: + enzyme-adapter-utils "^1.14.1" + enzyme-shallow-equal "^1.0.5" + has "^1.0.3" + object.assign "^4.1.4" + object.values "^1.1.5" + prop-types "^15.8.1" + react-is "^16.13.1" + react-test-renderer "^16.0.0-0" + semver "^5.7.0" + +enzyme-adapter-utils@^1.14.1: + version "1.14.1" + resolved "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.14.1.tgz" + integrity sha512-JZgMPF1QOI7IzBj24EZoDpaeG/p8Os7WeBZWTJydpsH7JRStc7jYbHE4CmNQaLqazaGFyLM8ALWA3IIZvxW3PQ== + dependencies: + airbnb-prop-types "^2.16.0" + function.prototype.name "^1.1.5" + has "^1.0.3" + object.assign "^4.1.4" + object.fromentries "^2.0.5" + prop-types "^15.8.1" + semver "^5.7.1" + +enzyme-shallow-equal@^1.0.1, enzyme-shallow-equal@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.5.tgz" + integrity sha512-i6cwm7hN630JXenxxJFBKzgLC3hMTafFQXflvzHgPmDhOBhxUWDe8AeRv1qp2/uWJ2Y8z5yLWMzmAfkTOiOCZg== + dependencies: + has "^1.0.3" + object-is "^1.1.5" + +enzyme@^3.0.0, enzyme@^3.10.0: + version "3.11.0" + resolved "https://registry.npmjs.org/enzyme/-/enzyme-3.11.0.tgz" + integrity sha512-Dw8/Gs4vRjxY6/6i9wU0V+utmQO9kvh9XLnz3LIudviOnVYDEe2ec+0k+NQoMamn1VrjKgCUOWj5jG/5M5M0Qw== + dependencies: + array.prototype.flat "^1.2.3" + cheerio "^1.0.0-rc.3" + enzyme-shallow-equal "^1.0.1" + function.prototype.name "^1.1.2" + has "^1.0.3" + html-element-map "^1.2.0" + is-boolean-object "^1.0.1" + is-callable "^1.1.5" + is-number-object "^1.0.4" + is-regex "^1.0.5" + is-string "^1.0.5" + is-subset "^0.1.1" + lodash.escape "^4.0.1" + lodash.isequal "^4.5.0" + object-inspect "^1.7.0" + object-is "^1.0.2" + object.assign "^4.1.0" + object.entries "^1.1.1" + object.values "^1.1.1" + raf "^3.4.1" + rst-selector-parser "^2.2.3" + string.prototype.trim "^1.2.1" + +error-ex@^1.2.0, error-ex@^1.3.1: version "1.3.2" resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" +error@^7.0.0: + version "7.2.1" + resolved "https://registry.npmjs.org/error/-/error-7.2.1.tgz" + integrity sha512-fo9HBvWnx3NGUKMvMwB/CBCMMrfEJgbDTVDEkPygA3Bdd3lM1OyCd+rbQ8BwnpF6GdVeOLDNmyL4N5Bg80ZvdA== + dependencies: + string-template "~0.2.1" + +es-abstract@^1.17.2, es-abstract@^1.22.1: + version "1.22.3" + resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz" + integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== + dependencies: + array-buffer-byte-length "^1.0.0" + arraybuffer.prototype.slice "^1.0.2" + available-typed-arrays "^1.0.5" + call-bind "^1.0.5" + es-set-tostringtag "^2.0.1" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.2" + get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + internal-slot "^1.0.5" + is-array-buffer "^3.0.2" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-typed-array "^1.1.12" + is-weakref "^1.0.2" + object-inspect "^1.13.1" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.5.1" + safe-array-concat "^1.0.1" + safe-regex-test "^1.0.0" + string.prototype.trim "^1.2.8" + string.prototype.trimend "^1.0.7" + string.prototype.trimstart "^1.0.7" + typed-array-buffer "^1.0.0" + typed-array-byte-length "^1.0.0" + typed-array-byte-offset "^1.0.0" + typed-array-length "^1.0.4" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.13" + +es-array-method-boxes-properly@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz" + integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== + es-module-lexer@^1.2.1: version "1.3.0" resolved "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz" integrity sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA== -escalade@^3.1.1: +es-set-tostringtag@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz" + integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== + dependencies: + get-intrinsic "^1.2.2" + has-tostringtag "^1.0.0" + hasown "^2.0.0" + +es-shim-unscopables@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz" + integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== + dependencies: + hasown "^2.0.0" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +escalade@^3.0.2, escalade@^3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== @@ -3893,11 +5228,21 @@ escape-html@^1.0.3, escape-html@~1.0.3: resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== +escape-string-regexp@^1.0.2: + version "1.0.5" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== +escape-string-regexp@^2.0.0, escape-string-regexp@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" @@ -3966,6 +5311,43 @@ events@^3.2.0: resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== +exec-buffer@^3.0.0: + version "3.2.0" + resolved "https://registry.npmjs.org/exec-buffer/-/exec-buffer-3.2.0.tgz" + integrity sha512-wsiD+2Tp6BWHoVv3B+5Dcx6E7u5zky+hUwOHjuH2hKSLR3dvRmX8fk8UD8uqQixHs4Wk6eDmiegVrMPjKj7wpA== + dependencies: + execa "^0.7.0" + p-finally "^1.0.0" + pify "^3.0.0" + rimraf "^2.5.4" + tempfile "^2.0.0" + +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz" + integrity sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw== + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + execa@^5.0.0: version "5.1.1" resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" @@ -3981,12 +5363,39 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" +executable@^4.1.0: + version "4.1.1" + resolved "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz" + integrity sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg== + dependencies: + pify "^2.2.0" + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz" + integrity sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA== + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +expand-range@^1.8.1: + version "1.8.2" + resolved "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz" + integrity sha512-AFASGfIlnIbkKPQwX1yHaDjFvh/1gyKJODme52V6IORh69uEYgZp0o9C+qsIGNVEiuuhQU0CSSl++Rlegg1qvA== + dependencies: + fill-range "^2.1.0" + expand-template@^2.0.3: version "2.0.3" resolved "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz" integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== -express@^4.17.3: +express@^4.17.1, express@^4.17.3: version "4.18.2" resolved "https://registry.npmjs.org/express/-/express-4.18.2.tgz" integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== @@ -4023,6 +5432,21 @@ express@^4.17.3: utils-merge "1.0.1" vary "~1.1.2" +ext-list@^2.0.0: + version "2.2.2" + resolved "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz" + integrity sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA== + dependencies: + mime-db "^1.28.0" + +ext-name@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz" + integrity sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ== + dependencies: + ext-list "^2.0.0" + sort-keys-length "^1.0.0" + extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz" @@ -4030,11 +5454,46 @@ extend-shallow@^2.0.1: dependencies: is-extendable "^0.1.0" -extend@^3.0.0: +extend-shallow@^3.0.0: + version "3.0.2" + resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz" + integrity sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q== + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz" + integrity sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q== + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@^3.0.0, extend@~3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extsprintf@^1.2.0, extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" + integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== + fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" @@ -4045,7 +5504,26 @@ fast-fifo@^1.1.0, fast-fifo@^1.2.0: resolved "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz" integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== -fast-glob@^3.2.11, fast-glob@^3.2.9, fast-glob@^3.3.0: +fast-folder-size@1.6.1: + version "1.6.1" + resolved "https://registry.npmjs.org/fast-folder-size/-/fast-folder-size-1.6.1.tgz" + integrity sha512-F3tRpfkAzb7TT2JNKaJUglyuRjRa+jelQD94s9OSqkfEeytLmupCqQiD+H2KoIXGtp4pB5m4zNmv5m2Ktcr+LA== + dependencies: + unzipper "^0.10.11" + +fast-glob@^2.0.2: + version "2.2.7" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz" + integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw== + dependencies: + "@mrmlnc/readdir-enhanced" "^2.2.1" + "@nodelib/fs.stat" "^1.1.2" + glob-parent "^3.1.0" + is-glob "^4.0.0" + merge2 "^1.2.3" + micromatch "^3.1.10" + +fast-glob@^3.1.1, fast-glob@^3.2.11, fast-glob@^3.2.9, fast-glob@^3.3.0: version "3.3.1" resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz" integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== @@ -4068,6 +5546,13 @@ fast-url-parser@1.1.3: dependencies: punycode "^1.3.2" +fast-xml-parser@^4.1.3: + version "4.3.2" + resolved "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.3.2.tgz" + integrity sha512-rmrXUXwbJedoXkStenj1kkljNF7ugn5ZjR9FJcwmCfcCbtOMDghPajbc+Tck6vE6F5XsDmx+Pr2le9fw8+pXBg== + dependencies: + strnum "^1.0.5" + fastq@^1.6.0: version "1.15.0" resolved "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz" @@ -4082,6 +5567,13 @@ faye-websocket@^0.11.3: dependencies: websocket-driver ">=0.5.1" +faye-websocket@~0.10.0: + version "0.10.0" + resolved "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz" + integrity sha512-Xhj93RXbMSq8urNCUq4p9l0P6hnySJ/7YNRhYNug0bLOuii7pKO7xQFb5mx9xZXWCar88pLPb805PvUkwrLZpQ== + dependencies: + websocket-driver ">=0.5.1" + fbemitter@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz" @@ -4107,14 +5599,29 @@ fbjs@^3.0.0, fbjs@^3.0.1: setimmediate "^1.0.5" ua-parser-js "^1.0.35" -feed@^4.2.2: +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz" + integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== + dependencies: + pend "~1.2.0" + +feed@^4.2.1, feed@^4.2.2: version "4.2.2" resolved "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz" integrity sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ== dependencies: xml-js "^1.6.11" -file-loader@^6.2.0: +figures@^1.3.5: + version "1.7.0" + resolved "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz" + integrity sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ== + dependencies: + escape-string-regexp "^1.0.5" + object-assign "^4.1.0" + +file-loader@*, file-loader@^6.2.0: version "6.2.0" resolved "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz" integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== @@ -4122,11 +5629,86 @@ file-loader@^6.2.0: loader-utils "^2.0.0" schema-utils "^3.0.0" +file-type@^10.4.0, file-type@^10.7.0: + version "10.11.0" + resolved "https://registry.npmjs.org/file-type/-/file-type-10.11.0.tgz" + integrity sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw== + +file-type@^3.8.0: + version "3.9.0" + resolved "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz" + integrity sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA== + +file-type@^4.2.0: + version "4.4.0" + resolved "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz" + integrity sha512-f2UbFQEk7LXgWpi5ntcO86OeA/cC80fuDDDaX/fZ2ZGel+AF7leRQqBBW1eJNiiQkrZlAoM6P+VYP5P6bOlDEQ== + +file-type@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz" + integrity sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ== + +file-type@^6.1.0: + version "6.2.0" + resolved "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz" + integrity sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg== + +file-type@^8.1.0: + version "8.1.0" + resolved "https://registry.npmjs.org/file-type/-/file-type-8.1.0.tgz" + integrity sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ== + +file-type@5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz" + integrity sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ== + +filename-reserved-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz" + integrity sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ== + +filenamify@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz" + integrity sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA== + dependencies: + filename-reserved-regex "^2.0.0" + strip-outer "^1.0.0" + trim-repeated "^1.0.0" + filesize@^8.0.6: version "8.0.7" resolved "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz" integrity sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ== +filesize@6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/filesize/-/filesize-6.1.0.tgz" + integrity sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg== + +fill-range@^2.1.0: + version "2.2.4" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz" + integrity sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q== + dependencies: + is-number "^2.1.0" + isobject "^2.0.0" + randomatic "^3.0.0" + repeat-element "^1.1.2" + repeat-string "^1.5.2" + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz" + integrity sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ== + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + fill-range@^7.0.1: version "7.0.1" resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" @@ -4147,6 +5729,15 @@ finalhandler@1.2.0: statuses "2.0.1" unpipe "~1.0.0" +find-cache-dir@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== + dependencies: + commondir "^1.0.1" + make-dir "^2.0.0" + pkg-dir "^3.0.0" + find-cache-dir@^3.3.1: version "3.3.2" resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz" @@ -4156,6 +5747,14 @@ find-cache-dir@^3.3.1: make-dir "^3.0.2" pkg-dir "^4.1.0" +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz" + integrity sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA== + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + find-up@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz" @@ -4163,7 +5762,7 @@ find-up@^3.0.0: dependencies: locate-path "^3.0.0" -find-up@^4.0.0: +find-up@^4.0.0, find-up@4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== @@ -4179,6 +5778,13 @@ find-up@^5.0.0: locate-path "^6.0.0" path-exists "^4.0.0" +find-versions@^3.0.0: + version "3.2.0" + resolved "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz" + integrity sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww== + dependencies: + semver-regex "^2.0.0" + flux@^4.0.1: version "4.0.4" resolved "https://registry.npmjs.org/flux/-/flux-4.0.4.tgz" @@ -4192,6 +5798,23 @@ follow-redirects@^1.0.0, follow-redirects@^1.14.7: resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz" integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz" + integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ== + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz" + integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== + fork-ts-checker-webpack-plugin@^6.5.0: version "6.5.3" resolved "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz" @@ -4211,6 +5834,28 @@ fork-ts-checker-webpack-plugin@^6.5.0: semver "^7.3.2" tapable "^1.0.0" +fork-ts-checker-webpack-plugin@4.1.6: + version "4.1.6" + resolved "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz" + integrity sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw== + dependencies: + "@babel/code-frame" "^7.5.5" + chalk "^2.4.1" + micromatch "^3.1.10" + minimatch "^3.0.4" + semver "^5.6.0" + tapable "^1.0.0" + worker-rpc "^0.1.0" + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + forwarded@0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" @@ -4221,11 +5866,26 @@ fraction.js@^4.2.0: resolved "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz" integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz" + integrity sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA== + dependencies: + map-cache "^0.2.2" + fresh@0.5.2: version "0.5.2" resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== +from2@^2.1.1: + version "2.3.0" + resolved "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz" + integrity sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g== + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + fs-constants@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" @@ -4250,6 +5910,16 @@ fs-extra@^9.0.0: jsonfile "^6.0.1" universalify "^2.0.0" +fs-extra@^9.0.1: + version "9.1.0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs-monkey@^1.0.4: version "1.0.4" resolved "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.4.tgz" @@ -4265,10 +5935,35 @@ fsevents@~2.3.2: resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +fstream@^1.0.12: + version "1.0.12" + resolved "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz" + integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== + dependencies: + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" + +function-bind@^1.1.1, function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +function.prototype.name@^1.1.2, function.prototype.name@^1.1.5, function.prototype.name@^1.1.6: + version "1.1.6" + resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz" + integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + functions-have-names "^1.2.3" + +functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== gauge@^3.0.0: version "3.0.2" @@ -4285,27 +5980,59 @@ gauge@^3.0.0: strip-ansi "^6.0.1" wide-align "^1.1.2" +gaze@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz" + integrity sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g== + dependencies: + globule "^1.0.0" + gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: - version "1.2.1" - resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz" - integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: + version "1.2.2" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz" + integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== dependencies: - function-bind "^1.1.1" - has "^1.0.3" + function-bind "^1.1.2" has-proto "^1.0.1" has-symbols "^1.0.3" + hasown "^2.0.0" get-own-enumerable-property-symbols@^3.0.0: version "3.0.2" resolved "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz" integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== -get-stream@^4.1.0: +get-proxy@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz" + integrity sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw== + dependencies: + npm-conf "^1.1.0" + +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz" + integrity sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw== + +get-stream@^2.2.0: + version "2.3.1" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz" + integrity sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA== + dependencies: + object-assign "^4.0.1" + pinkie-promise "^2.0.0" + +get-stream@^3.0.0, get-stream@3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz" + integrity sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ== + +get-stream@^4.0.0, get-stream@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz" integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== @@ -4324,16 +6051,54 @@ get-stream@^6.0.0: resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz" + integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz" + integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== + dependencies: + assert-plus "^1.0.0" + +gifsicle@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/gifsicle/-/gifsicle-4.0.1.tgz" + integrity sha512-A/kiCLfDdV+ERV/UB+2O41mifd+RxH8jlRG8DMxZO84Bma/Fw0htqZ+hY2iaalLRNyUu7tYZQslqUBJxBggxbg== + dependencies: + bin-build "^3.0.0" + bin-wrapper "^4.0.0" + execa "^1.0.0" + logalot "^2.0.0" + github-from-package@0.0.0: version "0.0.0" resolved "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz" integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== -github-slugger@^1.4.0: +github-slugger@^1.3.0, github-slugger@^1.4.0: version "1.5.0" resolved "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz" integrity sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw== +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz" + integrity sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA== + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" @@ -4348,12 +6113,17 @@ glob-parent@^6.0.1: dependencies: is-glob "^4.0.3" +glob-to-regexp@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz" + integrity sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig== + glob-to-regexp@^0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@^7.0.0, glob@^7.1.3, glob@^7.1.6: +glob@^7.0.0, glob@^7.0.5, glob@^7.1.2, glob@^7.1.3, glob@^7.1.6: version "7.2.3" resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -4365,6 +6135,18 @@ glob@^7.0.0, glob@^7.1.3, glob@^7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" +glob@~7.1.1: + version "7.1.7" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + global-dirs@^3.0.0: version "3.0.1" resolved "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz" @@ -4372,7 +6154,7 @@ global-dirs@^3.0.0: dependencies: ini "2.0.0" -global-modules@^2.0.0: +global-modules@^2.0.0, global-modules@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz" integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== @@ -4393,6 +6175,13 @@ globals@^11.1.0: resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== +globalthis@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" + globby@^11.0.1, globby@^11.0.4, globby@^11.1.0: version "11.1.0" resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" @@ -4416,6 +6205,90 @@ globby@^13.1.1: merge2 "^1.4.1" slash "^4.0.0" +globby@^8.0.1: + version "8.0.2" + resolved "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz" + integrity sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w== + dependencies: + array-union "^1.0.1" + dir-glob "2.0.0" + fast-glob "^2.0.2" + glob "^7.1.2" + ignore "^3.3.5" + pify "^3.0.0" + slash "^1.0.0" + +globby@11.0.1: + version "11.0.1" + resolved "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz" + integrity sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.1.1" + ignore "^5.1.4" + merge2 "^1.3.0" + slash "^3.0.0" + +globule@^1.0.0: + version "1.3.4" + resolved "https://registry.npmjs.org/globule/-/globule-1.3.4.tgz" + integrity sha512-OPTIfhMBh7JbBYDpa5b+Q5ptmMWKwcNcFSR/0c6t8V4f3ZAVBEsKNY37QdVqmLRYSMhOUGYrY0QhSoEpzGr/Eg== + dependencies: + glob "~7.1.1" + lodash "^4.17.21" + minimatch "~3.0.2" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +got@^7.0.0: + version "7.1.0" + resolved "https://registry.npmjs.org/got/-/got-7.1.0.tgz" + integrity sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw== + dependencies: + decompress-response "^3.2.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + is-plain-obj "^1.1.0" + is-retry-allowed "^1.0.0" + is-stream "^1.0.0" + isurl "^1.0.0-alpha5" + lowercase-keys "^1.0.0" + p-cancelable "^0.3.0" + p-timeout "^1.1.1" + safe-buffer "^5.0.1" + timed-out "^4.0.0" + url-parse-lax "^1.0.0" + url-to-options "^1.0.1" + +got@^8.3.1: + version "8.3.2" + resolved "https://registry.npmjs.org/got/-/got-8.3.2.tgz" + integrity sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw== + dependencies: + "@sindresorhus/is" "^0.7.0" + cacheable-request "^2.1.1" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + into-stream "^3.1.0" + is-retry-allowed "^1.1.0" + isurl "^1.0.0-alpha5" + lowercase-keys "^1.0.0" + mimic-response "^1.0.0" + p-cancelable "^0.4.0" + p-timeout "^2.0.1" + pify "^3.0.0" + safe-buffer "^5.1.1" + timed-out "^4.0.1" + url-parse-lax "^3.0.0" + url-to-options "^1.0.1" + got@^9.6.0: version "9.6.0" resolved "https://registry.npmjs.org/got/-/got-9.6.0.tgz" @@ -4433,11 +6306,22 @@ got@^9.6.0: to-readable-stream "^1.0.0" url-parse-lax "^3.0.0" -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: +graceful-fs@^4.1.10, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: version "4.2.11" resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== +gray-matter@^2.1.0: + version "2.1.1" + resolved "https://registry.npmjs.org/gray-matter/-/gray-matter-2.1.1.tgz" + integrity sha512-vbmvP1Fe/fxuT2QuLVcqb2BfK7upGhhbLIt9/owWEvPYrZZEkelLcq2HqzxosV+PQ67dUFLaAeNpH7C4hhICAA== + dependencies: + ansi-red "^0.1.1" + coffee-script "^1.12.4" + extend-shallow "^2.0.1" + js-yaml "^3.8.1" + toml "^2.3.2" + gray-matter@^4.0.3: version "4.0.3" resolved "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz" @@ -4448,6 +6332,15 @@ gray-matter@^4.0.3: section-matter "^1.0.0" strip-bom-string "^1.0.0" +gulp-header@^1.7.1: + version "1.8.12" + resolved "https://registry.npmjs.org/gulp-header/-/gulp-header-1.8.12.tgz" + integrity sha512-lh9HLdb53sC7XIZOYzTXM4lFuXElv3EVkSDhsd7DoJBj7hm+Ni7D3qYbb+Rr8DuM8nRanBvkVO9d7askreXGnQ== + dependencies: + concat-with-sourcemaps "*" + lodash.template "^4.4.0" + through2 "^2.0.0" + gzip-size@^6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz" @@ -4455,11 +6348,44 @@ gzip-size@^6.0.0: dependencies: duplexer "^0.1.2" +gzip-size@5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz" + integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA== + dependencies: + duplexer "^0.1.1" + pify "^4.0.1" + handle-thing@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz" integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz" + integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz" + integrity sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg== + dependencies: + ansi-regex "^2.0.0" + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" @@ -4482,28 +6408,85 @@ has-proto@^1.0.1: resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz" integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== -has-symbols@^1.0.3: +has-symbol-support-x@^1.4.1: + version "1.4.2" + resolved "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz" + integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw== + +has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== +has-to-string-tag-x@^1.2.0: + version "1.4.1" + resolved "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz" + integrity sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw== + dependencies: + has-symbol-support-x "^1.4.1" + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + has-unicode@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz" + integrity sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q== + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz" + integrity sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw== + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz" + integrity sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ== + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz" + integrity sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ== + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + has-yarn@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz" integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== -has@^1.0.3: +has@^1.0.0, has@^1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: function-bind "^1.1.1" +hasown@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz" + integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== + dependencies: + function-bind "^1.1.2" + hast-to-hyperscript@^9.0.0: version "9.0.1" resolved "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz" @@ -4626,6 +6609,16 @@ he@^1.2.0: resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== +hex-color-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz" + integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== + +highlight.js@^9.16.2: + version "9.18.5" + resolved "https://registry.npmjs.org/highlight.js/-/highlight.js-9.18.5.tgz" + integrity sha512-a5bFyofd/BHCX52/8i8uJkjr9DYwXIPnM/plwI6W7ezItLGqzt7X2G2nXuYSfsIJdkwwj/g9DG1LkcGJI/dDoA== + history@^4.9.0: version "4.10.1" resolved "https://registry.npmjs.org/history/-/history-4.10.1.tgz" @@ -4653,6 +6646,11 @@ hoist-non-react-statics@^3.1.0: dependencies: react-is "^16.7.0" +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + hpack.js@^2.1.6: version "2.1.6" resolved "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz" @@ -4663,6 +6661,24 @@ hpack.js@^2.1.6: readable-stream "^2.0.1" wbuf "^1.1.0" +hsl-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz" + integrity sha512-M5ezZw4LzXbBKMruP+BNANf0k+19hDQMgpzBIYnya//Al+fjNct9Wf3b1WedLqdEs2hKBvxq/jh+DsHJLj0F9A== + +hsla-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz" + integrity sha512-7Wn5GMLuHBjZCb2bTmnDOycho0p/7UVaAeqXZGbHrBCl6Yd/xDhQJAXe6Ga9AXJH2I5zY1dEdYw2u1UptnSBJA== + +html-element-map@^1.2.0: + version "1.3.1" + resolved "https://registry.npmjs.org/html-element-map/-/html-element-map-1.3.1.tgz" + integrity sha512-6XMlxrAFX4UEEGxctfFnmrFaaZFNf9i5fNuV5wZ3WWQ4FVaNP1aX1LkX9j2mfEx1NpjeE/rL3nmgEn23GdFmrg== + dependencies: + array.prototype.filter "^1.0.0" + call-bind "^1.0.2" + html-entities@^2.3.2: version "2.4.0" resolved "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz" @@ -4702,6 +6718,18 @@ html-webpack-plugin@^5.5.0: pretty-error "^4.0.0" tapable "^2.0.0" +htmlparser2@^3.9.1: + version "3.10.1" + resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz" + integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== + dependencies: + domelementtype "^1.3.1" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^3.1.1" + htmlparser2@^6.1.0: version "6.1.0" resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz" @@ -4727,11 +6755,26 @@ http-cache-semantics@^4.0.0: resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz" integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== +http-cache-semantics@3.8.1: + version "3.8.1" + resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz" + integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== + http-deceiver@^1.2.7: version "1.2.7" resolved "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz" integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz" + integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + http-errors@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" @@ -4743,16 +6786,6 @@ http-errors@2.0.0: statuses "2.0.1" toidentifier "1.0.1" -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz" - integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - http-parser-js@>=0.5.1: version "0.5.8" resolved "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz" @@ -4778,6 +6811,15 @@ http-proxy@^1.18.1: follow-redirects "^1.0.0" requires-port "^1.0.0" +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz" + integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + human-signals@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" @@ -4800,7 +6842,12 @@ ieee754@^1.1.13: resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -ignore@^5.2.0, ignore@^5.2.4: +ignore@^3.3.5: + version "3.3.10" + resolved "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz" + integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== + +ignore@^5.1.4, ignore@^5.2.0, ignore@^5.2.4: version "5.2.4" resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz" integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== @@ -4812,6 +6859,53 @@ image-size@^1.0.1: dependencies: queue "6.0.2" +imagemin-gifsicle@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/imagemin-gifsicle/-/imagemin-gifsicle-6.0.1.tgz" + integrity sha512-kuu47c6iKDQ6R9J10xCwL0lgs0+sMz3LRHqRcJ2CRBWdcNmo3T5hUaM8hSZfksptZXJLGKk8heSAvwtSdB1Fng== + dependencies: + exec-buffer "^3.0.0" + gifsicle "^4.0.0" + is-gif "^3.0.0" + +imagemin-jpegtran@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/imagemin-jpegtran/-/imagemin-jpegtran-6.0.0.tgz" + integrity sha512-Ih+NgThzqYfEWv9t58EItncaaXIHR0u9RuhKa8CtVBlMBvY0dCIxgQJQCfwImA4AV1PMfmUKlkyIHJjb7V4z1g== + dependencies: + exec-buffer "^3.0.0" + is-jpg "^2.0.0" + jpegtran-bin "^4.0.0" + +imagemin-optipng@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/imagemin-optipng/-/imagemin-optipng-6.0.0.tgz" + integrity sha512-FoD2sMXvmoNm/zKPOWdhKpWdFdF9qiJmKC17MxZJPH42VMAp17/QENI/lIuP7LCUnLVAloO3AUoTSNzfhpyd8A== + dependencies: + exec-buffer "^3.0.0" + is-png "^1.0.0" + optipng-bin "^5.0.0" + +imagemin-svgo@^7.0.0: + version "7.1.0" + resolved "https://registry.npmjs.org/imagemin-svgo/-/imagemin-svgo-7.1.0.tgz" + integrity sha512-0JlIZNWP0Luasn1HT82uB9nU9aa+vUj6kpT+MjPW11LbprXC+iC4HDwn1r4Q2/91qj4iy9tRZNsFySMlEpLdpg== + dependencies: + is-svg "^4.2.1" + svgo "^1.3.2" + +imagemin@^6.0.0: + version "6.1.0" + resolved "https://registry.npmjs.org/imagemin/-/imagemin-6.1.0.tgz" + integrity sha512-8ryJBL1CN5uSHpiBMX0rJw79C9F9aJqMnjGnrd/1CafegpNuA81RBAAru/jQQEOWlOJJlpRnlcVFF6wq+Ist0A== + dependencies: + file-type "^10.7.0" + globby "^8.0.1" + make-dir "^1.0.0" + p-pipe "^1.1.0" + pify "^4.0.1" + replace-ext "^1.0.0" + immediate@^3.2.3: version "3.3.0" resolved "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz" @@ -4822,6 +6916,19 @@ immer@^9.0.7: resolved "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz" integrity sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA== +immer@8.0.1: + version "8.0.1" + resolved "https://registry.npmjs.org/immer/-/immer-8.0.1.tgz" + integrity sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA== + +import-fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz" + integrity sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg== + dependencies: + caller-path "^2.0.0" + resolve-from "^3.0.0" + import-fresh@^3.1.0, import-fresh@^3.2.1, import-fresh@^3.3.0: version "3.3.0" resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" @@ -4835,16 +6942,33 @@ import-lazy@^2.1.0: resolved "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz" integrity sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A== +import-lazy@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/import-lazy/-/import-lazy-3.1.0.tgz" + integrity sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ== + imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== +indent-string@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz" + integrity sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg== + dependencies: + repeating "^2.0.0" + indent-string@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz" + integrity sha512-bup+4tap3Hympa+JBJUG7XuOsdNQ6fxt0MHyXMKuLBKn0OqsTfvUxkUrroEX1+B2VsSHvCjiIcZVxRtYa4nllA== + infima@0.2.0-alpha.43: version "0.2.0-alpha.43" resolved "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.43.tgz" @@ -4858,7 +6982,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: +inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.3, inherits@2, inherits@2.0.4: version "2.0.4" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -4868,26 +6992,43 @@ inherits@2.0.3: resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== +ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: + version "1.3.8" + resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + ini@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz" integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== -ini@^1.3.5, ini@~1.3.0: - version "1.3.8" - resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - inline-style-parser@0.1.1: version "0.1.1" resolved "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz" integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== +internal-slot@^1.0.5: + version "1.0.6" + resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz" + integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== + dependencies: + get-intrinsic "^1.2.2" + hasown "^2.0.0" + side-channel "^1.0.4" + interpret@^1.0.0: version "1.4.0" resolved "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz" integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== +into-stream@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz" + integrity sha512-TcdjPibTksa1NQximqep2r17ISRiNE9fwlfbg3F8ANdvP5/yrFTew86VcO//jk4QTaMlbjypPBq76HN2zaKfZQ== + dependencies: + from2 "^2.1.1" + p-is-promise "^1.1.0" + invariant@^2.2.4: version "2.2.4" resolved "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz" @@ -4895,17 +7036,34 @@ invariant@^2.2.4: dependencies: loose-envify "^1.0.0" -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== +ip-regex@^4.1.0: + version "4.3.0" + resolved "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz" + integrity sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q== ipaddr.js@^2.0.1: version "2.1.0" resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz" integrity sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ== -is-alphabetical@1.0.4, is-alphabetical@^1.0.0: +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-absolute-url@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz" + integrity sha512-vOx7VprsKyllwjSkLV79NIhpyLfr3jAp7VaTCMXOJHu4m0Ew1CZ2fcjASwmV1jI3BWuWHB013M48eyeldk9gYg== + +is-accessor-descriptor@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz" + integrity sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA== + dependencies: + hasown "^2.0.0" + +is-alphabetical@^1.0.0, is-alphabetical@1.0.4: version "1.0.4" resolved "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz" integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== @@ -4918,6 +7076,15 @@ is-alphanumerical@^1.0.0: is-alphabetical "^1.0.0" is-decimal "^1.0.0" +is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz" + integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.0" + is-typed-array "^1.1.10" + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" @@ -4928,6 +7095,13 @@ is-arrayish@^0.3.1: resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz" integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" @@ -4935,11 +7109,29 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" +is-boolean-object@^1.0.1, is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + is-buffer@^2.0.0: version "2.0.5" resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz" integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.1.5, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + is-ci@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz" @@ -4947,6 +7139,18 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" +is-color-stop@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz" + integrity sha512-H1U8Vz0cfXNujrJzEcvvwMDW9Ra+biSYA3ThdQvAnMLJkEHQXn6bWzLkxHtVYJ+Sdbx0b6finn3jZiaVe7MAHA== + dependencies: + css-color-names "^0.0.4" + hex-color-regex "^1.1.0" + hsl-regex "^1.0.0" + hsla-regex "^1.0.0" + rgb-regex "^1.0.1" + rgba-regex "^1.0.0" + is-core-module@^2.13.0: version "2.13.0" resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz" @@ -4954,32 +7158,93 @@ is-core-module@^2.13.0: dependencies: has "^1.0.3" +is-data-descriptor@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz" + integrity sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw== + dependencies: + hasown "^2.0.0" + +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + is-decimal@^1.0.0: version "1.0.4" resolved "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz" integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw== +is-descriptor@^0.1.0: + version "0.1.7" + resolved "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz" + integrity sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg== + dependencies: + is-accessor-descriptor "^1.0.1" + is-data-descriptor "^1.0.1" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz" + integrity sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw== + dependencies: + is-accessor-descriptor "^1.0.1" + is-data-descriptor "^1.0.1" + +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz" + integrity sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw== + is-docker@^2.0.0, is-docker@^2.1.1: version "2.2.1" resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== -is-extendable@^0.1.0: +is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz" integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== -is-extglob@^2.1.1: +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.0, is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== +is-finite@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz" + integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== + is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: +is-gif@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-gif/-/is-gif-3.0.0.tgz" + integrity sha512-IqJ/jlbw5WJSNfwQ/lHEDXF8rxhRgF6ythk2oiEvhpG29F704eX9NO6TvPfMiq9DrbwgcEDnETYNcZDPewQoVw== + dependencies: + file-type "^10.4.0" + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz" + integrity sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw== + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== @@ -4999,11 +7264,52 @@ is-installed-globally@^0.4.0: global-dirs "^3.0.0" is-path-inside "^3.0.2" +is-jpg@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/is-jpg/-/is-jpg-2.0.0.tgz" + integrity sha512-ODlO0ruzhkzD3sdynIainVP5eoOFNN85rxA1+cwwnPe4dKyX0r5+hxNO5XpCrxlHcmb9vkOit9mhRD2JVuimHg== + +is-natural-number@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz" + integrity sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ== + +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + is-npm@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz" integrity sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA== +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz" + integrity sha512-QUzH43Gfb9+5yckcrSA0VBDwEtDUchrk4F6tfJZQuNzDJbEDB9cZNzSfXGQ1jqmdDY/kl41lUOWM9syA8z8jlg== + dependencies: + kind-of "^3.0.2" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz" + integrity sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg== + dependencies: + kind-of "^3.0.2" + +is-number@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz" + integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ== + is-number@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" @@ -5019,6 +7325,11 @@ is-obj@^2.0.0: resolved "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz" integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== +is-object@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz" + integrity sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA== + is-path-cwd@^2.2.0: version "2.2.0" resolved "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz" @@ -5029,6 +7340,16 @@ is-path-inside@^3.0.2: resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== +is-plain-obj@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz" + integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== + +is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz" + integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== + is-plain-obj@^2.0.0: version "2.1.0" resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz" @@ -5039,44 +7360,139 @@ is-plain-obj@^3.0.0: resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz" integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== -is-plain-object@^2.0.4: +is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== dependencies: isobject "^3.0.1" +is-png@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/is-png/-/is-png-1.1.0.tgz" + integrity sha512-23Rmps8UEx3Bzqr0JqAtQo0tYP6sDfIfMt1rL9rzlla/zbteftI9LSJoqsIoGgL06sJboDGdVns4RTakAW/WTw== + +is-regex@^1.0.5, is-regex@^1.1.0, is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + is-regexp@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz" integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA== -is-root@^2.1.0: +is-resolvable@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz" + integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== + +is-retry-allowed@^1.0.0, is-retry-allowed@^1.1.0: + version "1.2.0" + resolved "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz" + integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== + +is-root@^2.1.0, is-root@2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz" integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" + +is-stream@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz" + integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz" + integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== + is-stream@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-typedarray@^1.0.0: +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-subset@^0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz" + integrity sha512-6Ybun0IkarhmEqxXCNw/C0bna6Zb/TkfUX9UbwJtK6ObwAVCxmAP308WWTHviM/zAqXk05cdhYsUsZeGQh99iw== + +is-svg@^4.2.1: + version "4.4.0" + resolved "https://registry.npmjs.org/is-svg/-/is-svg-4.4.0.tgz" + integrity sha512-v+AgVwiK5DsGtT9ng+m4mClp6zDAmwrW8nZi6Gg15qzvBnRWWdfWA1TGaXyCDnWq5g5asofIgMVl3PjKxvk1ug== + dependencies: + fast-xml-parser "^4.1.3" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.9: + version "1.1.12" + resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz" + integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== + dependencies: + which-typed-array "^1.1.11" + +is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== +is-url@^1.2.4: + version "1.2.4" + resolved "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz" + integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww== + +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz" + integrity sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q== + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + is-whitespace-character@^1.0.0: version "1.0.4" resolved "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz" integrity sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w== +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + is-word-character@^1.0.0: version "1.0.4" resolved "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz" integrity sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA== -is-wsl@^2.2.0: +is-wsl@^2.1.1, is-wsl@^2.2.0: version "2.2.0" resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz" integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== @@ -5088,12 +7504,31 @@ is-yarn-global@^0.3.0: resolved "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz" integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== +is2@^2.0.6: + version "2.0.9" + resolved "https://registry.npmjs.org/is2/-/is2-2.0.9.tgz" + integrity sha512-rZkHeBn9Zzq52sd9IUIV3a5mfwBY+o2HePMh0wkGBM4z4qjvy2GwVxQ6nNXSfw6MmVP6gf1QIlWjiOavhM3x5g== + dependencies: + deep-is "^0.1.3" + ip-regex "^4.1.0" + is-url "^1.2.4" + +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + isarray@0.0.1: version "0.0.1" resolved "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== -isarray@~1.0.0: +isarray@1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== @@ -5103,11 +7538,31 @@ isexe@^2.0.0: resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== -isobject@^3.0.1: +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz" + integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA== + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: version "3.0.1" resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz" + integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== + +isurl@^1.0.0-alpha5: + version "1.0.0" + resolved "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz" + integrity sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w== + dependencies: + has-to-string-tag-x "^1.2.0" + is-object "^1.0.1" + jest-util@^29.6.2: version "29.6.2" resolved "https://registry.npmjs.org/jest-util/-/jest-util-29.6.2.tgz" @@ -5155,6 +7610,15 @@ joi@^17.6.0: "@sideway/formula" "^3.0.1" "@sideway/pinpoint" "^2.0.0" +jpegtran-bin@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/jpegtran-bin/-/jpegtran-bin-4.0.0.tgz" + integrity sha512-2cRl1ism+wJUoYAYFt6O/rLBfpXNWG2dUWbgcEkTt5WGMnqI46eEro8T4C5zGROxKRqyKpCBSdHPvt5UYCtxaQ== + dependencies: + bin-build "^3.0.0" + bin-wrapper "^4.0.0" + logalot "^2.0.0" + "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" @@ -5168,6 +7632,14 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@^3.8.1: + version "3.14.1" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" @@ -5175,6 +7647,11 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" + integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== + jsesc@^2.5.1: version "2.5.2" resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" @@ -5190,6 +7667,11 @@ json-buffer@3.0.0: resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz" integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ== +json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: version "2.3.1" resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" @@ -5205,6 +7687,16 @@ json-schema-traverse@^1.0.0: resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== +json-schema@0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + json5@^2.1.2, json5@^2.2.2: version "2.2.3" resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" @@ -5219,6 +7711,16 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" +jsprim@^1.2.2: + version "1.4.2" + resolved "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz" + integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.4.0" + verror "1.10.0" + keyv@^3.0.0: version "3.1.0" resolved "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz" @@ -5226,6 +7728,41 @@ keyv@^3.0.0: dependencies: json-buffer "3.0.0" +keyv@3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz" + integrity sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA== + dependencies: + json-buffer "3.0.0" + +kind-of@^3.0.2: + version "3.2.2" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz" + integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ== + dependencies: + is-buffer "^1.1.5" + +kind-of@^3.0.3: + version "3.2.2" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz" + integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ== + dependencies: + is-buffer "^1.1.5" + +kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz" + integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ== + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz" + integrity sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw== + dependencies: + is-buffer "^1.1.5" + kind-of@^6.0.0, kind-of@^6.0.2: version "6.0.3" resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" @@ -5251,6 +7788,13 @@ launch-editor@^2.6.0: picocolors "^1.0.0" shell-quote "^1.7.3" +lazy-cache@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz" + integrity sha512-7vp2Acd2+Kz4XkzxGxaB1FWOi8KjWIWsgdfD5MCb86DWvlLqhRPM+d6Pro3iNEL5VT9mstz5hKAlcd+QR6H3aA== + dependencies: + set-getter "^0.1.0" + leven@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" @@ -5266,6 +7810,37 @@ lines-and-columns@^1.1.6: resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== +list-item@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/list-item/-/list-item-1.1.1.tgz" + integrity sha512-S3D0WZ4J6hyM8o5SNKWaMYB1ALSacPZ2nHGEuCjmHZ+dc03gFeNZoNDcqfcnO4vDhTZmNrqrpYZCdXsRh22bzw== + dependencies: + expand-range "^1.8.1" + extend-shallow "^2.0.1" + is-number "^2.1.0" + repeat-string "^1.5.2" + +listenercount@~1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz" + integrity sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ== + +livereload-js@^2.3.0: + version "2.4.0" + resolved "https://registry.npmjs.org/livereload-js/-/livereload-js-2.4.0.tgz" + integrity sha512-XPQH8Z2GDP/Hwz2PCDrh2mth4yFejwA1OZ/81Ti3LgKyhDcEjsSsqFWZojHG0va/duGd+WyosY7eXLDoOyqcPw== + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz" + integrity sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A== + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + loader-runner@^4.2.0: version "4.3.0" resolved "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz" @@ -5285,6 +7860,15 @@ loader-utils@^3.2.0: resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz" integrity sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw== +loader-utils@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz" + integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + locate-path@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz" @@ -5307,6 +7891,26 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" +lodash._reinterpolate@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz" + integrity sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA== + +lodash.assignin@^4.0.9: + version "4.2.0" + resolved "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz" + integrity sha512-yX/rx6d/UTVh7sSVWVSIMjfnz95evAgDFdb1ZozC35I9mSFCkmzptOzevxjgbQUsc78NR44LVHWjsoMQXy9FDg== + +lodash.bind@^4.1.4: + version "4.2.1" + resolved "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz" + integrity sha512-lxdsn7xxlCymgLYo1gGvVrfHmkjDiyqVv62FAeF2i5ta72BipE1SLxw8hPEPLhD4/247Ijw07UQH7Hq/chT5LA== + +lodash.chunk@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/lodash.chunk/-/lodash.chunk-4.2.0.tgz" + integrity sha512-ZzydJKfUHJwHa+hF5X66zLFCBrWn5GeF28OHEr4WVWtNDXlQ/IjWKPBiikqKo2ne0+v6JgCgJ0GzJp8k8bHC7w== + lodash.curry@^4.0.1: version "4.1.1" resolved "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz" @@ -5317,26 +7921,129 @@ lodash.debounce@^4.0.8: resolved "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== +lodash.defaults@^4.0.1: + version "4.2.0" + resolved "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz" + integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== + +lodash.escape@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz" + integrity sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw== + +lodash.filter@^4.4.0: + version "4.6.0" + resolved "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz" + integrity sha512-pXYUy7PR8BCLwX5mgJ/aNtyOvuJTdZAo9EQFUvMIYugqmJxnrYaANvTbgndOzHSCSR0wnlBBfRXJL5SbWxo3FQ== + +lodash.flatten@^4.2.0: + version "4.4.0" + resolved "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz" + integrity sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g== + +lodash.flattendeep@^4.4.0: + version "4.4.0" + resolved "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz" + integrity sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ== + lodash.flow@^3.3.0: version "3.5.0" resolved "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz" integrity sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw== +lodash.foreach@^4.3.0: + version "4.5.0" + resolved "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz" + integrity sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ== + +lodash.isequal@^4.5.0: + version "4.5.0" + resolved "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz" + integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== + +lodash.map@^4.4.0: + version "4.6.0" + resolved "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz" + integrity sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q== + lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz" integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== -lodash.uniq@4.5.0, lodash.uniq@^4.5.0: +lodash.merge@^4.4.0: + version "4.6.2" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.padstart@^4.6.1: + version "4.6.1" + resolved "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz" + integrity sha512-sW73O6S8+Tg66eY56DBk85aQzzUJDtpoXFBgELMd5P/SotAguo+1kYO6RuYgXxA4HJH3LFTFPASX6ET6bjfriw== + +lodash.pick@^4.2.1: + version "4.4.0" + resolved "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz" + integrity sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q== + +lodash.reduce@^4.4.0: + version "4.6.0" + resolved "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz" + integrity sha512-6raRe2vxCYBhpBu+B+TtNGUzah+hQjVdu3E17wfusjyrXBka2nBS8OH/gjVZ5PvHOhWmIZTYri09Z6n/QfnNMw== + +lodash.reject@^4.4.0: + version "4.6.0" + resolved "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz" + integrity sha512-qkTuvgEzYdyhiJBx42YPzPo71R1aEr0z79kAv7Ixg8wPFEjgRgJdUsGMG3Hf3OYSF/kHI79XhNlt+5Ar6OzwxQ== + +lodash.some@^4.4.0: + version "4.6.0" + resolved "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz" + integrity sha512-j7MJE+TuT51q9ggt4fSgVqro163BEFjAt3u97IqU+JA2DkWl80nFTrowzLpZ/BnpN7rrl0JA/593NAdd8p/scQ== + +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz" + integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== + +lodash.template@^4.4.0: + version "4.5.0" + resolved "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz" + integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== + dependencies: + lodash._reinterpolate "^3.0.0" + lodash.templatesettings "^4.0.0" + +lodash.templatesettings@^4.0.0: + version "4.2.0" + resolved "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz" + integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== + dependencies: + lodash._reinterpolate "^3.0.0" + +lodash.uniq@^4.5.0, lodash.uniq@4.5.0: version "4.5.0" resolved "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz" integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== -lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21: +lodash@^4.17.14, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21: version "4.17.21" resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== +logalot@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/logalot/-/logalot-2.1.0.tgz" + integrity sha512-Ah4CgdSRfeCJagxQhcVNMi9BfGYyEKLa6d7OA6xSbld/Hg3Cf2QiOa1mDpmG7Ve8LOH6DN3mdttzjQAvWTyVkw== + dependencies: + figures "^1.3.5" + squeak "^1.0.0" + +longest@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz" + integrity sha512-k+yt5n3l48JU4k8ftnKG6V7u32wyH2NfKzeMto9F/QRE0amxy/LayxwlvjjkZEIzqR+19IrtFO8p5kB9QaYUFg== + loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" @@ -5344,6 +8051,14 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3 dependencies: js-tokens "^3.0.0 || ^4.0.0" +loud-rejection@^1.0.0: + version "1.6.0" + resolved "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz" + integrity sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ== + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + lower-case@^2.0.2: version "2.0.2" resolved "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz" @@ -5361,6 +8076,29 @@ lowercase-keys@^2.0.0: resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz" integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== +lowercase-keys@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz" + integrity sha512-RPlX0+PHuvxVDZ7xX+EBVAp4RsVxP/TdDSN2mJYdiq1Lc4Hz7EUSjUI7RZrKKlmrIzVhf6Jo2stj7++gVarS0A== + +lpad-align@^1.0.1: + version "1.1.2" + resolved "https://registry.npmjs.org/lpad-align/-/lpad-align-1.1.2.tgz" + integrity sha512-MMIcFmmR9zlGZtBcFOows6c2COMekHCIFJz3ew/rRpKZ1wR4mXDPzvcVqLarux8M33X4TPSq2Jdw8WJj0q0KbQ== + dependencies: + get-stdin "^4.0.1" + indent-string "^2.1.0" + longest "^1.0.0" + meow "^3.3.0" + +lru-cache@^4.0.1: + version "4.1.5" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" @@ -5385,6 +8123,28 @@ lunr@^2.3.8: resolved "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz" integrity sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow== +make-dir@^1.0.0: + version "1.3.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz" + integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== + dependencies: + pify "^3.0.0" + +make-dir@^1.2.0: + version "1.3.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz" + integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== + dependencies: + pify "^3.0.0" + +make-dir@^2.0.0, make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" @@ -5392,11 +8152,56 @@ make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: dependencies: semver "^6.0.0" +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz" + integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg== + +map-obj@^1.0.0, map-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz" + integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg== + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz" + integrity sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w== + dependencies: + object-visit "^1.0.0" + markdown-escapes@^1.0.0: version "1.0.4" resolved "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz" integrity sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg== +markdown-link@^0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/markdown-link/-/markdown-link-0.1.1.tgz" + integrity sha512-TurLymbyLyo+kAUUAV9ggR9EPcDjP/ctlv9QAFiqUH7c+t6FlsbivPo9OKTU8xdOx9oNd2drW/Fi5RRElQbUqA== + +markdown-toc@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/markdown-toc/-/markdown-toc-1.2.0.tgz" + integrity sha512-eOsq7EGd3asV0oBfmyqngeEIhrbkc7XVP63OwcJBIhH2EpG2PzFcbZdhy1jutXSlRBBVMNXHvMtSr5LAxSUvUg== + dependencies: + concat-stream "^1.5.2" + diacritics-map "^0.1.0" + gray-matter "^2.1.0" + lazy-cache "^2.0.2" + list-item "^1.1.1" + markdown-link "^0.1.1" + minimist "^1.2.0" + mixin-deep "^1.1.3" + object.pick "^1.2.0" + remarkable "^1.7.1" + repeat-string "^1.6.1" + strip-color "^0.1.0" + +math-random@^1.0.1: + version "1.0.4" + resolved "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz" + integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A== + mdast-squeeze-paragraphs@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz" @@ -5435,6 +8240,11 @@ mdn-data@2.0.14: resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz" integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== +mdn-data@2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz" + integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== + mdurl@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz" @@ -5452,6 +8262,22 @@ memfs@^3.1.2, memfs@^3.4.3: dependencies: fs-monkey "^1.0.4" +meow@^3.3.0: + version "3.7.0" + resolved "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz" + integrity sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA== + dependencies: + camelcase-keys "^2.0.0" + decamelize "^1.1.2" + loud-rejection "^1.0.0" + map-obj "^1.0.1" + minimist "^1.1.3" + normalize-package-data "^2.3.4" + object-assign "^4.0.1" + read-pkg-up "^1.0.1" + redent "^1.0.0" + trim-newlines "^1.0.0" + merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz" @@ -5462,7 +8288,7 @@ merge-stream@^2.0.0: resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -merge2@^1.3.0, merge2@^1.4.1: +merge2@^1.2.3, merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== @@ -5472,6 +8298,30 @@ methods@~1.1.2: resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== +microevent.ts@~0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz" + integrity sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g== + +micromatch@^3.1.10: + version "3.1.10" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: version "4.0.5" resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" @@ -5480,24 +8330,57 @@ micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: braces "^3.0.2" picomatch "^2.3.1" -mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": - version "1.52.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-db@~1.33.0: +mime-db@^1.28.0, mime-db@~1.33.0: version "1.33.0" resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz" integrity sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ== -mime-types@2.1.18, mime-types@~2.1.17: +"mime-db@>= 1.43.0 < 2": + version "1.52.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12, mime-types@~2.1.17, mime-types@2.1.18: version "2.1.18" resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz" integrity sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ== dependencies: mime-db "~1.33.0" -mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.24, mime-types@~2.1.34: +mime-types@^2.1.27: + version "2.1.35" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime-types@^2.1.31: + version "2.1.35" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime-types@~2.1.19: + version "2.1.35" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime-types@~2.1.24: + version "2.1.35" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime-types@~2.1.34: version "2.1.35" resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== @@ -5536,43 +8419,91 @@ minimalistic-assert@^1.0.0: resolved "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== -minimatch@3.1.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1: +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@3.1.2: version "3.1.2" resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" -minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5: +minimatch@~3.0.2: + version "3.0.8" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz" + integrity sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q== + dependencies: + brace-expansion "^1.1.7" + +minimatch@3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5, minimist@^1.2.6: version "1.2.8" resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== +mixin-deep@^1.1.3, mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: version "0.5.3" resolved "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz" integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== +mkdirp@^0.5.1, mkdirp@~0.5.1: + version "0.5.6" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +mkdirp@^0.5.6: + version "0.5.6" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +"mkdirp@>=0.5 0": + version "0.5.6" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + mkdirp@0.3.0: version "0.3.0" resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz" integrity sha512-OHsdUcVAQ6pOtg5JYWpCBo9W/GySVuwvP9hueRMW7UqshC0tbfzLv8wjySTPm3tfUZ/21CE9E1pJagOA91Pxew== +moo@^0.5.0: + version "0.5.2" + resolved "https://registry.npmjs.org/moo/-/moo-0.5.2.tgz" + integrity sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q== + mrmime@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz" integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw== +ms@^2.1.1, ms@2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + ms@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== -ms@2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - ms@2.1.3: version "2.1.3" resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" @@ -5591,11 +8522,38 @@ nanoid@^3.3.6: resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz" integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + napi-build-utils@^1.0.1: version "1.0.2" resolved "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz" integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== +nearley@^2.7.10: + version "2.20.1" + resolved "https://registry.npmjs.org/nearley/-/nearley-2.20.1.tgz" + integrity sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ== + dependencies: + commander "^2.19.0" + moo "^0.5.0" + railroad-diagrams "^1.0.0" + randexp "0.4.6" + negotiator@0.6.3: version "0.6.3" resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" @@ -5606,6 +8564,11 @@ neo-async@^2.6.2: resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + no-case@^3.0.4: version "3.0.4" resolved "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz" @@ -5650,6 +8613,11 @@ node-forge@^1: resolved "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz" integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== +node-releases@^1.1.61: + version "1.1.77" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-1.1.77.tgz" + integrity sha512-rB1DUFUNAN4Gn9keO2K1efO35IDK7yKHCdCaIMvFO7yUYmmZYeDjnGKle26G4rwj+LKRQpjyUUvMkPglwGCYNQ== + node-releases@^2.0.13: version "2.0.13" resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz" @@ -5662,6 +8630,16 @@ nopt@1.0.10: dependencies: abbrev "1" +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: + version "2.5.0" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" @@ -5672,6 +8650,11 @@ normalize-range@^0.1.2: resolved "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz" integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== +normalize-url@^3.0.0: + version "3.3.0" + resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz" + integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== + normalize-url@^4.1.0: version "4.5.1" resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz" @@ -5682,11 +8665,35 @@ normalize-url@^6.0.1: resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz" integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== +normalize-url@2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz" + integrity sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw== + dependencies: + prepend-http "^2.0.0" + query-string "^5.0.1" + sort-keys "^2.0.0" + not@^0.1.0: version "0.1.0" resolved "https://registry.npmjs.org/not/-/not-0.1.0.tgz" integrity sha512-5PDmaAsVfnWUgTUbJ3ERwn7u79Z0dYxN9ErxCpVJJqe2RK0PJ3z+iFUxuqjwtlDDegXvtWoxD/3Fzxox7tFGWA== +npm-conf@^1.1.0: + version "1.1.3" + resolved "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz" + integrity sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw== + dependencies: + config-chain "^1.1.11" + pify "^3.0.0" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz" + integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== + dependencies: + path-key "^2.0.0" + npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" @@ -5699,6 +8706,13 @@ nprogress@^0.2.0: resolved "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz" integrity sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA== +nth-check@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz" + integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== + dependencies: + boolbase "~1.0.0" + nth-check@^2.0.0, nth-check@^2.0.1: version "2.1.1" resolved "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz" @@ -5706,22 +8720,63 @@ nth-check@^2.0.0, nth-check@^2.0.1: dependencies: boolbase "^1.0.0" -object-assign@^4.1.0, object-assign@^4.1.1: +nth-check@~1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz" + integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== + dependencies: + boolbase "~1.0.0" + +num2fraction@^1.2.2: + version "1.2.2" + resolved "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz" + integrity sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg== + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.9.0: - version "1.12.3" - resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz" + integrity sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ== + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-inspect@^1.13.1, object-inspect@^1.7.0, object-inspect@^1.9.0: + version "1.13.1" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== + +object-is@^1.0.2, object-is@^1.1.2, object-is@^1.1.5: + version "1.1.5" + resolved "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz" + integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" object-keys@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object.assign@^4.1.0: +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz" + integrity sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA== + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.0, object.assign@^4.1.4: version "4.1.4" resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz" integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== @@ -5731,6 +8786,51 @@ object.assign@^4.1.0: has-symbols "^1.0.3" object-keys "^1.1.1" +object.entries@^1.1.1, object.entries@^1.1.2: + version "1.1.7" + resolved "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz" + integrity sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +object.fromentries@^2.0.5: + version "2.0.7" + resolved "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz" + integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +object.getownpropertydescriptors@^2.1.0: + version "2.1.7" + resolved "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.7.tgz" + integrity sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g== + dependencies: + array.prototype.reduce "^1.0.6" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + safe-array-concat "^1.0.0" + +object.pick@^1.2.0, object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz" + integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ== + dependencies: + isobject "^3.0.1" + +object.values@^1.1.0, object.values@^1.1.1, object.values@^1.1.5: + version "1.1.7" + resolved "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz" + integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + obuf@^1.0.0, obuf@^1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz" @@ -5762,6 +8862,14 @@ onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" +open@^7.0.2: + version "7.4.2" + resolved "https://registry.npmjs.org/open/-/open-7.4.2.tgz" + integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== + dependencies: + is-docker "^2.0.0" + is-wsl "^2.1.1" + open@^8.0.9, open@^8.4.0: version "8.4.2" resolved "https://registry.npmjs.org/open/-/open-8.4.2.tgz" @@ -5776,11 +8884,61 @@ opener@^1.5.2: resolved "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz" integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== +optipng-bin@^5.0.0: + version "5.1.0" + resolved "https://registry.npmjs.org/optipng-bin/-/optipng-bin-5.1.0.tgz" + integrity sha512-9baoqZTNNmXQjq/PQTWEXbVV3AMO2sI/GaaqZJZ8SExfAzjijeAP7FEeT+TtyumSw7gr0PZtSUYB/Ke7iHQVKA== + dependencies: + bin-build "^3.0.0" + bin-wrapper "^4.0.0" + logalot "^2.0.0" + +os-filter-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-2.0.0.tgz" + integrity sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg== + dependencies: + arch "^2.1.0" + +p-cancelable@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz" + integrity sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw== + +p-cancelable@^0.4.0: + version "0.4.1" + resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz" + integrity sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ== + p-cancelable@^1.0.0: version "1.1.0" resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz" integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== +p-event@^1.0.0: + version "1.3.0" + resolved "https://registry.npmjs.org/p-event/-/p-event-1.3.0.tgz" + integrity sha512-hV1zbA7gwqPVFcapfeATaNjQ3J0NuzorHPyG8GPL9g/Y/TplWVBVoCKCXL6Ej2zscrCEv195QNWJXuBH6XZuzA== + dependencies: + p-timeout "^1.1.1" + +p-event@^2.1.0: + version "2.3.1" + resolved "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz" + integrity sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA== + dependencies: + p-timeout "^2.0.1" + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz" + integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== + +p-is-promise@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz" + integrity sha512-zL7VE4JVS2IFSkR2GQKDSPEVxkoH43/p7oEnwpdCndKYJO0HVeRB7fA8TJwuLOTBREtK0ea8eHaxdwcpob5dmg== + p-limit@^2.0.0, p-limit@^2.2.0: version "2.3.0" resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" @@ -5816,6 +8974,13 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" +p-map-series@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/p-map-series/-/p-map-series-1.0.0.tgz" + integrity sha512-4k9LlvY6Bo/1FcIdV33wqZQES0Py+iKISU9Uc8p8AjWoZPnFKMpVIVD3s0EYn4jzLh1I+WeUZkJ0Yoa4Qfw3Kg== + dependencies: + p-reduce "^1.0.0" + p-map@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" @@ -5823,6 +8988,16 @@ p-map@^4.0.0: dependencies: aggregate-error "^3.0.0" +p-pipe@^1.1.0: + version "1.2.0" + resolved "https://registry.npmjs.org/p-pipe/-/p-pipe-1.2.0.tgz" + integrity sha512-IA8SqjIGA8l9qOksXJvsvkeQ+VGb0TAzNCzvKvz9wt5wWLqfWbV6fXy43gpR2L4Te8sOq3S+Ql9biAaMKPdbtw== + +p-reduce@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz" + integrity sha512-3Tx1T3oM1xO/Y8Gj0sWyE78EIJZ+t+aEmXUdvQgvGmSMri7aPTHoovbXEreWKkL5j21Er60XAWLTzKbAKYOujQ== + p-retry@^4.5.0: version "4.6.2" resolved "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz" @@ -5831,6 +9006,20 @@ p-retry@^4.5.0: "@types/retry" "0.12.0" retry "^0.13.1" +p-timeout@^1.1.1: + version "1.2.1" + resolved "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz" + integrity sha512-gb0ryzr+K2qFqFv6qi3khoeqMZF/+ajxQipEF6NteZVnvz9tzdsfAVj3lYtn1gAXvH5lfLwfxEII799gt/mRIA== + dependencies: + p-finally "^1.0.0" + +p-timeout@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz" + integrity sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA== + dependencies: + p-finally "^1.0.0" + p-try@^2.0.0: version "2.2.0" resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" @@ -5873,6 +9062,21 @@ parse-entities@^2.0.0: is-decimal "^1.0.0" is-hexadecimal "^1.0.0" +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz" + integrity sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ== + dependencies: + error-ex "^1.2.0" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz" + integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + parse-json@^5.0.0: version "5.2.0" resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" @@ -5921,6 +9125,23 @@ pascal-case@^3.1.2: no-case "^3.0.4" tslib "^2.0.3" +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz" + integrity sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw== + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz" + integrity sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q== + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz" + integrity sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ== + dependencies: + pinkie-promise "^2.0.0" + path-exists@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" @@ -5941,6 +9162,11 @@ path-is-inside@1.0.2: resolved "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz" integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz" + integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== + path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" @@ -5951,6 +9177,13 @@ path-parse@^1.0.7: resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== +path-to-regexp@^1.7.0: + version "1.8.0" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz" + integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== + dependencies: + isarray "0.0.1" + path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" @@ -5961,18 +9194,42 @@ path-to-regexp@2.2.1: resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz" integrity sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ== -path-to-regexp@^1.7.0: - version "1.8.0" - resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz" - integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz" + integrity sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg== dependencies: - isarray "0.0.1" + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" path-type@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz" + integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz" + integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== + +picocolors@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz" + integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA== + picocolors@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" @@ -5983,6 +9240,55 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + +pify@^2.2.0: + version "2.3.0" + resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + +pify@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" + integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw== + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" + integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== + +pirates@^4.0.5: + version "4.0.6" + resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz" + integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + pkg-dir@^4.1.0: version "4.2.0" resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" @@ -5990,13 +9296,36 @@ pkg-dir@^4.1.0: dependencies: find-up "^4.0.0" -pkg-up@^3.1.0: +pkg-up@^3.1.0, pkg-up@3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz" integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== dependencies: find-up "^3.0.0" +portfinder@^1.0.28: + version "1.0.32" + resolved "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz" + integrity sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg== + dependencies: + async "^2.6.4" + debug "^3.2.7" + mkdirp "^0.5.6" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz" + integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== + +postcss-calc@^7.0.1: + version "7.0.5" + resolved "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz" + integrity sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg== + dependencies: + postcss "^7.0.27" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.0.2" + postcss-calc@^8.2.3: version "8.2.4" resolved "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz" @@ -6005,6 +9334,17 @@ postcss-calc@^8.2.3: postcss-selector-parser "^6.0.9" postcss-value-parser "^4.2.0" +postcss-colormin@^4.0.3: + version "4.0.3" + resolved "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz" + integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw== + dependencies: + browserslist "^4.0.0" + color "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + postcss-colormin@^5.3.1: version "5.3.1" resolved "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz" @@ -6015,6 +9355,14 @@ postcss-colormin@^5.3.1: colord "^2.9.1" postcss-value-parser "^4.2.0" +postcss-convert-values@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz" + integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + postcss-convert-values@^5.1.3: version "5.1.3" resolved "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz" @@ -6023,21 +9371,49 @@ postcss-convert-values@^5.1.3: browserslist "^4.21.4" postcss-value-parser "^4.2.0" +postcss-discard-comments@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz" + integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg== + dependencies: + postcss "^7.0.0" + postcss-discard-comments@^5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz" integrity sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ== +postcss-discard-duplicates@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz" + integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ== + dependencies: + postcss "^7.0.0" + postcss-discard-duplicates@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz" integrity sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw== +postcss-discard-empty@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz" + integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w== + dependencies: + postcss "^7.0.0" + postcss-discard-empty@^5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz" integrity sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A== +postcss-discard-overridden@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz" + integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg== + dependencies: + postcss "^7.0.0" + postcss-discard-overridden@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz" @@ -6067,6 +9443,16 @@ postcss-merge-idents@^5.1.1: cssnano-utils "^3.1.0" postcss-value-parser "^4.2.0" +postcss-merge-longhand@^4.0.11: + version "4.0.11" + resolved "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz" + integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw== + dependencies: + css-color-names "0.0.4" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + stylehacks "^4.0.0" + postcss-merge-longhand@^5.1.7: version "5.1.7" resolved "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz" @@ -6075,6 +9461,18 @@ postcss-merge-longhand@^5.1.7: postcss-value-parser "^4.2.0" stylehacks "^5.1.1" +postcss-merge-rules@^4.0.3: + version "4.0.3" + resolved "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz" + integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ== + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + cssnano-util-same-parent "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + vendors "^1.0.0" + postcss-merge-rules@^5.1.4: version "5.1.4" resolved "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz" @@ -6085,6 +9483,14 @@ postcss-merge-rules@^5.1.4: cssnano-utils "^3.1.0" postcss-selector-parser "^6.0.5" +postcss-minify-font-values@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz" + integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + postcss-minify-font-values@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz" @@ -6092,6 +9498,16 @@ postcss-minify-font-values@^5.1.0: dependencies: postcss-value-parser "^4.2.0" +postcss-minify-gradients@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz" + integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q== + dependencies: + cssnano-util-get-arguments "^4.0.0" + is-color-stop "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + postcss-minify-gradients@^5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz" @@ -6101,6 +9517,18 @@ postcss-minify-gradients@^5.1.1: cssnano-utils "^3.1.0" postcss-value-parser "^4.2.0" +postcss-minify-params@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz" + integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg== + dependencies: + alphanum-sort "^1.0.0" + browserslist "^4.0.0" + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + uniqs "^2.0.0" + postcss-minify-params@^5.1.4: version "5.1.4" resolved "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz" @@ -6110,6 +9538,16 @@ postcss-minify-params@^5.1.4: cssnano-utils "^3.1.0" postcss-value-parser "^4.2.0" +postcss-minify-selectors@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz" + integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g== + dependencies: + alphanum-sort "^1.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + postcss-minify-selectors@^5.2.1: version "5.2.1" resolved "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz" @@ -6145,11 +9583,27 @@ postcss-modules-values@^4.0.0: dependencies: icss-utils "^5.0.0" +postcss-normalize-charset@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz" + integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g== + dependencies: + postcss "^7.0.0" + postcss-normalize-charset@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz" integrity sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg== +postcss-normalize-display-values@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz" + integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + postcss-normalize-display-values@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz" @@ -6157,6 +9611,16 @@ postcss-normalize-display-values@^5.1.0: dependencies: postcss-value-parser "^4.2.0" +postcss-normalize-positions@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz" + integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA== + dependencies: + cssnano-util-get-arguments "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + postcss-normalize-positions@^5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz" @@ -6164,6 +9628,16 @@ postcss-normalize-positions@^5.1.1: dependencies: postcss-value-parser "^4.2.0" +postcss-normalize-repeat-style@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz" + integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q== + dependencies: + cssnano-util-get-arguments "^4.0.0" + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + postcss-normalize-repeat-style@^5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz" @@ -6171,6 +9645,15 @@ postcss-normalize-repeat-style@^5.1.1: dependencies: postcss-value-parser "^4.2.0" +postcss-normalize-string@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz" + integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA== + dependencies: + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + postcss-normalize-string@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz" @@ -6178,6 +9661,15 @@ postcss-normalize-string@^5.1.0: dependencies: postcss-value-parser "^4.2.0" +postcss-normalize-timing-functions@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz" + integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + postcss-normalize-timing-functions@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz" @@ -6185,6 +9677,15 @@ postcss-normalize-timing-functions@^5.1.0: dependencies: postcss-value-parser "^4.2.0" +postcss-normalize-unicode@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz" + integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg== + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + postcss-normalize-unicode@^5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz" @@ -6193,6 +9694,16 @@ postcss-normalize-unicode@^5.1.1: browserslist "^4.21.4" postcss-value-parser "^4.2.0" +postcss-normalize-url@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz" + integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA== + dependencies: + is-absolute-url "^2.0.0" + normalize-url "^3.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + postcss-normalize-url@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz" @@ -6201,6 +9712,14 @@ postcss-normalize-url@^5.1.0: normalize-url "^6.0.1" postcss-value-parser "^4.2.0" +postcss-normalize-whitespace@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz" + integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + postcss-normalize-whitespace@^5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz" @@ -6208,6 +9727,15 @@ postcss-normalize-whitespace@^5.1.1: dependencies: postcss-value-parser "^4.2.0" +postcss-ordered-values@^4.1.2: + version "4.1.2" + resolved "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz" + integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw== + dependencies: + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + postcss-ordered-values@^5.1.3: version "5.1.3" resolved "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz" @@ -6223,6 +9751,16 @@ postcss-reduce-idents@^5.2.0: dependencies: postcss-value-parser "^4.2.0" +postcss-reduce-initial@^4.0.3: + version "4.0.3" + resolved "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz" + integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA== + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-reduce-initial@^5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz" @@ -6231,6 +9769,16 @@ postcss-reduce-initial@^5.1.2: browserslist "^4.21.4" caniuse-api "^3.0.0" +postcss-reduce-transforms@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz" + integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg== + dependencies: + cssnano-util-get-match "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + postcss-reduce-transforms@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz" @@ -6238,6 +9786,15 @@ postcss-reduce-transforms@^5.1.0: dependencies: postcss-value-parser "^4.2.0" +postcss-selector-parser@^3.0.0: + version "3.1.2" + resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz" + integrity sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA== + dependencies: + dot-prop "^5.2.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: version "6.0.13" resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz" @@ -6253,6 +9810,15 @@ postcss-sort-media-queries@^4.2.1: dependencies: sort-css-media-queries "2.1.0" +postcss-svgo@^4.0.3: + version "4.0.3" + resolved "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz" + integrity sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + svgo "^1.0.0" + postcss-svgo@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz" @@ -6261,6 +9827,15 @@ postcss-svgo@^5.1.0: postcss-value-parser "^4.2.0" svgo "^2.7.0" +postcss-unique-selectors@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz" + integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg== + dependencies: + alphanum-sort "^1.0.0" + postcss "^7.0.0" + uniqs "^2.0.0" + postcss-unique-selectors@^5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz" @@ -6268,7 +9843,12 @@ postcss-unique-selectors@^5.1.1: dependencies: postcss-selector-parser "^6.0.5" -postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: +postcss-value-parser@^3.0.0: + version "3.3.1" + resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz" + integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== + +postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: version "4.2.0" resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== @@ -6278,15 +9858,23 @@ postcss-zindex@^5.1.0: resolved "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-5.1.0.tgz" integrity sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A== -postcss@^8.3.11, postcss@^8.4.14, postcss@^8.4.17, postcss@^8.4.21: +"postcss@^7.0.0 || ^8.0.1", postcss@^8.0.9, postcss@^8.1.0, postcss@^8.2.15, postcss@^8.2.2, postcss@^8.3.11, postcss@^8.4.14, postcss@^8.4.16, postcss@^8.4.17, postcss@^8.4.21: version "8.4.31" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz" integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== dependencies: nanoid "^3.3.6" picocolors "^1.0.0" source-map-js "^1.0.2" +postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.23, postcss@^7.0.27, postcss@^7.0.32: + version "7.0.39" + resolved "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz" + integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA== + dependencies: + picocolors "^0.2.1" + source-map "^0.6.1" + prebuild-install@^7.1.1: version "7.1.1" resolved "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz" @@ -6305,11 +9893,21 @@ prebuild-install@^7.1.1: tar-fs "^2.0.0" tunnel-agent "^0.6.0" +prepend-http@^1.0.1: + version "1.0.4" + resolved "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz" + integrity sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg== + prepend-http@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz" integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== +pretty-bytes@^5.6.0: + version "5.6.0" + resolved "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz" + integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== + pretty-error@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz" @@ -6328,7 +9926,7 @@ prism-react-renderer@^1.3.5: resolved "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.3.5.tgz" integrity sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg== -prismjs@^1.28.0: +prismjs@^1.22.0, prismjs@^1.28.0: version "1.29.0" resolved "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz" integrity sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q== @@ -6353,7 +9951,24 @@ prompts@^2.4.2: kleur "^3.0.3" sisteransi "^1.0.5" -prop-types@^15.0.0, prop-types@^15.6.2, prop-types@^15.7.2: +prompts@2.4.0: + version "2.4.0" + resolved "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz" + integrity sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +prop-types-exact@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/prop-types-exact/-/prop-types-exact-1.2.0.tgz" + integrity sha512-K+Tk3Kd9V0odiXFP9fwDHUYRyvK3Nun3GVyPapSIs5OBkITAm15W0CPFD/YKTkMUAbc0b9CUwRQp2ybiBIq+eA== + dependencies: + has "^1.0.3" + object.assign "^4.1.0" + reflect.ownkeys "^0.2.0" + +prop-types@^15.0.0, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1, prop-types@>=15: version "15.8.1" resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -6369,6 +9984,11 @@ property-information@^5.0.0, property-information@^5.3.0: dependencies: xtend "^4.0.0" +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz" + integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== + proxy-addr@~2.0.7: version "2.0.7" resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" @@ -6377,6 +9997,16 @@ proxy-addr@~2.0.7: forwarded "0.2.0" ipaddr.js "1.9.1" +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz" + integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== + +psl@^1.1.28: + version "1.9.0" + resolved "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz" + integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== + pump@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" @@ -6391,9 +10021,14 @@ punycode@^1.3.2: integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== punycode@^2.1.0: - version "2.3.0" - resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + version "2.3.1" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +punycode@^2.1.1: + version "2.3.1" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== pupa@^2.1.1: version "2.1.1" @@ -6407,13 +10042,32 @@ pure-color@^1.2.0: resolved "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz" integrity sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA== -qs@6.11.0: +q@^1.1.2: + version "1.5.1" + resolved "https://registry.npmjs.org/q/-/q-1.5.1.tgz" + integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== + +qs@^6.4.0, qs@6.11.0: version "6.11.0" resolved "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz" integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== dependencies: side-channel "^1.0.4" +qs@~6.5.2: + version "6.5.3" + resolved "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz" + integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== + +query-string@^5.0.1: + version "5.1.1" + resolved "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz" + integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== + dependencies: + decode-uri-component "^0.2.0" + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" @@ -6431,6 +10085,35 @@ queue@6.0.2: dependencies: inherits "~2.0.3" +raf@^3.4.1: + version "3.4.1" + resolved "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz" + integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== + dependencies: + performance-now "^2.1.0" + +railroad-diagrams@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz" + integrity sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A== + +randexp@0.4.6: + version "0.4.6" + resolved "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz" + integrity sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ== + dependencies: + discontinuous-range "1.0.0" + ret "~0.1.10" + +randomatic@^3.0.0: + version "3.1.1" + resolved "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz" + integrity sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw== + dependencies: + is-number "^4.0.0" + kind-of "^6.0.0" + math-random "^1.0.1" + randombytes@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" @@ -6438,15 +10121,28 @@ randombytes@^2.1.0: dependencies: safe-buffer "^5.1.0" +range-parser@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + range-parser@1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz" integrity sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A== -range-parser@^1.2.1, range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== +raw-body@~1.1.0: + version "1.1.7" + resolved "https://registry.npmjs.org/raw-body/-/raw-body-1.1.7.tgz" + integrity sha512-WmJJU2e9Y6M5UzTOkHaM7xJGAPQD8PNzx3bAd2+uhZAim6wDk6dAZxPVYLF67XhbR4hmKGh33Lpmh4XWrCH5Mg== + dependencies: + bytes "1" + string_decoder "0.10" raw-body@2.5.1: version "2.5.1" @@ -6458,7 +10154,7 @@ raw-body@2.5.1: iconv-lite "0.4.24" unpipe "1.0.0" -rc@1.2.8, rc@^1.2.7, rc@^1.2.8: +rc@^1.2.7, rc@^1.2.8, rc@1.2.8: version "1.2.8" resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== @@ -6478,6 +10174,36 @@ react-base16-styling@^0.6.0: lodash.flow "^3.3.0" pure-color "^1.2.0" +react-dev-utils@^11.0.1: + version "11.0.4" + resolved "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-11.0.4.tgz" + integrity sha512-dx0LvIGHcOPtKbeiSUM4jqpBl3TcY7CDjZdfOIcKeznE7BWr9dg0iPG90G5yfVQ+p/rGNMXdbfStvzQZEVEi4A== + dependencies: + "@babel/code-frame" "7.10.4" + address "1.1.2" + browserslist "4.14.2" + chalk "2.4.2" + cross-spawn "7.0.3" + detect-port-alt "1.1.6" + escape-string-regexp "2.0.0" + filesize "6.1.0" + find-up "4.1.0" + fork-ts-checker-webpack-plugin "4.1.6" + global-modules "2.0.0" + globby "11.0.1" + gzip-size "5.1.1" + immer "8.0.1" + is-root "2.1.0" + loader-utils "2.0.0" + open "^7.0.2" + pkg-up "3.1.0" + prompts "2.4.0" + react-error-overlay "^6.0.9" + recursive-readdir "2.2.2" + shell-quote "1.7.2" + strip-ansi "6.0.0" + text-table "0.2.0" + react-dev-utils@^12.0.1: version "12.0.1" resolved "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz" @@ -6508,7 +10234,7 @@ react-dev-utils@^12.0.1: strip-ansi "^6.0.1" text-table "^0.2.0" -react-dom@^17.0.2: +react-dom@*, "react-dom@^16.6.0 || ^17.0.0 || ^18.0.0", "react-dom@^16.8.4 || ^17", "react-dom@^16.8.4 || ^17.0.0", "react-dom@^17.0.0 || ^16.3.0 || ^15.5.4", react-dom@^17.0.2, "react-dom@>= 16.8.0 < 19.0.0": version "17.0.2" resolved "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz" integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== @@ -6517,7 +10243,17 @@ react-dom@^17.0.2: object-assign "^4.1.1" scheduler "^0.20.2" -react-error-overlay@^6.0.11: +react-dom@^16.0.0-0, react-dom@^16.8.4: + version "16.14.0" + resolved "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz" + integrity sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.2" + scheduler "^0.19.1" + +react-error-overlay@^6.0.11, react-error-overlay@^6.0.9: version "6.0.11" resolved "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz" integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg== @@ -6538,7 +10274,7 @@ react-helmet-async@*, react-helmet-async@^1.3.0: react-fast-compare "^3.2.0" shallowequal "^1.1.0" -react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0: +react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.6: version "16.13.1" resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== @@ -6570,6 +10306,14 @@ react-loadable-ssr-addon-v5-slorber@^1.0.1: dependencies: "@babel/runtime" "^7.10.3" +react-loadable@*, "react-loadable@npm:@docusaurus/react-loadable@5.5.2": + version "5.5.2" + resolved "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz" + integrity sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ== + dependencies: + "@types/react" "*" + prop-types "^15.6.2" + react-router-config@^5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz" @@ -6590,7 +10334,7 @@ react-router-dom@^5.3.3: tiny-invariant "^1.0.2" tiny-warning "^1.0.0" -react-router@5.3.4, react-router@^5.3.3: +react-router@^5.3.3, react-router@>=5, react-router@5.3.4: version "5.3.4" resolved "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz" integrity sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA== @@ -6605,6 +10349,16 @@ react-router@5.3.4, react-router@^5.3.3: tiny-invariant "^1.0.2" tiny-warning "^1.0.0" +react-test-renderer@^16.0.0-0: + version "16.14.0" + resolved "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.14.0.tgz" + integrity sha512-L8yPjqPE5CZO6rKsKXRO/rVPiaCOy0tQQJbC+UjPNlobl5mad59lvPjwFsQHTvL03caVDIVr9x9/OSgDe6I5Eg== + dependencies: + object-assign "^4.1.1" + prop-types "^15.6.2" + react-is "^16.8.6" + scheduler "^0.19.1" + react-textarea-autosize@^8.3.2: version "8.5.2" resolved "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.5.2.tgz" @@ -6614,7 +10368,7 @@ react-textarea-autosize@^8.3.2: use-composed-ref "^1.3.0" use-latest "^1.2.1" -react-waypoint@^10.3.0: +react-waypoint@^10.3.0, react-waypoint@>=9.0.2: version "10.3.0" resolved "https://registry.npmjs.org/react-waypoint/-/react-waypoint-10.3.0.tgz" integrity sha512-iF1y2c1BsoXuEGz08NoahaLFIGI9gTUAAOKip96HUmylRT6DUtpgoBPjk/Y8dfcFVmfVDvUzWjNXpZyKTOV0SQ== @@ -6624,7 +10378,7 @@ react-waypoint@^10.3.0: prop-types "^15.0.0" react-is "^17.0.1 || ^18.0.0" -react@^17.0.2: +react@*, "react@^15.0.2 || ^16.0.0 || ^17.0.0", "react@^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", "react@^16.13.1 || ^17.0.0", "react@^16.6.0 || ^17.0.0 || ^18.0.0", "react@^16.8.0 || ^17.0.0 || ^18.0.0", "react@^16.8.4 || ^17", "react@^16.8.4 || ^17.0.0", "react@^17.0.0 || ^16.3.0 || ^15.5.4", react@^17.0.2, "react@>= 16.8.0 < 19.0.0", react@>=0.14.9, react@>=0.14.x, react@>=15, react@17.0.2: version "17.0.2" resolved "https://registry.npmjs.org/react/-/react-17.0.2.tgz" integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== @@ -6632,6 +10386,45 @@ react@^17.0.2: loose-envify "^1.1.0" object-assign "^4.1.1" +"react@^0.14 || ^15.0.0 || ^16.0.0-alpha", react@^16.0.0-0, react@^16.14.0, react@^16.8.4, "react@0.13.x || 0.14.x || ^15.0.0-0 || ^16.0.0-0": + version "16.14.0" + resolved "https://registry.npmjs.org/react/-/react-16.14.0.tgz" + integrity sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.2" + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz" + integrity sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A== + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz" + integrity sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ== + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +readable-stream@^2.0.0: + version "2.3.8" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + readable-stream@^2.0.1: version "2.3.8" resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" @@ -6645,6 +10438,45 @@ readable-stream@^2.0.1: string_decoder "~1.1.1" util-deprecate "~1.0.1" +readable-stream@^2.0.2: + version "2.3.8" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^2.2.2: + version "2.3.8" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^2.3.0, readable-stream@^2.3.5: + version "2.3.8" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0: version "3.6.2" resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" @@ -6654,6 +10486,19 @@ readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" +readable-stream@~2.3.6: + version "2.3.8" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + readdirp@~3.6.0: version "3.6.0" resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" @@ -6680,6 +10525,26 @@ recursive-readdir@^2.2.2: dependencies: minimatch "^3.0.5" +recursive-readdir@2.2.2: + version "2.2.2" + resolved "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz" + integrity sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg== + dependencies: + minimatch "3.0.4" + +redent@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz" + integrity sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g== + dependencies: + indent-string "^2.1.0" + strip-indent "^1.0.1" + +reflect.ownkeys@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz" + integrity sha512-qOLsBKHCpSOFKK1NUOCGC5VyeufB6lEsFe92AL2bhIJsacZS1qdoOZSbPk3MYKuT2cFlRDnulKXuuElIrMjGUg== + regenerate-unicode-properties@^10.1.0: version "10.1.0" resolved "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz" @@ -6692,6 +10557,11 @@ regenerate@^1.4.2: resolved "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== +regenerator-runtime@^0.13.4: + version "0.13.11" + resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz" + integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== + regenerator-runtime@^0.14.0: version "0.14.0" resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz" @@ -6704,6 +10574,23 @@ regenerator-transform@^0.15.2: dependencies: "@babel/runtime" "^7.8.4" +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexp.prototype.flags@^1.5.1: + version "1.5.1" + resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz" + integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + set-function-name "^2.0.0" + regexpu-core@^5.3.1: version "5.3.2" resolved "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz" @@ -6807,6 +10694,22 @@ remark-squeeze-paragraphs@4.0.0: dependencies: mdast-squeeze-paragraphs "^4.0.0" +remarkable@^1.7.1: + version "1.7.4" + resolved "https://registry.npmjs.org/remarkable/-/remarkable-1.7.4.tgz" + integrity sha512-e6NKUXgX95whv7IgddywbeN/ItCkWbISmc2DiqHJb0wTrqZIexqdco5b8Z3XZoo/48IdNVKM9ZCvTPJ4F5uvhg== + dependencies: + argparse "^1.0.10" + autolinker "~0.28.0" + +remarkable@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/remarkable/-/remarkable-2.0.1.tgz" + integrity sha512-YJyMcOH5lrR+kZdmB0aJJ4+93bEojRZ1HGDn9Eagu6ibg7aVZhc3OWbbShRid+Q5eAfsEqWxpe+g5W5nYNfNiA== + dependencies: + argparse "^1.0.10" + autolinker "^3.11.0" + renderkid@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz" @@ -6818,11 +10721,54 @@ renderkid@^3.0.0: lodash "^4.17.21" strip-ansi "^6.0.1" -repeat-string@^1.0.0, repeat-string@^1.5.4: +repeat-element@^1.1.2: + version "1.1.4" + resolved "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz" + integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== + +repeat-string@^1.0.0, repeat-string@^1.5.2, repeat-string@^1.5.4, repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz" integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz" + integrity sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A== + dependencies: + is-finite "^1.0.0" + +replace-ext@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz" + integrity sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw== + +request@^2.53.0, request@^2.88.0: + version "2.88.2" + resolved "https://registry.npmjs.org/request/-/request-2.88.2.tgz" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + require-from-string@^2.0.2: version "2.0.2" resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" @@ -6838,6 +10784,11 @@ requires-port@^1.0.0: resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz" + integrity sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw== + resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" @@ -6848,7 +10799,12 @@ resolve-pathname@^3.0.0: resolved "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz" integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== -resolve@^1.1.6, resolve@^1.14.2, resolve@^1.3.2: +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz" + integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg== + +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.3.2: version "1.22.4" resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz" integrity sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg== @@ -6857,13 +10813,18 @@ resolve@^1.1.6, resolve@^1.14.2, resolve@^1.3.2: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -responselike@^1.0.2: +responselike@^1.0.2, responselike@1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz" integrity sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ== dependencies: lowercase-keys "^1.0.0" +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + retry@^0.13.1: version "0.13.1" resolved "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz" @@ -6874,6 +10835,23 @@ reusify@^1.0.4: resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== +rgb-regex@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz" + integrity sha512-gDK5mkALDFER2YLqH6imYvK6g02gpNGM4ILDZ472EwWfXZnC2ZEpoB2ECXTyOVUKuk/bPJZMzwQPBYICzP+D3w== + +rgba-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz" + integrity sha512-zgn5OjNQXLUTdq8m17KdaicF6w89TZs8ZU8y0AYENIU6wG8GG6LLm0yLSiPY8DmaYmHdgRW8rnApjoT0fQRfMg== + +rimraf@^2.5.4: + version "2.7.1" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + rimraf@^3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" @@ -6881,6 +10859,21 @@ rimraf@^3.0.2: dependencies: glob "^7.1.3" +rimraf@2: + version "2.7.1" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rst-selector-parser@^2.2.3: + version "2.2.3" + resolved "https://registry.npmjs.org/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz" + integrity sha512-nDG1rZeP6oFTLN6yNDV/uiAvs1+FS/KlrEwh7+y7dpuApDBy6bI2HTBcc0/V8lv9OTqfyD34eF7au2pm8aBbhA== + dependencies: + lodash.flattendeep "^4.4.0" + nearley "^2.7.10" + rtl-detect@^1.0.4: version "1.0.4" resolved "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.0.4.tgz" @@ -6910,26 +10903,70 @@ rxjs@^7.5.4: dependencies: tslib "^2.1.0" -safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +safe-array-concat@^1.0.0, safe-array-concat@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz" + integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + has-symbols "^1.0.3" + isarray "^2.0.5" -safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@~5.2.0: +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@>=5.1.0, safe-buffer@~5.2.0, safe-buffer@5.2.1: version "5.2.1" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -"safer-buffer@>= 2.1.2 < 3": +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-json-parse@~1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/safe-json-parse/-/safe-json-parse-1.0.1.tgz" + integrity sha512-o0JmTu17WGUaUOHa1l0FPGXKBfijbxK6qoHzlkihsDXxzBHvJcA7zgviKR92Xs841rX9pK16unfphLq0/KqX7A== + +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz" + integrity sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg== + dependencies: + ret "~0.1.10" + +safer-buffer@^2.0.2, safer-buffer@^2.1.0, "safer-buffer@>= 2.1.2 < 3", safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sax@^1.2.4: +sax@^1.2.4, sax@~1.2.4: version "1.2.4" resolved "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== +scheduler@^0.19.1: + version "0.19.1" + resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz" + integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + scheduler@^0.20.2: version "0.20.2" resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz" @@ -6938,15 +10975,6 @@ scheduler@^0.20.2: loose-envify "^1.1.0" object-assign "^4.1.1" -schema-utils@2.7.0: - version "2.7.0" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz" - integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== - dependencies: - "@types/json-schema" "^7.0.4" - ajv "^6.12.2" - ajv-keywords "^3.4.1" - schema-utils@^2.6.5: version "2.7.1" resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz" @@ -6956,7 +10984,25 @@ schema-utils@^2.6.5: ajv "^6.12.4" ajv-keywords "^3.5.2" -schema-utils@^3.0.0, schema-utils@^3.1.1, schema-utils@^3.2.0: +schema-utils@^3.0.0: + version "3.3.0" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz" + integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +schema-utils@^3.1.1: + version "3.3.0" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz" + integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +schema-utils@^3.2.0: version "3.3.0" resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz" integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== @@ -6975,6 +11021,20 @@ schema-utils@^4.0.0: ajv-formats "^2.1.1" ajv-keywords "^5.1.0" +schema-utils@2.7.0: + version "2.7.0" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz" + integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== + dependencies: + "@types/json-schema" "^7.0.4" + ajv "^6.12.2" + ajv-keywords "^3.4.1" + +"search-insights@>= 1 < 3": + version "2.7.0" + resolved "https://registry.npmjs.org/search-insights/-/search-insights-2.7.0.tgz" + integrity sha512-GLbVaGgzYEKMvuJbHRhLi1qoBFnjXZGZ6l4LxOYPCp4lI2jDRB3jPU9/XNhMwv6kvnA9slTreq6pvK+b3o3aqg== + section-matter@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz" @@ -6983,6 +11043,13 @@ section-matter@^1.0.0: extend-shallow "^2.0.1" kind-of "^6.0.0" +seek-bzip@^1.0.5: + version "1.0.6" + resolved "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz" + integrity sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ== + dependencies: + commander "^2.8.1" + select-hose@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz" @@ -7002,12 +11069,54 @@ semver-diff@^3.1.1: dependencies: semver "^6.3.0" +semver-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz" + integrity sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw== + +semver-truncate@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/semver-truncate/-/semver-truncate-1.1.2.tgz" + integrity sha512-V1fGg9i4CL3qesB6U0L6XAm4xOJiHmt4QAacazumuasc03BvtFGIMCduv01JWQ69Nv+JST9TqhSCiJoxoY031w== + dependencies: + semver "^5.3.0" + +semver@^5.3.0: + version "5.7.2" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + semver@^5.4.1: version "5.7.2" resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== -semver@^6.0.0, semver@^6.2.0, semver@^6.3.0, semver@^6.3.1: +semver@^5.5.0: + version "5.7.2" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + +semver@^5.6.0, semver@^5.7.0, semver@^5.7.1: + version "5.7.2" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + +semver@^6.0.0: + version "6.3.1" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^6.2.0: + version "6.3.1" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^6.3.0: + version "6.3.1" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^6.3.1: version "6.3.1" resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== @@ -7019,6 +11128,11 @@ semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semve dependencies: lru-cache "^6.0.0" +"semver@2 || 3 || 4 || 5": + version "5.7.2" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + send@0.18.0: version "0.18.0" resolved "https://registry.npmjs.org/send/-/send-0.18.0.tgz" @@ -7082,7 +11196,43 @@ serve-static@1.15.0: parseurl "~1.3.3" send "0.18.0" -setimmediate@^1.0.5: +set-function-length@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz" + integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== + dependencies: + define-data-property "^1.1.1" + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + +set-function-name@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz" + integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== + dependencies: + define-data-property "^1.0.1" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.0" + +set-getter@^0.1.0: + version "0.1.1" + resolved "https://registry.npmjs.org/set-getter/-/set-getter-0.1.1.tgz" + integrity sha512-9sVWOy+gthr+0G9DzqqLaYNA7+5OKkSmcqjL9cBpDEaZrr3ShQlyX2cZ/O/ozE41oxn/Tt0LGEM/w4Rub3A3gw== + dependencies: + to-object-path "^0.3.0" + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@^1.0.5, setimmediate@~1.0.4: version "1.0.5" resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== @@ -7109,6 +11259,20 @@ shallowequal@^1.1.0: resolved "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz" integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== +sharp@*, sharp@^0.32.6: + version "0.32.6" + resolved "https://registry.npmjs.org/sharp/-/sharp-0.32.6.tgz" + integrity sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w== + dependencies: + color "^4.2.3" + detect-libc "^2.0.2" + node-addon-api "^6.1.0" + prebuild-install "^7.1.1" + semver "^7.5.4" + simple-get "^4.0.1" + tar-fs "^3.0.4" + tunnel-agent "^0.6.0" + sharp@^0.30.7: version "0.30.7" resolved "https://registry.npmjs.org/sharp/-/sharp-0.30.7.tgz" @@ -7123,19 +11287,12 @@ sharp@^0.30.7: tar-fs "^2.1.1" tunnel-agent "^0.6.0" -sharp@^0.32.6: - version "0.32.6" - resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.32.6.tgz#6ad30c0b7cd910df65d5f355f774aa4fce45732a" - integrity sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w== +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz" + integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== dependencies: - color "^4.2.3" - detect-libc "^2.0.2" - node-addon-api "^6.1.0" - prebuild-install "^7.1.1" - semver "^7.5.4" - simple-get "^4.0.1" - tar-fs "^3.0.4" - tunnel-agent "^0.6.0" + shebang-regex "^1.0.0" shebang-command@^2.0.0: version "2.0.0" @@ -7144,6 +11301,11 @@ shebang-command@^2.0.0: dependencies: shebang-regex "^3.0.0" +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz" + integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== + shebang-regex@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" @@ -7154,7 +11316,12 @@ shell-quote@^1.7.3: resolved "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz" integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== -shelljs@^0.8.5: +shell-quote@1.7.2: + version "1.7.2" + resolved "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz" + integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== + +shelljs@^0.8.4, shelljs@^0.8.5: version "0.8.5" resolved "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz" integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== @@ -7212,6 +11379,16 @@ sisteransi@^1.0.5: resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== +sitemap@^3.2.2: + version "3.2.2" + resolved "https://registry.npmjs.org/sitemap/-/sitemap-3.2.2.tgz" + integrity sha512-TModL/WU4m2q/mQcrDgNANn0P4LwprM9MMvG4hu5zP4c6IIKs2YLTu6nXXnNr8ODW/WFtxKggiJ1EGn2W0GNmg== + dependencies: + lodash.chunk "^4.2.0" + lodash.padstart "^4.6.1" + whatwg-url "^7.0.0" + xmlbuilder "^13.0.0" + sitemap@^7.1.1: version "7.1.1" resolved "https://registry.npmjs.org/sitemap/-/sitemap-7.1.1.tgz" @@ -7222,6 +11399,11 @@ sitemap@^7.1.1: arg "^5.0.0" sax "^1.2.4" +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz" + integrity sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg== + slash@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" @@ -7232,6 +11414,36 @@ slash@^4.0.0: resolved "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz" integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + sockjs@^0.3.24: version "0.3.24" resolved "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz" @@ -7246,12 +11458,44 @@ sort-css-media-queries@2.1.0: resolved "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.1.0.tgz" integrity sha512-IeWvo8NkNiY2vVYdPa27MCQiR0MN0M80johAYFVxWWXQ44KU84WNxjslwBHmc/7ZL2ccwkM7/e6S5aiKZXm7jA== +sort-keys-length@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz" + integrity sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw== + dependencies: + sort-keys "^1.0.0" + +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz" + integrity sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg== + dependencies: + is-plain-obj "^1.0.0" + +sort-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz" + integrity sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg== + dependencies: + is-plain-obj "^1.0.0" + source-map-js@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== -source-map-support@~0.5.20: +source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@^0.5.16, source-map-support@~0.5.20: version "0.5.21" resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== @@ -7259,11 +11503,21 @@ source-map-support@~0.5.20: buffer-from "^1.0.0" source-map "^0.6.0" +source-map-url@^0.4.0: + version "0.4.1" + resolved "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz" + integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== + source-map@^0.5.0: version "0.5.7" resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== +source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" + integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== + source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0: version "0.6.1" resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" @@ -7274,6 +11528,32 @@ space-separated-tokens@^1.0.0: resolved "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz" integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA== +spdx-correct@^3.0.0: + version "3.2.0" + resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz" + integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.16" + resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz" + integrity sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw== + spdy-transport@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz" @@ -7297,11 +11577,42 @@ spdy@^4.0.2: select-hose "^2.0.0" spdy-transport "^3.0.0" +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== +squeak@^1.0.0: + version "1.3.0" + resolved "https://registry.npmjs.org/squeak/-/squeak-1.3.0.tgz" + integrity sha512-YQL1ulInM+ev8nXX7vfXsCsDh6IqXlrremc1hzi77776BtpWgYJUMto3UM05GSAaGzJgWekszjoKDrVNB5XG+A== + dependencies: + chalk "^1.0.0" + console-stream "^0.1.1" + lpad-align "^1.0.1" + +sshpk@^1.7.0: + version "1.18.0" + resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz" + integrity sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + stable@^0.1.8: version "0.1.8" resolved "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz" @@ -7312,16 +11623,24 @@ state-toggle@^1.0.0: resolved "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz" integrity sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ== -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz" + integrity sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g== + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" "statuses@>= 1.4.0 < 2": version "1.5.0" resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + std-env@^3.0.1: version "3.3.3" resolved "https://registry.npmjs.org/std-env/-/std-env-3.3.3.tgz" @@ -7335,7 +11654,63 @@ streamx@^2.15.0: fast-fifo "^1.1.0" queue-tick "^1.0.1" -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz" + integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ== + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +string_decoder@0.10: + version "0.10.31" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== + +string-template@~0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz" + integrity sha512-Yptehjogou2xm4UJbxJ4CxgZx12HBfeystp0y3x7s4Dj32ltVVG1Gg8YhKjHZkHicuKpZX/ffilA8505VbUbpw== + +"string-width@^1.0.2 || 2 || 3 || 4": + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.2: + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^4.2.0: + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^4.2.3: version "4.2.3" resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -7353,19 +11728,32 @@ string-width@^5.0.1: emoji-regex "^9.2.2" strip-ansi "^7.0.1" -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== +string.prototype.trim@^1.2.1, string.prototype.trim@^1.2.8: + version "1.2.8" + resolved "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz" + integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== dependencies: - safe-buffer "~5.2.0" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== +string.prototype.trimend@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz" + integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== dependencies: - safe-buffer "~5.1.0" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +string.prototype.trimstart@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz" + integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" stringify-object@^3.3.0: version "3.3.0" @@ -7376,6 +11764,13 @@ stringify-object@^3.3.0: is-obj "^1.0.1" is-regexp "^1.0.0" +strip-ansi@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" + integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== + dependencies: + ansi-regex "^2.0.0" + strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" @@ -7390,16 +11785,54 @@ strip-ansi@^7.0.1: dependencies: ansi-regex "^6.0.1" +strip-ansi@6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + strip-bom-string@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz" integrity sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g== +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz" + integrity sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g== + dependencies: + is-utf8 "^0.2.0" + +strip-color@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/strip-color/-/strip-color-0.1.0.tgz" + integrity sha512-p9LsUieSjWNNAxVCXLeilaDlmuUOrDS5/dF9znM1nZc7EGX5+zEFC0bEevsNIaldjlks+2jns5Siz6F9iK6jwA== + +strip-dirs@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz" + integrity sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g== + dependencies: + is-natural-number "^4.0.1" + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz" + integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== + strip-final-newline@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== +strip-indent@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz" + integrity sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA== + dependencies: + get-stdin "^4.0.1" + strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" @@ -7410,13 +11843,34 @@ strip-json-comments@~2.0.1: resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== -style-to-object@0.3.0, style-to-object@^0.3.0: +strip-outer@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz" + integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg== + dependencies: + escape-string-regexp "^1.0.2" + +strnum@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz" + integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA== + +style-to-object@^0.3.0, style-to-object@0.3.0: version "0.3.0" resolved "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz" integrity sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA== dependencies: inline-style-parser "0.1.1" +stylehacks@^4.0.0: + version "4.0.3" + resolved "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz" + integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g== + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + stylehacks@^5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz" @@ -7425,6 +11879,11 @@ stylehacks@^5.1.1: browserslist "^4.21.4" postcss-selector-parser "^6.0.4" +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz" + integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g== + supports-color@^5.3.0: version "5.5.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" @@ -7456,6 +11915,44 @@ svg-parser@^2.0.4: resolved "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz" integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== +svgo@^1.0.0: + version "1.3.2" + resolved "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz" + integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== + dependencies: + chalk "^2.4.1" + coa "^2.0.2" + css-select "^2.0.0" + css-select-base-adapter "^0.1.1" + css-tree "1.0.0-alpha.37" + csso "^4.0.2" + js-yaml "^3.13.1" + mkdirp "~0.5.1" + object.values "^1.1.0" + sax "~1.2.4" + stable "^0.1.8" + unquote "~1.1.1" + util.promisify "~1.0.0" + +svgo@^1.3.2: + version "1.3.2" + resolved "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz" + integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== + dependencies: + chalk "^2.4.1" + coa "^2.0.2" + css-select "^2.0.0" + css-select-base-adapter "^0.1.1" + css-tree "1.0.0-alpha.37" + csso "^4.0.2" + js-yaml "^3.13.1" + mkdirp "~0.5.1" + object.values "^1.1.0" + sax "~1.2.4" + stable "^0.1.8" + unquote "~1.1.1" + util.promisify "~1.0.0" + svgo@^2.7.0, svgo@^2.8.0: version "2.8.0" resolved "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz" @@ -7498,6 +11995,19 @@ tar-fs@^3.0.4: pump "^3.0.0" tar-stream "^3.1.5" +tar-stream@^1.5.2: + version "1.6.2" + resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz" + integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A== + dependencies: + bl "^1.0.0" + buffer-alloc "^1.2.0" + end-of-stream "^1.0.0" + fs-constants "^1.0.0" + readable-stream "^2.3.0" + to-buffer "^1.1.1" + xtend "^4.0.0" + tar-stream@^2.1.4: version "2.2.0" resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz" @@ -7518,6 +12028,27 @@ tar-stream@^3.1.5: fast-fifo "^1.2.0" streamx "^2.15.0" +tcp-port-used@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/tcp-port-used/-/tcp-port-used-1.0.2.tgz" + integrity sha512-l7ar8lLUD3XS1V2lfoJlCBaeoaWo/2xfYt81hM7VlvR4RrMVFqfmzfhLVk40hAb368uitje5gPtBRL1m/DGvLA== + dependencies: + debug "4.3.1" + is2 "^2.0.6" + +temp-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz" + integrity sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ== + +tempfile@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/tempfile/-/tempfile-2.0.0.tgz" + integrity sha512-ZOn6nJUgvgC09+doCEF3oB+r3ag7kUvlsXEGX069QRD60p+P3uP7XG9N2/at+EyIRGSN//ZY3LyEotA1YpmjuA== + dependencies: + temp-dir "^1.0.0" + uuid "^3.0.1" + terser-webpack-plugin@^5.3.3, terser-webpack-plugin@^5.3.7: version "5.3.9" resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz" @@ -7539,36 +12070,91 @@ terser@^5.10.0, terser@^5.16.8: commander "^2.20.0" source-map-support "~0.5.20" -text-table@^0.2.0: +text-table@^0.2.0, text-table@0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== +through@^2.3.8: + version "2.3.8" + resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + +through2@^2.0.0: + version "2.0.5" + resolved "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + thunky@^1.0.2: version "1.1.0" resolved "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz" integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== +timed-out@^4.0.0, timed-out@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz" + integrity sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA== + +timsort@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz" + integrity sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A== + tiny-invariant@^1.0.2: version "1.3.1" resolved "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz" integrity sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw== +tiny-lr@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/tiny-lr/-/tiny-lr-1.1.1.tgz" + integrity sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA== + dependencies: + body "^5.1.0" + debug "^3.1.0" + faye-websocket "~0.10.0" + livereload-js "^2.3.0" + object-assign "^4.1.0" + qs "^6.4.0" + tiny-warning@^1.0.0: version "1.0.3" resolved "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz" integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== +to-buffer@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz" + integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg== + to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz" + integrity sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg== + dependencies: + kind-of "^3.0.2" + to-readable-stream@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz" integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz" + integrity sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg== + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" @@ -7576,6 +12162,16 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + to-vfile@^6.1.0: version "6.1.0" resolved "https://registry.npmjs.org/to-vfile/-/to-vfile-6.1.0.tgz" @@ -7589,16 +12185,62 @@ toidentifier@1.0.1: resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== +toml@^2.3.2: + version "2.3.6" + resolved "https://registry.npmjs.org/toml/-/toml-2.3.6.tgz" + integrity sha512-gVweAectJU3ebq//Ferr2JUY4WKSDe5N+z0FvjDncLGyHmIDoxgY/2Ie4qfEIDm4IS7OA6Rmdm7pdEEdMcV/xQ== + totalist@^1.0.0: version "1.1.0" resolved "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz" integrity sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g== +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tr46@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz" + integrity sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA== + dependencies: + punycode "^2.1.0" + tr46@~0.0.3: version "0.0.3" resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== +"traverse@>=0.3.0 <0.4": + version "0.3.9" + resolved "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz" + integrity sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ== + +tree-node-cli@^1.2.5: + version "1.6.0" + resolved "https://registry.npmjs.org/tree-node-cli/-/tree-node-cli-1.6.0.tgz" + integrity sha512-M8um5Lbl76rWU5aC8oOeEhruiCM29lFCKnwpxrwMjpRicHXJx+bb9Cak11G3zYLrMb6Glsrhnn90rHIzDJrjvg== + dependencies: + commander "^5.0.0" + fast-folder-size "1.6.1" + pretty-bytes "^5.6.0" + +trim-newlines@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz" + integrity sha512-Nm4cF79FhSTzrLKGDMi3I4utBtFv8qKy4sq1enftf2gMdpqI8oVQTAfySkTz5r49giVzDj88SVZXP4CeYQwjaw== + +trim-repeated@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz" + integrity sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg== + dependencies: + escape-string-regexp "^1.0.2" + trim-trailing-lines@^1.0.0: version "1.1.4" resolved "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz" @@ -7614,7 +12256,15 @@ trough@^1.0.0: resolved "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz" integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== -tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0: +truncate-html@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/truncate-html/-/truncate-html-1.0.4.tgz" + integrity sha512-FpDAlPzpJ3jlZiNEahRs584FS3jOSQafgj4cC9DmAYPct6uMZDLY625+eErRd43G35vGDrNq3i7b4aYUQ/Bxqw== + dependencies: + "@types/cheerio" "^0.22.8" + cheerio "0.22.0" + +tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0: version "2.6.1" resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz" integrity sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig== @@ -7626,6 +12276,11 @@ tunnel-agent@^0.6.0: dependencies: safe-buffer "^5.0.1" +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" + integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== + type-fest@^0.20.2: version "0.20.2" resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" @@ -7644,6 +12299,45 @@ type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" +typed-array-buffer@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz" + integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + is-typed-array "^1.1.10" + +typed-array-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz" + integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz" + integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-length@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz" + integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + is-typed-array "^1.1.9" + typedarray-to-buffer@^3.1.5: version "3.1.5" resolved "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz" @@ -7651,11 +12345,39 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" + integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== + +"typescript@>= 2.7": + version "5.1.6" + resolved "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz" + integrity sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA== + ua-parser-js@^1.0.35: version "1.0.35" resolved "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.35.tgz" integrity sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA== +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +unbzip2-stream@^1.0.9: + version "1.4.3" + resolved "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz" + integrity sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg== + dependencies: + buffer "^5.2.1" + through "^2.3.8" + unherit@^1.0.4: version "1.1.3" resolved "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz" @@ -7687,18 +12409,6 @@ unicode-property-aliases-ecmascript@^2.0.0: resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz" integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== -unified@9.2.0: - version "9.2.0" - resolved "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz" - integrity sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg== - dependencies: - bail "^1.0.0" - extend "^3.0.0" - is-buffer "^2.0.0" - is-plain-obj "^2.0.0" - trough "^1.0.0" - vfile "^4.0.0" - unified@^9.0.0, unified@^9.2.2: version "9.2.2" resolved "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz" @@ -7711,6 +12421,38 @@ unified@^9.0.0, unified@^9.2.2: trough "^1.0.0" vfile "^4.0.0" +unified@9.2.0: + version "9.2.0" + resolved "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz" + integrity sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg== + dependencies: + bail "^1.0.0" + extend "^3.0.0" + is-buffer "^2.0.0" + is-plain-obj "^2.0.0" + trough "^1.0.0" + vfile "^4.0.0" + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz" + integrity sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA== + +uniqs@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz" + integrity sha512-mZdDpf3vBV5Efh29kMw5tXoup/buMgxLzOt/XKFKcVmi+15ManNQWr6HfZ2aiZTYlYixbdNJ0KFmIZIv52tHSQ== + unique-string@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz" @@ -7718,7 +12460,7 @@ unique-string@^2.0.0: dependencies: crypto-random-string "^2.0.0" -unist-builder@2.0.3, unist-builder@^2.0.0: +unist-builder@^2.0.0, unist-builder@2.0.3: version "2.0.3" resolved "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz" integrity sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw== @@ -7774,7 +12516,7 @@ unist-util-visit-parents@^3.0.0: "@types/unist" "^2.0.0" unist-util-is "^4.0.0" -unist-util-visit@2.0.3, unist-util-visit@^2.0.0, unist-util-visit@^2.0.3: +unist-util-visit@^2.0.0, unist-util-visit@^2.0.3, unist-util-visit@2.0.3: version "2.0.3" resolved "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz" integrity sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q== @@ -7788,11 +12530,40 @@ universalify@^2.0.0: resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== -unpipe@1.0.0, unpipe@~1.0.0: +unpipe@~1.0.0, unpipe@1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== +unquote@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz" + integrity sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg== + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz" + integrity sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ== + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +unzipper@^0.10.11: + version "0.10.14" + resolved "https://registry.npmjs.org/unzipper/-/unzipper-0.10.14.tgz" + integrity sha512-ti4wZj+0bQTiX2KmKWuwj7lhV+2n//uXEotUmGuQqrbVZSEGFMbI68+c6JCQ8aAmUWYvtHEz2A8K6wXvueR/6g== + dependencies: + big-integer "^1.6.17" + binary "~0.3.0" + bluebird "~3.4.1" + buffer-indexof-polyfill "~1.0.0" + duplexer2 "~0.1.4" + fstream "^1.0.12" + graceful-fs "^4.2.2" + listenercount "~1.0.1" + readable-stream "~2.3.6" + setimmediate "~1.0.4" + update-browserslist-db@^1.0.11: version "1.0.11" resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz" @@ -7828,6 +12599,11 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz" + integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg== + url-loader@^4.1.1: version "4.1.1" resolved "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz" @@ -7837,6 +12613,13 @@ url-loader@^4.1.1: mime-types "^2.1.27" schema-utils "^3.0.0" +url-parse-lax@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz" + integrity sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA== + dependencies: + prepend-http "^1.0.1" + url-parse-lax@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz" @@ -7844,6 +12627,11 @@ url-parse-lax@^3.0.0: dependencies: prepend-http "^2.0.0" +url-to-options@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz" + integrity sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A== + use-composed-ref@^1.3.0: version "1.3.0" resolved "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz" @@ -7866,11 +12654,26 @@ use-sync-external-store@^1.2.0: resolved "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz" integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== +use@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/use/-/use-3.1.1.tgz" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== +util.promisify@~1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz" + integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.2" + has-symbols "^1.0.1" + object.getownpropertydescriptors "^2.1.0" + utila@~0.4: version "0.4.0" resolved "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz" @@ -7886,6 +12689,16 @@ utils-merge@1.0.1: resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== +uuid@^3.0.1: + version "3.4.0" + resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + uuid@^8.3.2: version "8.3.2" resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" @@ -7896,6 +12709,14 @@ uuid@^9.0.1: resolved "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz" integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + value-equal@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz" @@ -7906,6 +12727,20 @@ vary@~1.1.2: resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== +vendors@^1.0.0: + version "1.0.4" + resolved "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz" + integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz" + integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + vfile-location@^3.0.0, vfile-location@^3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz" @@ -7965,6 +12800,11 @@ webidl-conversions@^3.0.0: resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== +webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz" + integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== + webpack-bundle-analyzer@^4.5.0: version "4.9.0" resolved "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.9.0.tgz" @@ -8041,7 +12881,7 @@ webpack-sources@^3.2.2, webpack-sources@^3.2.3: resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz" integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== -webpack@^5.73.0: +"webpack@^4.0.0 || ^5.0.0", "webpack@^4.37.0 || ^5.0.0", webpack@^5.0.0, webpack@^5.1.0, webpack@^5.20.0, webpack@^5.73.0, "webpack@>= 4", webpack@>=2, "webpack@>=4.41.1 || 5.x", "webpack@3 || 4 || 5": version "5.88.2" resolved "https://registry.npmjs.org/webpack/-/webpack-5.88.2.tgz" integrity sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ== @@ -8081,7 +12921,7 @@ webpackbar@^5.0.2: pretty-time "^1.1.0" std-env "^3.0.1" -websocket-driver@>=0.5.1, websocket-driver@^0.7.4: +websocket-driver@^0.7.4, websocket-driver@>=0.5.1: version "0.7.4" resolved "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz" integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== @@ -8103,6 +12943,44 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" +whatwg-url@^7.0.0: + version "7.1.0" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz" + integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-typed-array@^1.1.11, which-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz" + integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.4" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + +which@^1.2.9: + version "1.3.1" + resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + which@^1.3.1: version "1.3.1" resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" @@ -8143,6 +13021,18 @@ wildcard@^2.0.0: resolved "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz" integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== +wordwrap@0.0.2: + version "0.0.2" + resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz" + integrity sha512-xSBsCeh+g+dinoBv3GAOWM4LcVVO68wLXRanibtBSdUvkGWQRGeE9P7IwU9EmDDi4jA6L44lz15CGMwdw9N5+Q== + +worker-rpc@^0.1.0: + version "0.1.1" + resolved "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz" + integrity sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg== + dependencies: + microevent.ts "~0.1.1" + wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" @@ -8198,11 +13088,21 @@ xml-js@^1.6.11: dependencies: sax "^1.2.4" -xtend@^4.0.0, xtend@^4.0.1: +xmlbuilder@^13.0.0: + version "13.0.2" + resolved "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-13.0.2.tgz" + integrity sha512-Eux0i2QdDYKbdbA6AM6xE4m6ZTZr4G4xF9kahI2ukSEMCzwce2eX9WlTI5J3s+NU7hpasFsr8hWIONae7LluAQ== + +xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: version "4.0.2" resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz" + integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A== + yallist@^3.0.2: version "3.1.1" resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" @@ -8218,6 +13118,29 @@ yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2: resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== +yamljs@^0.2.1: + version "0.2.10" + resolved "https://registry.npmjs.org/yamljs/-/yamljs-0.2.10.tgz" + integrity sha512-sbkbOosewjeRmJ23Hjee1RgTxn+xa7mt4sew3tfD0SdH0LTcswnZC9dhSNq4PIz15roQMzb84DjECyQo5DWIww== + dependencies: + argparse "^1.0.7" + glob "^7.0.5" + +yargs@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/yargs/-/yargs-2.3.0.tgz" + integrity sha512-w48USdbTdaVMcE3CnXsEtSY9zYSN7dTyVnLBgrJF2quA5rLwobC9zixxfexereLGFaxjxtR3oWdydC0qoayakw== + dependencies: + wordwrap "0.0.2" + +yauzl@^2.4.2: + version "2.10.0" + resolved "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz" + integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" + yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" diff --git a/litellm/proxy/_types.py b/litellm/proxy/_types.py index 930e8acd0..029430f09 100644 --- a/litellm/proxy/_types.py +++ b/litellm/proxy/_types.py @@ -1,4 +1,4 @@ -from pydantic import BaseModel, Extra +from pydantic import BaseModel, Extra, Field from typing import Optional, List, Union, Dict, Literal from datetime import datetime import uuid @@ -38,6 +38,10 @@ class ProxyChatCompletionRequest(BaseModel): class Config: extra='allow' # allow params not defined here, these fall in litellm.completion(**kwargs) +class ModelInfoDelete(BaseModel): + id: Optional[str] + + class ModelInfo(BaseModel): id: Optional[str] mode: Optional[Literal['embedding', 'chat', 'completion']] @@ -62,8 +66,6 @@ class ModelInfo(BaseModel): extra = Extra.allow # Allow extra fields protected_namespaces = () -class ModelInfoDelete(BaseModel): - id: Optional[str] class ModelParams(BaseModel): model_name: str @@ -95,4 +97,25 @@ class DeleteKeyRequest(BaseModel): class UserAPIKeyAuth(BaseModel): # the expected response object for user api key auth api_key: Optional[str] = None - user_id: Optional[str] = None \ No newline at end of file + user_id: Optional[str] = None + +class ConfigGeneralSettings(BaseModel): + """ + Documents all the fields supported by `general_settings` in config.yaml + """ + completion_model: Optional[str] = Field(None, description="proxy level default model for all chat completion calls") + use_azure_key_vault: Optional[bool] = Field(None, description="load keys from azure key vault") + master_key: Optional[str] = Field(None, description="require a key for all calls to proxy") + database_url: Optional[str] = Field(None, description="connect to a postgres db - needed for generating temporary keys + tracking spend / key") + otel: Optional[bool] = Field(None, description="[BETA] OpenTelemetry support - this might change, use with caution.") + custom_auth: Optional[str] = Field(None, description="override user_api_key_auth with your own auth script - https://docs.litellm.ai/docs/proxy/virtual_keys#custom-auth") + max_parallel_requests: Optional[int] = Field(None, description="maximum parallel requests for each api key") + infer_model_from_keys: Optional[bool] = Field(None, description="for `/models` endpoint, infers available model based on environment keys (e.g. OPENAI_API_KEY)") + +class ConfigYAML(BaseModel): + """ + Documents all the fields supported by the config.yaml + """ + model_list: Optional[List[ModelParams]] = Field(None, description="List of supported models on the server, with model-specific configs") + litellm_settings: Optional[dict] = Field(None, description="litellm Module settings. See __init__.py for all, example litellm.drop_params=True, litellm.set_verbose=True, litellm.api_base, litellm.cache") + general_settings: Optional[ConfigGeneralSettings] = None diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index abc954452..7e1c3403f 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -1297,6 +1297,27 @@ async def retrieve_server_log(request: Request): #### BASIC ENDPOINTS #### +@router.get("/config/yaml", tags=["config.yaml"]) +async def config_yaml_endpoint(config_info: ConfigYAML): + """ + This is a mock endpoint, to show what you can set in config.yaml details in the Swagger UI. + + Parameters: + + The config.yaml object has the following attributes: + - **model_list**: *Optional[List[ModelParams]]* - A list of supported models on the server, along with model-specific configurations. ModelParams includes "model_name" (name of the model), "litellm_params" (litellm-specific parameters for the model), and "model_info" (additional info about the model such as id, mode, cost per token, etc). + + - **litellm_settings**: *Optional[dict]*: Settings for the litellm module. You can specify multiple properties like "drop_params", "set_verbose", "api_base", "cache". + + - **general_settings**: *Optional[ConfigGeneralSettings]*: General settings for the server like "completion_model" (default model for chat completion calls), "use_azure_key_vault" (option to load keys from azure key vault), "master_key" (key required for all calls to proxy), and others. + + Please, refer to each class's description for a better understanding of the specific attributes within them. + + Note: This is a mock endpoint primarily meant for demonstration purposes, and does not actually provide or change any configurations. + """ + return {"hello": "world"} + + @router.get("/test") async def test_endpoint(request: Request): return {"route": request.url.path} From 2134285523aa709203ec4a18ff362bf4ae5fa400 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Thu, 7 Dec 2023 11:31:54 -0800 Subject: [PATCH 241/460] docs(quick_start.md): adding gunicorn worker script to docs --- docs/my-website/docs/proxy/quick_start.md | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/docs/my-website/docs/proxy/quick_start.md b/docs/my-website/docs/proxy/quick_start.md index f6775bf41..c4dcfe6ae 100644 --- a/docs/my-website/docs/proxy/quick_start.md +++ b/docs/my-website/docs/proxy/quick_start.md @@ -348,6 +348,21 @@ litellm --config your_config.yaml [**More Info**](./configs.md) +## Server Endpoints +- POST `/chat/completions` - chat completions endpoint to call 100+ LLMs +- POST `/completions` - completions endpoint +- POST `/embeddings` - embedding endpoint for Azure, OpenAI, Huggingface endpoints +- GET `/models` - available models on server +- POST `/key/generate` - generate a key to access the proxy + +## Gunicorn + Proxy + +Command: +```python +cmd = f"gunicorn litellm.proxy.proxy_server:app --workers {num_workers} --worker-class uvicorn.workers.UvicornWorker --bind {host}:{port}" +``` + +[**Code**](https://github.com/BerriAI/litellm/blob/077f6b1298101079b72396bdf04f8ca0cf737720/litellm/tests/test_proxy_gunicorn.py#L4) ## Quick Start Docker Image: Github Container Registry ### Pull the litellm ghcr docker image @@ -416,12 +431,6 @@ Run the command `docker-compose up` or `docker compose up` as per your docker in Your LiteLLM container should be running now on the defined port e.g. `8000`. -## Server Endpoints -- POST `/chat/completions` - chat completions endpoint to call 100+ LLMs -- POST `/completions` - completions endpoint -- POST `/embeddings` - embedding endpoint for Azure, OpenAI, Huggingface endpoints -- GET `/models` - available models on server -- POST `/key/generate` - generate a key to access the proxy ## Using with OpenAI compatible projects Set `base_url` to the LiteLLM Proxy server From db12ca4ecb60358d51139ae8454c2099d8f0f14d Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Thu, 7 Dec 2023 11:35:08 -0800 Subject: [PATCH 242/460] docs(bedrock.md): add cohere embeddings to bedrock docs --- docs/my-website/docs/embedding/supported_embedding.md | 2 ++ docs/my-website/docs/providers/bedrock.md | 2 ++ 2 files changed, 4 insertions(+) diff --git a/docs/my-website/docs/embedding/supported_embedding.md b/docs/my-website/docs/embedding/supported_embedding.md index 3c13c5732..d860e0074 100644 --- a/docs/my-website/docs/embedding/supported_embedding.md +++ b/docs/my-website/docs/embedding/supported_embedding.md @@ -142,6 +142,8 @@ print(response) | Model Name | Function Call | |----------------------|---------------------------------------------| | Titan Embeddings - G1 | `embedding(model="amazon.titan-embed-text-v1", input=input)` | +| Cohere Embeddings - English | `embedding(model="cohere.embed-english-v3", input=input)` | +| Cohere Embeddings - Multilingual | `embedding(model="cohere.embed-multilingual-v3", input=input)` | ## Cohere Embedding Models diff --git a/docs/my-website/docs/providers/bedrock.md b/docs/my-website/docs/providers/bedrock.md index 2b2934c4e..b13f1ba9e 100644 --- a/docs/my-website/docs/providers/bedrock.md +++ b/docs/my-website/docs/providers/bedrock.md @@ -174,3 +174,5 @@ print(response) | Model Name | Function Call | |----------------------|---------------------------------------------| | Titan Embeddings - G1 | `embedding(model="amazon.titan-embed-text-v1", input=input)` | +| Cohere Embeddings - English | `embedding(model="cohere.embed-english-v3", input=input)` | +| Cohere Embeddings - Multilingual | `embedding(model="cohere.embed-multilingual-v3", input=input)` | From 19f1035f5a89d62b99438536dea95eaf0274c81c Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Thu, 7 Dec 2023 11:36:19 -0800 Subject: [PATCH 243/460] (ci/cd) vertex ai testing --- .../tests/test_amazing_vertex_completion.py | 37 ++++++++++--------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/litellm/tests/test_amazing_vertex_completion.py b/litellm/tests/test_amazing_vertex_completion.py index c87438489..6bf19e1e1 100644 --- a/litellm/tests/test_amazing_vertex_completion.py +++ b/litellm/tests/test_amazing_vertex_completion.py @@ -51,16 +51,9 @@ def load_vertex_ai_credentials(): private_key_id = os.environ.get("VERTEX_AI_PRIVATE_KEY_ID", "") private_key = os.environ.get("VERTEX_AI_PRIVATE_KEY", "") private_key = private_key.replace("\\n", "\n") - - # from infisical import InfisicalClient - # client = InfisicalClient(token=os.getenv("INFISICAL_TOKEN")) - # private_key = (client.get_secret(secret_name="VERTEX_AI_PRIVATE_KEY", environment="prod").secret_value) - # private_key = private_key.replace("\\n", "\n") - service_account_key_data["private_key_id"] = private_key_id service_account_key_data["private_key"] = private_key - # Create a temporary file with tempfile.NamedTemporaryFile(mode='w+', delete=False) as temp_file: # Write the updated content to the temporary file @@ -72,11 +65,13 @@ def load_vertex_ai_credentials(): def test_vertex_ai(): + import random load_vertex_ai_credentials() test_models = ["codechat-bison"] + litellm.vertex_chat_models + litellm.vertex_code_chat_models + litellm.vertex_text_models + litellm.vertex_code_text_models - # test_models = ["chat-bison"] - litellm.set_verbose=True + litellm.set_verbose=False + + test_models = random.sample(test_models, 4) for model in test_models: try: if model in ["code-gecko@001", "code-gecko@latest", "code-bison@001"]: @@ -84,29 +79,37 @@ def test_vertex_ai(): continue print("making request", model) response = completion(model=model, messages=[{'role': 'user', 'content': 'hi'}]) + print("\nModel Response", response) print(response) - - print(response.usage.completion_tokens) - print(response['usage']['completion_tokens']) assert type(response.choices[0].message.content) == str + assert len(response.choices[0].message.content) > 1 except Exception as e: pytest.fail(f"Error occurred: {e}") -test_vertex_ai() +# test_vertex_ai() def test_vertex_ai_stream(): - litellm.set_verbose=True + load_vertex_ai_credentials() + litellm.set_verbose=False + import random - test_models = litellm.vertex_chat_models + litellm.vertex_code_chat_models + litellm.vertex_text_models + litellm.vertex_code_text_models + test_models = ["codechat-bison"] + litellm.vertex_chat_models + litellm.vertex_code_chat_models + litellm.vertex_text_models + litellm.vertex_code_text_models + test_models = random.sample(test_models, 4) for model in test_models: try: if model in ["code-gecko@001", "code-gecko@latest", "code-bison@001"]: # our account does not have access to this model continue print("making request", model) - response = completion(model=model, messages=[{"role": "user", "content": "write 100 line code code for saying hi"}], stream=True) + response = completion(model=model, messages=[{"role": "user", "content": "write 10 line code code for saying hi"}], stream=True) + completed_str = "" for chunk in response: print(chunk) + content = chunk.choices[0].delta.content or "" + print("\n content", content) + completed_str += content + assert type(content) == str # pass + assert len(completed_str) > 4 except Exception as e: pytest.fail(f"Error occurred: {e}") -test_vertex_ai_stream() +# test_vertex_ai_stream() From 7585b58d2d41e3b193993dcc16a151802cf44d06 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Thu, 7 Dec 2023 11:42:44 -0800 Subject: [PATCH 244/460] docs: sagemaker embedding model added to docs --- .../docs/providers/aws_sagemaker.md | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/docs/my-website/docs/providers/aws_sagemaker.md b/docs/my-website/docs/providers/aws_sagemaker.md index 606268ad1..328981c70 100644 --- a/docs/my-website/docs/providers/aws_sagemaker.md +++ b/docs/my-website/docs/providers/aws_sagemaker.md @@ -42,7 +42,7 @@ response = completion( ) ``` -### Specifying HF Model Name +### Applying Prompt Templates To apply the correct prompt template for your sagemaker deployment, pass in it's hf model name as well. ```python @@ -62,6 +62,7 @@ response = completion( ) ``` +You can also pass in your own [custom prompt template](../completion/prompt_formatting.md#format-prompt-yourself) ### Usage - Streaming Sagemaker currently does not support streaming - LiteLLM fakes streaming by returning chunks of the response string @@ -85,14 +86,32 @@ for chunk in response: print(chunk) ``` -### AWS Sagemaker Models +### Completion Models Here's an example of using a sagemaker model with LiteLLM | Model Name | Function Call | |-------------------------------|-------------------------------------------------------------------------------------------| +| Your Custom Huggingface Model | `completion(model='sagemaker/', messages=messages)` | `os.environ['AWS_ACCESS_KEY_ID']`, `os.environ['AWS_SECRET_ACCESS_KEY']`, `os.environ['AWS_REGION_NAME']` | Meta Llama 2 7B | `completion(model='sagemaker/jumpstart-dft-meta-textgeneration-llama-2-7b', messages=messages)` | `os.environ['AWS_ACCESS_KEY_ID']`, `os.environ['AWS_SECRET_ACCESS_KEY']`, `os.environ['AWS_REGION_NAME']` | | Meta Llama 2 7B (Chat/Fine-tuned) | `completion(model='sagemaker/jumpstart-dft-meta-textgeneration-llama-2-7b-f', messages=messages)` | `os.environ['AWS_ACCESS_KEY_ID']`, `os.environ['AWS_SECRET_ACCESS_KEY']`, `os.environ['AWS_REGION_NAME']` | | Meta Llama 2 13B | `completion(model='sagemaker/jumpstart-dft-meta-textgeneration-llama-2-13b', messages=messages)` | `os.environ['AWS_ACCESS_KEY_ID']`, `os.environ['AWS_SECRET_ACCESS_KEY']`, `os.environ['AWS_REGION_NAME']` | | Meta Llama 2 13B (Chat/Fine-tuned) | `completion(model='sagemaker/jumpstart-dft-meta-textgeneration-llama-2-13b-f', messages=messages)` | `os.environ['AWS_ACCESS_KEY_ID']`, `os.environ['AWS_SECRET_ACCESS_KEY']`, `os.environ['AWS_REGION_NAME']` | | Meta Llama 2 70B | `completion(model='sagemaker/jumpstart-dft-meta-textgeneration-llama-2-70b', messages=messages)` | `os.environ['AWS_ACCESS_KEY_ID']`, `os.environ['AWS_SECRET_ACCESS_KEY']`, `os.environ['AWS_REGION_NAME']` | | Meta Llama 2 70B (Chat/Fine-tuned) | `completion(model='sagemaker/jumpstart-dft-meta-textgeneration-llama-2-70b-b-f', messages=messages)` | `os.environ['AWS_ACCESS_KEY_ID']`, `os.environ['AWS_SECRET_ACCESS_KEY']`, `os.environ['AWS_REGION_NAME']` | + +### Embedding Models + +LiteLLM supports all Sagemaker Jumpstart Huggingface Embedding models. Here's how to call it: + +```python +from litellm import completion + +os.environ["AWS_ACCESS_KEY_ID"] = "" +os.environ["AWS_SECRET_ACCESS_KEY"] = "" +os.environ["AWS_REGION_NAME"] = "" + +response = litellm.embedding(model="sagemaker/", input=["good morning from litellm", "this is another item"]) +print(f"response: {response}") +``` + + From 0354d6d48f6daf0dd87bf840c66db7f5e5300f04 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Thu, 7 Dec 2023 12:41:39 -0800 Subject: [PATCH 245/460] (ci/cd) vertex test --- litellm/tests/test_amazing_vertex_completion.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/litellm/tests/test_amazing_vertex_completion.py b/litellm/tests/test_amazing_vertex_completion.py index 6bf19e1e1..6a3f5cab7 100644 --- a/litellm/tests/test_amazing_vertex_completion.py +++ b/litellm/tests/test_amazing_vertex_completion.py @@ -68,8 +68,9 @@ def test_vertex_ai(): import random load_vertex_ai_credentials() - test_models = ["codechat-bison"] + litellm.vertex_chat_models + litellm.vertex_code_chat_models + litellm.vertex_text_models + litellm.vertex_code_text_models + test_models = litellm.vertex_chat_models + litellm.vertex_code_chat_models + litellm.vertex_text_models + litellm.vertex_code_text_models litellm.set_verbose=False + litellm.vertex_project = "hardy-device-386718" test_models = random.sample(test_models, 4) for model in test_models: @@ -90,9 +91,10 @@ def test_vertex_ai(): def test_vertex_ai_stream(): load_vertex_ai_credentials() litellm.set_verbose=False + litellm.vertex_project = "hardy-device-386718" import random - test_models = ["codechat-bison"] + litellm.vertex_chat_models + litellm.vertex_code_chat_models + litellm.vertex_text_models + litellm.vertex_code_text_models + test_models = litellm.vertex_chat_models + litellm.vertex_code_chat_models + litellm.vertex_text_models + litellm.vertex_code_text_models test_models = random.sample(test_models, 4) for model in test_models: try: From 2bc583c2a61a9b009bbf8b29122efd1f2233b320 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Thu, 7 Dec 2023 13:19:17 -0800 Subject: [PATCH 246/460] (test) proxy - async custom logger --- litellm/proxy/proxy_server.py | 2 +- .../tests/test_configs/custom_callbacks.py | 101 ++++++++++++++++++ .../test_configs/test_custom_logger.yaml | 9 ++ litellm/tests/test_proxy_custom_logger.py | 83 ++++++++++++++ 4 files changed, 194 insertions(+), 1 deletion(-) create mode 100644 litellm/tests/test_configs/custom_callbacks.py create mode 100644 litellm/tests/test_configs/test_custom_logger.yaml create mode 100644 litellm/tests/test_proxy_custom_logger.py diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 7e1c3403f..7c76301bd 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -500,7 +500,7 @@ def load_router_config(router: Optional[litellm.Router], config_file_path: str): password=cache_password ) elif key == "callbacks": - litellm.callbacks = [get_instance_fn(value=value)] + litellm.callbacks = [get_instance_fn(value=value, config_file_path=config_file_path)] print_verbose(f"{blue_color_code} Initialized Callbacks - {litellm.callbacks} {reset_color_code}") elif key == "success_callback": litellm.success_callback = [] diff --git a/litellm/tests/test_configs/custom_callbacks.py b/litellm/tests/test_configs/custom_callbacks.py new file mode 100644 index 000000000..27b968ac9 --- /dev/null +++ b/litellm/tests/test_configs/custom_callbacks.py @@ -0,0 +1,101 @@ +from litellm.integrations.custom_logger import CustomLogger +import inspect +import litellm + +class MyCustomHandler(CustomLogger): + def __init__(self): + self.success: bool = False # type: ignore + self.failure: bool = False # type: ignore + self.async_success: bool = False # type: ignore + self.async_success_embedding: bool = False # type: ignore + self.async_failure: bool = False # type: ignore + self.async_failure_embedding: bool = False # type: ignore + + self.async_completion_kwargs = None # type: ignore + self.async_embedding_kwargs = None # type: ignore + self.async_embedding_response = None # type: ignore + + self.async_completion_kwargs_fail = None # type: ignore + self.async_embedding_kwargs_fail = None # type: ignore + blue_color_code = "\033[94m" + reset_color_code = "\033[0m" + print(f"{blue_color_code}Initialized LiteLLM custom logger") + try: + print(f"Logger Initialized with following methods:") + methods = [method for method in dir(self) if inspect.ismethod(getattr(self, method))] + + # Pretty print the methods + for method in methods: + print(f" - {method}") + print(f"{reset_color_code}") + except: + pass + + def log_pre_api_call(self, model, messages, kwargs): + print(f"Pre-API Call") + + def log_post_api_call(self, kwargs, response_obj, start_time, end_time): + print(f"Post-API Call") + + def log_stream_event(self, kwargs, response_obj, start_time, end_time): + print(f"On Stream") + + def log_success_event(self, kwargs, response_obj, start_time, end_time): + print(f"On Success") + self.success = True + + def log_failure_event(self, kwargs, response_obj, start_time, end_time): + print(f"On Failure") + self.failure = True + + async def async_log_success_event(self, kwargs, response_obj, start_time, end_time): + print(f"On Async success") + self.async_success = True + print("Value of async success: ", self.async_success) + print("\n kwargs: ", kwargs) + if kwargs.get("model") == "text-embedding-ada-002": + self.async_success_embedding = True + self.async_embedding_kwargs = kwargs + self.async_embedding_response = response_obj + self.async_completion_kwargs = kwargs + + model = kwargs.get("model", None) + messages = kwargs.get("messages", None) + user = kwargs.get("user", None) + + # Access litellm_params passed to litellm.completion(), example access `metadata` + litellm_params = kwargs.get("litellm_params", {}) + metadata = litellm_params.get("metadata", {}) # headers passed to LiteLLM proxy, can be found here + + # Calculate cost using litellm.completion_cost() + cost = litellm.completion_cost(completion_response=response_obj) + response = response_obj + # tokens used in response + usage = response_obj["usage"] + + print( + f""" + Model: {model}, + Messages: {messages}, + User: {user}, + Usage: {usage}, + Cost: {cost}, + Response: {response} + Proxy Metadata: {metadata} + """ + ) + return + + + async def async_log_failure_event(self, kwargs, response_obj, start_time, end_time): + print(f"On Async Failure") + self.async_failure = True + print("Value of async failure: ", self.async_failure) + print("\n kwargs: ", kwargs) + if kwargs.get("model") == "text-embedding-ada-002": + self.async_failure_embedding = True + self.async_embedding_kwargs_fail = kwargs + + self.async_completion_kwargs_fail = kwargs + +my_custom_logger = MyCustomHandler() \ No newline at end of file diff --git a/litellm/tests/test_configs/test_custom_logger.yaml b/litellm/tests/test_configs/test_custom_logger.yaml new file mode 100644 index 000000000..9673b73ba --- /dev/null +++ b/litellm/tests/test_configs/test_custom_logger.yaml @@ -0,0 +1,9 @@ +model_list: + - model_name: "litellm-test-model" + litellm_params: + model: "gpt-3.5-turbo" + +litellm_settings: + drop_params: True + set_verbose: True + callbacks: custom_callbacks.my_custom_logger \ No newline at end of file diff --git a/litellm/tests/test_proxy_custom_logger.py b/litellm/tests/test_proxy_custom_logger.py new file mode 100644 index 000000000..3341c953f --- /dev/null +++ b/litellm/tests/test_proxy_custom_logger.py @@ -0,0 +1,83 @@ +import sys, os +import traceback +from dotenv import load_dotenv + +load_dotenv() +import os, io + +# this file is to test litellm/proxy + +sys.path.insert( + 0, os.path.abspath("../..") +) # Adds the parent directory to the system path +import pytest +import litellm +from litellm import embedding, completion, completion_cost, Timeout +from litellm import RateLimitError +import importlib, inspect + +# test /chat/completion request to the proxy +from fastapi.testclient import TestClient +from fastapi import FastAPI +from litellm.proxy.proxy_server import router, save_worker_config, initialize # Replace with the actual module where your FastAPI router is defined +filepath = os.path.dirname(os.path.abspath(__file__)) +config_fp = f"{filepath}/test_configs/test_custom_logger.yaml" +python_file_path = f"{filepath}/test_configs/custom_callbacks.py" +save_worker_config(config=config_fp, model=None, alias=None, api_base=None, api_version=None, debug=False, temperature=None, max_tokens=None, request_timeout=600, max_budget=None, telemetry=False, drop_params=True, add_function_to_prompt=False, headers=None, save=False, use_queue=False) +app = FastAPI() +app.include_router(router) # Include your router in the test app +@app.on_event("startup") +async def wrapper_startup_event(): + initialize(config=config_fp, model=None, alias=None, api_base=None, api_version=None, debug=True, temperature=None, max_tokens=None, request_timeout=600, max_budget=None, telemetry=False, drop_params=True, add_function_to_prompt=False, headers=None, save=False, use_queue=False) + +# Here you create a fixture that will be used by your tests +# Make sure the fixture returns TestClient(app) +@pytest.fixture(autouse=True) +def client(): + with TestClient(app) as client: + yield client + + + +def test_chat_completion(client): + try: + # Your test data + print("initialized proxy") + # import the initialized custom logger + my_custom_logger = importlib.util.spec_from_file_location("my_custom_logger", python_file_path) + print("my_custom_logger", my_custom_logger) + + blue_color_code = "\033[94m" + reset_color_code = "\033[0m" + print(f"{blue_color_code}Initialized LiteLLM custom logger") + try: + print(f"Logger Initialized with following methods:") + methods = [method for method in dir(my_custom_logger) if inspect.ismethod(getattr(my_custom_logger, method))] + + # Pretty print the methods + for method in methods: + print(f" - {method}") + print(f"{reset_color_code}") + except: + pass + + for attribute in dir(my_custom_logger): + print(f"{attribute}: {getattr(my_custom_logger, attribute)}") + test_data = { + "model": "litellm-test-model", + "messages": [ + { + "role": "user", + "content": "hi" + }, + ], + "max_tokens": 10, + } + + + response = client.post("/chat/completions", json=test_data) + print("made request", response.status_code, response.text) + result = response.json() + print(f"Received response: {result}") + except Exception as e: + pytest.fail("LiteLLM Proxy test failed. Exception", e) \ No newline at end of file From 418099085cf48610e7338475e3bbc58445a442af Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Thu, 7 Dec 2023 13:44:17 -0800 Subject: [PATCH 247/460] (test) proxy - async logger, strict check async_success --- litellm/tests/test_proxy_custom_logger.py | 24 +++++++---------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/litellm/tests/test_proxy_custom_logger.py b/litellm/tests/test_proxy_custom_logger.py index 3341c953f..bb5fa8f23 100644 --- a/litellm/tests/test_proxy_custom_logger.py +++ b/litellm/tests/test_proxy_custom_logger.py @@ -44,25 +44,12 @@ def test_chat_completion(client): # Your test data print("initialized proxy") # import the initialized custom logger - my_custom_logger = importlib.util.spec_from_file_location("my_custom_logger", python_file_path) - print("my_custom_logger", my_custom_logger) + print(litellm.callbacks) - blue_color_code = "\033[94m" - reset_color_code = "\033[0m" - print(f"{blue_color_code}Initialized LiteLLM custom logger") - try: - print(f"Logger Initialized with following methods:") - methods = [method for method in dir(my_custom_logger) if inspect.ismethod(getattr(my_custom_logger, method))] - - # Pretty print the methods - for method in methods: - print(f" - {method}") - print(f"{reset_color_code}") - except: - pass + assert len(litellm.callbacks) == 1 # assert litellm is initialized with 1 callback + my_custom_logger = litellm.callbacks[0] + assert my_custom_logger.async_success == False - for attribute in dir(my_custom_logger): - print(f"{attribute}: {getattr(my_custom_logger, attribute)}") test_data = { "model": "litellm-test-model", "messages": [ @@ -77,6 +64,9 @@ def test_chat_completion(client): response = client.post("/chat/completions", json=test_data) print("made request", response.status_code, response.text) + assert my_custom_logger.async_success == True # checks if the status of async_success is True, only the async_log_success_event can set this to true + assert my_custom_logger.async_completion_kwargs["model"] == "gpt-3.5-turbo" # checks if kwargs passed to async_log_success_event are correct + result = response.json() print(f"Received response: {result}") except Exception as e: From e5638e2c5d5ed99efbbfe638bf9b1b4cc4dfe921 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Thu, 7 Dec 2023 13:44:21 -0800 Subject: [PATCH 248/460] fix(router.py): fix default caching response value --- docs/my-website/docs/secret.md | 2 +- litellm/_redis.py | 10 ++- litellm/proxy/proxy_server.py | 5 +- litellm/router.py | 4 +- litellm/tests/test_caching_ssl.py | 74 ++++++++++++++++++++++ litellm/tests/test_proxy_server_caching.py | 36 +++++++++++ litellm/utils.py | 3 +- 7 files changed, 127 insertions(+), 7 deletions(-) create mode 100644 litellm/tests/test_caching_ssl.py create mode 100644 litellm/tests/test_proxy_server_caching.py diff --git a/docs/my-website/docs/secret.md b/docs/my-website/docs/secret.md index 39ee09854..2c61f8d49 100644 --- a/docs/my-website/docs/secret.md +++ b/docs/my-website/docs/secret.md @@ -68,7 +68,7 @@ You can now test this by starting your proxy: litellm --config /path/to/config.yaml ``` -[Quick Test Proxy](./simple_proxy.md#using-litellm-proxy---curl-request-openai-package) +[Quick Test Proxy](./proxy/quick_start#using-litellm-proxy---curl-request-openai-package-langchain-langchain-js) ## Infisical Secret Manager Integrates with [Infisical's Secret Manager](https://infisical.com/) for secure storage and retrieval of API keys and sensitive data. diff --git a/litellm/_redis.py b/litellm/_redis.py index 82e0ab0ec..1c6f0b058 100644 --- a/litellm/_redis.py +++ b/litellm/_redis.py @@ -11,6 +11,7 @@ import os import inspect import redis, litellm +from typing import List, Optional def _get_redis_kwargs(): arg_spec = inspect.getfullargspec(redis.Redis) @@ -67,6 +68,13 @@ def get_redis_url_from_environment(): return f"redis://{redis_password}{os.environ['REDIS_HOST']}:{os.environ['REDIS_PORT']}" def get_redis_client(**env_overrides): + ### check if "os.environ/" passed in + for k, v in env_overrides.items(): + if v.startswith("os.environ/"): + v = v.replace("os.environ/", "") + value = litellm.get_secret(v) + env_overrides[k] = value + redis_kwargs = { **_redis_kwargs_from_environment(), **env_overrides, @@ -81,5 +89,5 @@ def get_redis_client(**env_overrides): return redis.Redis.from_url(**redis_kwargs) elif "host" not in redis_kwargs or redis_kwargs['host'] is None: raise ValueError("Either 'host' or 'url' must be specified for redis.") - + litellm.print_verbose(f"redis_kwargs: {redis_kwargs}") return redis.Redis(**redis_kwargs) \ No newline at end of file diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 7c76301bd..6f250df5d 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -416,7 +416,7 @@ def run_ollama_serve(): """) def load_router_config(router: Optional[litellm.Router], config_file_path: str): - global master_key, user_config_file_path, otel_logging, user_custom_auth + global master_key, user_config_file_path, otel_logging, user_custom_auth, user_custom_auth_path config = {} try: if os.path.exists(config_file_path): @@ -492,7 +492,7 @@ def load_router_config(router: Optional[litellm.Router], config_file_path: str): print(f"{blue_color_code}Cache Password:{reset_color_code} {cache_password}") print() - ## to pass a complete url, just set it as `os.environ[REDIS_URL] = `, _redis.py checks for REDIS specific environment variables + ## to pass a complete url, or set ssl=True, etc. just set it as `os.environ[REDIS_URL] = `, _redis.py checks for REDIS specific environment variables litellm.cache = Cache( type=cache_type, host=cache_host, @@ -929,6 +929,7 @@ async def chat_completion(request: Request, model: Optional[str] = None, user_ap else: data["metadata"] = {"user_api_key": user_api_key_dict.api_key} data["metadata"]["headers"] = dict(request.headers) + global user_temperature, user_request_timeout, user_max_tokens, user_api_base # override with user settings, these are params passed via cli if user_temperature: diff --git a/litellm/router.py b/litellm/router.py index 630e853f6..9bdf69f93 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -53,7 +53,7 @@ class Router: ``` """ model_names: List = [] - cache_responses: bool = False + cache_responses: Optional[bool] = None default_cache_time_seconds: int = 1 * 60 * 60 # 1 hour num_retries: int = 0 tenacity = None @@ -65,7 +65,7 @@ class Router: redis_host: Optional[str] = None, redis_port: Optional[int] = None, redis_password: Optional[str] = None, - cache_responses: bool = False, + cache_responses: Optional[bool] = None, cache_kwargs: dict = {}, # additional kwargs to pass to RedisCache (see caching.py) ## RELIABILITY ## num_retries: int = 0, diff --git a/litellm/tests/test_caching_ssl.py b/litellm/tests/test_caching_ssl.py new file mode 100644 index 000000000..bcdea8d41 --- /dev/null +++ b/litellm/tests/test_caching_ssl.py @@ -0,0 +1,74 @@ +#### What this tests #### +# This tests using caching w/ litellm which requires SSL=True + +import sys, os +import time +import traceback +from dotenv import load_dotenv + +load_dotenv() +import os + +sys.path.insert( + 0, os.path.abspath("../..") +) # Adds the parent directory to the system path +import pytest +import litellm +from litellm import embedding, completion, Router +from litellm.caching import Cache + +messages = [{"role": "user", "content": f"who is ishaan {time.time()}"}] +def test_caching_v2(): # test in memory cache + try: + litellm.cache = Cache(type="redis", host="os.environ/REDIS_HOST_2", port="os.environ/REDIS_PORT_2", password="os.environ/REDIS_PASSWORD_2", ssl="os.environ/REDIS_SSL") + response1 = completion(model="gpt-3.5-turbo", messages=messages, caching=True) + response2 = completion(model="gpt-3.5-turbo", messages=messages, caching=True) + print(f"response1: {response1}") + print(f"response2: {response2}") + litellm.cache = None # disable cache + if response2['choices'][0]['message']['content'] != response1['choices'][0]['message']['content']: + print(f"response1: {response1}") + print(f"response2: {response2}") + raise Exception() + except Exception as e: + print(f"error occurred: {traceback.format_exc()}") + pytest.fail(f"Error occurred: {e}") + +# test_caching_v2() + + +def test_caching_router(): + """ + Test scenario where litellm.cache is set but kwargs("caching") is not. This should still return a cache hit. + """ + try: + model_list = [ + { + "model_name": "gpt-3.5-turbo", # openai model name + "litellm_params": { # params for litellm completion/embedding call + "model": "azure/chatgpt-v-2", + "api_key": os.getenv("AZURE_API_KEY"), + "api_version": os.getenv("AZURE_API_VERSION"), + "api_base": os.getenv("AZURE_API_BASE") + }, + "tpm": 240000, + "rpm": 1800 + } + ] + litellm.cache = Cache(type="redis", host="os.environ/REDIS_HOST_2", port="os.environ/REDIS_PORT_2", password="os.environ/REDIS_PASSWORD_2", ssl="os.environ/REDIS_SSL") + router = Router(model_list=model_list, + routing_strategy="simple-shuffle", + set_verbose=False, + num_retries=1) # type: ignore + response1 = completion(model="gpt-3.5-turbo", messages=messages) + response2 = completion(model="gpt-3.5-turbo", messages=messages) + if response2['choices'][0]['message']['content'] != response1['choices'][0]['message']['content']: + print(f"response1: {response1}") + print(f"response2: {response2}") + litellm.cache = None # disable cache + assert response2['choices'][0]['message']['content'] == response1['choices'][0]['message']['content'] + except Exception as e: + print(f"error occurred: {traceback.format_exc()}") + pytest.fail(f"Error occurred: {e}") + +test_caching_router() \ No newline at end of file diff --git a/litellm/tests/test_proxy_server_caching.py b/litellm/tests/test_proxy_server_caching.py new file mode 100644 index 000000000..7befaff65 --- /dev/null +++ b/litellm/tests/test_proxy_server_caching.py @@ -0,0 +1,36 @@ +#### What this tests #### +# This tests using caching w/ litellm which requires SSL=True + +import sys, os +import time +import traceback +from dotenv import load_dotenv + +load_dotenv() +import os + +sys.path.insert( + 0, os.path.abspath("../..") +) # Adds the parent directory to the system path +import pytest +import litellm +from litellm import embedding, completion +from litellm.caching import Cache + +messages = [{"role": "user", "content": f"who is ishaan {time.time()}"}] +def test_caching_v2(): # test in memory cache + try: + response1 = completion(model="openai/gpt-3.5-turbo", messages=messages, api_base="http://0.0.0.0:8000") + response2 = completion(model="openai/gpt-3.5-turbo", messages=messages, api_base="http://0.0.0.0:8000") + print(f"response1: {response1}") + print(f"response2: {response2}") + litellm.cache = None # disable cache + if response2['choices'][0]['message']['content'] != response1['choices'][0]['message']['content']: + print(f"response1: {response1}") + print(f"response2: {response2}") + raise Exception() + except Exception as e: + print(f"error occurred: {traceback.format_exc()}") + pytest.fail(f"Error occurred: {e}") + +test_caching_v2() \ No newline at end of file diff --git a/litellm/utils.py b/litellm/utils.py index 86f5a835c..325e16e9f 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -1509,7 +1509,8 @@ def client(original_function): # if caching is false, don't run this if (kwargs.get("caching", None) is None and litellm.cache is not None) or kwargs.get("caching", False) == True: # allow users to control returning cached responses from the completion function # checking cache - if (litellm.cache != None): + print_verbose(f"INSIDE CHECKING CACHE") + if litellm.cache is not None: print_verbose(f"Checking Cache") cached_result = litellm.cache.get_cache(*args, **kwargs) if cached_result != None: From 5ddfaa33f3dedc36fdae2895752b62f116984bb1 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Thu, 7 Dec 2023 13:54:08 -0800 Subject: [PATCH 249/460] (feat) proxy - async logger class + embeddings --- litellm/tests/test_proxy_custom_logger.py | 31 +++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/litellm/tests/test_proxy_custom_logger.py b/litellm/tests/test_proxy_custom_logger.py index bb5fa8f23..fa838b687 100644 --- a/litellm/tests/test_proxy_custom_logger.py +++ b/litellm/tests/test_proxy_custom_logger.py @@ -51,7 +51,7 @@ def test_chat_completion(client): assert my_custom_logger.async_success == False test_data = { - "model": "litellm-test-model", + "model": "Azure OpenAI GPT-4 Canada", "messages": [ { "role": "user", @@ -65,7 +65,34 @@ def test_chat_completion(client): response = client.post("/chat/completions", json=test_data) print("made request", response.status_code, response.text) assert my_custom_logger.async_success == True # checks if the status of async_success is True, only the async_log_success_event can set this to true - assert my_custom_logger.async_completion_kwargs["model"] == "gpt-3.5-turbo" # checks if kwargs passed to async_log_success_event are correct + assert my_custom_logger.async_completion_kwargs["model"] == "chatgpt-v-2" # checks if kwargs passed to async_log_success_event are correct + + result = response.json() + print(f"Received response: {result}") + except Exception as e: + pytest.fail("LiteLLM Proxy test failed. Exception", e) + + + +def test_embedding(client): + try: + # Your test data + print("initialized proxy") + # import the initialized custom logger + print(litellm.callbacks) + + assert len(litellm.callbacks) == 1 # assert litellm is initialized with 1 callback + my_custom_logger = litellm.callbacks[0] + assert my_custom_logger.async_success_embedding == False + + test_data = { + "model": "azure-embedding-model", + "input": ["hello"] + } + response = client.post("/embeddings", json=test_data) + print("made request", response.status_code, response.text) + assert my_custom_logger.async_success_embedding == True # checks if the status of async_success is True, only the async_log_success_event can set this to true + assert my_custom_logger.async_embedding_kwargs["model"] == "azure-embedding-model" # checks if kwargs passed to async_log_success_event are correct result = response.json() print(f"Received response: {result}") From f236dae79d0e2a6bb88bc7e3be1353493310cb89 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Thu, 7 Dec 2023 13:54:27 -0800 Subject: [PATCH 250/460] (test) async logger + proxy --- litellm/tests/test_configs/custom_callbacks.py | 2 +- .../tests/test_configs/test_custom_logger.yaml | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/litellm/tests/test_configs/custom_callbacks.py b/litellm/tests/test_configs/custom_callbacks.py index 27b968ac9..b65abcfc9 100644 --- a/litellm/tests/test_configs/custom_callbacks.py +++ b/litellm/tests/test_configs/custom_callbacks.py @@ -53,7 +53,7 @@ class MyCustomHandler(CustomLogger): self.async_success = True print("Value of async success: ", self.async_success) print("\n kwargs: ", kwargs) - if kwargs.get("model") == "text-embedding-ada-002": + if kwargs.get("model") == "azure-embedding-model": self.async_success_embedding = True self.async_embedding_kwargs = kwargs self.async_embedding_response = response_obj diff --git a/litellm/tests/test_configs/test_custom_logger.yaml b/litellm/tests/test_configs/test_custom_logger.yaml index 9673b73ba..c4f44f9ef 100644 --- a/litellm/tests/test_configs/test_custom_logger.yaml +++ b/litellm/tests/test_configs/test_custom_logger.yaml @@ -1,7 +1,16 @@ model_list: - - model_name: "litellm-test-model" - litellm_params: - model: "gpt-3.5-turbo" + - model_name: Azure OpenAI GPT-4 Canada + litellm_params: + model: azure/chatgpt-v-2 + api_base: os.environ/AZURE_API_BASE + api_key: os.environ/AZURE_API_KEY + api_version: "2023-07-01-preview" + - model_name: azure-embedding-model + litellm_params: + model: azure/azure-embedding-model + api_base: os.environ/AZURE_API_BASE + api_key: os.environ/AZURE_API_KEY + api_version: "2023-07-01-preview" litellm_settings: drop_params: True From 2b04dc310abcb5dabff875791134b6bb9a2ba069 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Thu, 7 Dec 2023 13:56:17 -0800 Subject: [PATCH 251/460] test: skip local proxy test in circle ci --- litellm/tests/test_proxy_server_caching.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/litellm/tests/test_proxy_server_caching.py b/litellm/tests/test_proxy_server_caching.py index 7befaff65..a62b08e31 100644 --- a/litellm/tests/test_proxy_server_caching.py +++ b/litellm/tests/test_proxy_server_caching.py @@ -18,6 +18,8 @@ from litellm import embedding, completion from litellm.caching import Cache messages = [{"role": "user", "content": f"who is ishaan {time.time()}"}] + +@pytest.mark.skip(reason="local proxy test") def test_caching_v2(): # test in memory cache try: response1 = completion(model="openai/gpt-3.5-turbo", messages=messages, api_base="http://0.0.0.0:8000") From 3846ec6124cbb331fc5f6dd0efd4fa8c0dc65da4 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Thu, 7 Dec 2023 14:19:11 -0800 Subject: [PATCH 252/460] fix(utils.py): fix get_llm_provider to handle the ':' in anthropic/bedrock calls --- litellm/tests/test_get_llm_provider.py | 19 +++++++++++++++++++ litellm/utils.py | 12 +++--------- 2 files changed, 22 insertions(+), 9 deletions(-) create mode 100644 litellm/tests/test_get_llm_provider.py diff --git a/litellm/tests/test_get_llm_provider.py b/litellm/tests/test_get_llm_provider.py new file mode 100644 index 000000000..afcb3d7af --- /dev/null +++ b/litellm/tests/test_get_llm_provider.py @@ -0,0 +1,19 @@ +import sys, os +import traceback +from dotenv import load_dotenv + +load_dotenv() +import os, io + +sys.path.insert( + 0, os.path.abspath("../..") +) # Adds the parent directory to the system path +import pytest +import litellm + +def test_get_llm_provider(): + _, response, _, _ = litellm.get_llm_provider(model="anthropic.claude-v2:1") + + assert response == "bedrock" + +test_get_llm_provider() \ No newline at end of file diff --git a/litellm/utils.py b/litellm/utils.py index 325e16e9f..a56c06304 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -2580,10 +2580,10 @@ def get_llm_provider(model: str, custom_llm_provider: Optional[str] = None, api_ elif model in litellm.anthropic_models: custom_llm_provider = "anthropic" ## cohere - elif model in litellm.cohere_models: + elif model in litellm.cohere_models or model in litellm.cohere_embedding_models: custom_llm_provider = "cohere" ## replicate - elif model in litellm.replicate_models or ":" in model: + elif model in litellm.replicate_models or (":" in model and len(model)>64): model_parts = model.split(":") if len(model_parts) > 1 and len(model_parts[1])==64: ## checks if model name has a 64 digit code - e.g. "meta/llama-2-70b-chat:02e509c789964a7ea8736978a43525956ef40397be9033abf9fd2badfe68c9e3" custom_llm_provider = "replicate" @@ -2619,17 +2619,11 @@ def get_llm_provider(model: str, custom_llm_provider: Optional[str] = None, api_ elif model in litellm.petals_models: custom_llm_provider = "petals" ## bedrock - elif model in litellm.bedrock_models: + elif model in litellm.bedrock_models or model in litellm.bedrock_embedding_models: custom_llm_provider = "bedrock" # openai embeddings elif model in litellm.open_ai_embedding_models: custom_llm_provider = "openai" - # cohere embeddings - elif model in litellm.cohere_embedding_models: - custom_llm_provider = "cohere" - elif model in litellm.bedrock_embedding_models: - custom_llm_provider = "bedrock" - if custom_llm_provider is None or custom_llm_provider=="": print() # noqa print("\033[1;31mProvider List: https://docs.litellm.ai/docs/providers\033[0m") # noqa From b92f1af301fd9af46e398bb6f9eea76d90b909b8 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Thu, 7 Dec 2023 14:20:14 -0800 Subject: [PATCH 253/460] test: cleaning up local testing --- litellm/tests/test_proxy_server_caching.py | 64 +++++++++++----------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/litellm/tests/test_proxy_server_caching.py b/litellm/tests/test_proxy_server_caching.py index a62b08e31..75b017e50 100644 --- a/litellm/tests/test_proxy_server_caching.py +++ b/litellm/tests/test_proxy_server_caching.py @@ -1,38 +1,38 @@ -#### What this tests #### -# This tests using caching w/ litellm which requires SSL=True +# #### What this tests #### +# # This tests using caching w/ litellm which requires SSL=True -import sys, os -import time -import traceback -from dotenv import load_dotenv +# import sys, os +# import time +# import traceback +# from dotenv import load_dotenv -load_dotenv() -import os +# load_dotenv() +# import os -sys.path.insert( - 0, os.path.abspath("../..") -) # Adds the parent directory to the system path -import pytest -import litellm -from litellm import embedding, completion -from litellm.caching import Cache +# sys.path.insert( +# 0, os.path.abspath("../..") +# ) # Adds the parent directory to the system path +# import pytest +# import litellm +# from litellm import embedding, completion +# from litellm.caching import Cache -messages = [{"role": "user", "content": f"who is ishaan {time.time()}"}] +# messages = [{"role": "user", "content": f"who is ishaan {time.time()}"}] -@pytest.mark.skip(reason="local proxy test") -def test_caching_v2(): # test in memory cache - try: - response1 = completion(model="openai/gpt-3.5-turbo", messages=messages, api_base="http://0.0.0.0:8000") - response2 = completion(model="openai/gpt-3.5-turbo", messages=messages, api_base="http://0.0.0.0:8000") - print(f"response1: {response1}") - print(f"response2: {response2}") - litellm.cache = None # disable cache - if response2['choices'][0]['message']['content'] != response1['choices'][0]['message']['content']: - print(f"response1: {response1}") - print(f"response2: {response2}") - raise Exception() - except Exception as e: - print(f"error occurred: {traceback.format_exc()}") - pytest.fail(f"Error occurred: {e}") +# @pytest.mark.skip(reason="local proxy test") +# def test_caching_v2(): # test in memory cache +# try: +# response1 = completion(model="openai/gpt-3.5-turbo", messages=messages, api_base="http://0.0.0.0:8000") +# response2 = completion(model="openai/gpt-3.5-turbo", messages=messages, api_base="http://0.0.0.0:8000") +# print(f"response1: {response1}") +# print(f"response2: {response2}") +# litellm.cache = None # disable cache +# if response2['choices'][0]['message']['content'] != response1['choices'][0]['message']['content']: +# print(f"response1: {response1}") +# print(f"response2: {response2}") +# raise Exception() +# except Exception as e: +# print(f"error occurred: {traceback.format_exc()}") +# pytest.fail(f"Error occurred: {e}") -test_caching_v2() \ No newline at end of file +# test_caching_v2() \ No newline at end of file From 91ce50338a8233e92e7f77659c34aaad57c68889 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Thu, 7 Dec 2023 15:08:11 -0800 Subject: [PATCH 254/460] fix(_redis.py): check if string before checking os.environ --- litellm/_redis.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/_redis.py b/litellm/_redis.py index 1c6f0b058..eca517079 100644 --- a/litellm/_redis.py +++ b/litellm/_redis.py @@ -70,7 +70,7 @@ def get_redis_url_from_environment(): def get_redis_client(**env_overrides): ### check if "os.environ/" passed in for k, v in env_overrides.items(): - if v.startswith("os.environ/"): + if isinstance(v, str) and v.startswith("os.environ/"): v = v.replace("os.environ/", "") value = litellm.get_secret(v) env_overrides[k] = value From 4c0e95aec9ac3ea71993bd74aac1030b89820a79 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Thu, 7 Dec 2023 15:19:11 -0800 Subject: [PATCH 255/460] test: fix proxy custom logger test --- litellm/tests/test_proxy_custom_logger.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/litellm/tests/test_proxy_custom_logger.py b/litellm/tests/test_proxy_custom_logger.py index fa838b687..9d5931f50 100644 --- a/litellm/tests/test_proxy_custom_logger.py +++ b/litellm/tests/test_proxy_custom_logger.py @@ -37,6 +37,12 @@ def client(): with TestClient(app) as client: yield client +# Your bearer token +token = os.getenv("PROXY_MASTER_KEY") + +headers = { + "Authorization": f"Bearer {token}" +} def test_chat_completion(client): @@ -62,7 +68,7 @@ def test_chat_completion(client): } - response = client.post("/chat/completions", json=test_data) + response = client.post("/chat/completions", json=test_data, headers=headers) print("made request", response.status_code, response.text) assert my_custom_logger.async_success == True # checks if the status of async_success is True, only the async_log_success_event can set this to true assert my_custom_logger.async_completion_kwargs["model"] == "chatgpt-v-2" # checks if kwargs passed to async_log_success_event are correct @@ -89,7 +95,7 @@ def test_embedding(client): "model": "azure-embedding-model", "input": ["hello"] } - response = client.post("/embeddings", json=test_data) + response = client.post("/embeddings", json=test_data, headers=headers) print("made request", response.status_code, response.text) assert my_custom_logger.async_success_embedding == True # checks if the status of async_success is True, only the async_log_success_event can set this to true assert my_custom_logger.async_embedding_kwargs["model"] == "azure-embedding-model" # checks if kwargs passed to async_log_success_event are correct From 2da50087b0786c3c0b9b01893df717e8a63cd57b Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Thu, 7 Dec 2023 15:05:47 -0800 Subject: [PATCH 256/460] (fix) logging - better prints for async logger --- litellm/utils.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/litellm/utils.py b/litellm/utils.py index a56c06304..f2c363fb4 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -993,11 +993,12 @@ class Logging: Implementing async callbacks, to handle asyncio event loop issues when custom integrations need to use async functions. """ start_time, end_time, result, complete_streaming_response = self._success_handler_helper_fn(start_time=start_time, end_time=end_time, result=result) - print_verbose(f"success callbacks: {litellm.success_callback}") + print_verbose(f"Async success callbacks: {litellm._async_success_callback}") for callback in litellm._async_success_callback: try: if isinstance(callback, CustomLogger): # custom logger class + print_verbose(f"Async success callbacks: CustomLogger") await callback.async_log_success_event( kwargs=self.model_call_details, response_obj=result, @@ -1005,6 +1006,7 @@ class Logging: end_time=end_time, ) if callable(callback): # custom logger functions + print_verbose(f"Async success callbacks: async_log_event") await customLogger.async_log_event( kwargs=self.model_call_details, response_obj=result, From 762f28e4d78b3506c3ac181f84bbc0254b679961 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Thu, 7 Dec 2023 17:31:12 -0800 Subject: [PATCH 257/460] (fix) make print_verbose non blocking --- litellm/_logging.py | 7 +++++-- litellm/budget_manager.py | 9 ++++++--- litellm/caching.py | 7 +++++-- litellm/main.py | 7 +++++-- litellm/proxy/proxy_server.py | 9 ++++++--- litellm/router.py | 7 +++++-- litellm/utils.py | 7 +++++-- 7 files changed, 37 insertions(+), 16 deletions(-) diff --git a/litellm/_logging.py b/litellm/_logging.py index ab776b9b6..0c6881406 100644 --- a/litellm/_logging.py +++ b/litellm/_logging.py @@ -1,5 +1,8 @@ set_verbose = False def print_verbose(print_statement): - if set_verbose: - print(print_statement) # noqa \ No newline at end of file + try: + if set_verbose: + print(print_statement) # noqa + except: + pass \ No newline at end of file diff --git a/litellm/budget_manager.py b/litellm/budget_manager.py index 6a9d1e520..07468e2f5 100644 --- a/litellm/budget_manager.py +++ b/litellm/budget_manager.py @@ -13,9 +13,12 @@ class BudgetManager: self.load_data() def print_verbose(self, print_statement): - if litellm.set_verbose: - import logging - logging.info(print_statement) + try: + if litellm.set_verbose: + import logging + logging.info(print_statement) + except: + pass def load_data(self): if self.client_type == "local": diff --git a/litellm/caching.py b/litellm/caching.py index 1b6963cc6..4f000689c 100644 --- a/litellm/caching.py +++ b/litellm/caching.py @@ -25,8 +25,11 @@ def get_prompt(*args, **kwargs): return None def print_verbose(print_statement): - if litellm.set_verbose: - print(print_statement) # noqa + try: + if litellm.set_verbose: + print(print_statement) # noqa + except: + pass class BaseCache: def set_cache(self, key, value, **kwargs): diff --git a/litellm/main.py b/litellm/main.py index 6d7fc3403..76eae2b1a 100644 --- a/litellm/main.py +++ b/litellm/main.py @@ -2141,8 +2141,11 @@ def moderation(input: str, api_key: Optional[str]=None): ####### HELPER FUNCTIONS ################ ## Set verbose to true -> ```litellm.set_verbose = True``` def print_verbose(print_statement): - if litellm.set_verbose: - print(print_statement) # noqa + try: + if litellm.set_verbose: + print(print_statement) # noqa + except: + pass def config_completion(**kwargs): if litellm.config_path != None: diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 6f250df5d..b4763c11c 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -199,9 +199,12 @@ celery_app_conn = None celery_fn = None # Redis Queue for handling requests #### HELPER FUNCTIONS #### def print_verbose(print_statement): - global user_debug - if user_debug: - print(print_statement) + try: + global user_debug + if user_debug: + print(print_statement) + except: + pass def usage_telemetry( feature: str, diff --git a/litellm/router.py b/litellm/router.py index 9bdf69f93..04f518b2d 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -1076,8 +1076,11 @@ class Router: return deployment.get("client", None) def print_verbose(self, print_statement): - if self.set_verbose or litellm.set_verbose: - print(f"LiteLLM.Router: {print_statement}") # noqa + try: + if self.set_verbose or litellm.set_verbose: + print(f"LiteLLM.Router: {print_statement}") # noqa + except: + pass def get_available_deployment(self, model: str, diff --git a/litellm/utils.py b/litellm/utils.py index f2c363fb4..4b64caa8b 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -512,8 +512,11 @@ class TextCompletionResponse(OpenAIObject): ############################################################ def print_verbose(print_statement): - if litellm.set_verbose: - print(print_statement) # noqa + try: + if litellm.set_verbose: + print(print_statement) # noqa + except: + pass ####### LOGGING ################### from enum import Enum From fd04b48764856a20df4b0c1936db4ab61048efb4 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Thu, 7 Dec 2023 18:09:57 -0800 Subject: [PATCH 258/460] (feat) async callbacks with litellm.completion() --- litellm/proxy/custom_callbacks.py | 57 ----------------------------- litellm/tests/test_custom_logger.py | 6 +-- litellm/utils.py | 14 ++++--- 3 files changed, 12 insertions(+), 65 deletions(-) diff --git a/litellm/proxy/custom_callbacks.py b/litellm/proxy/custom_callbacks.py index 18aea8a97..08947a066 100644 --- a/litellm/proxy/custom_callbacks.py +++ b/litellm/proxy/custom_callbacks.py @@ -35,68 +35,11 @@ class MyCustomHandler(CustomLogger): async def async_log_success_event(self, kwargs, response_obj, start_time, end_time): print(f"On Async Success!") - # log: key, user, model, prompt, response, tokens, cost - # Access kwargs passed to litellm.completion() - model = kwargs.get("model", None) - messages = kwargs.get("messages", None) - user = kwargs.get("user", None) - - # Access litellm_params passed to litellm.completion(), example access `metadata` - litellm_params = kwargs.get("litellm_params", {}) - metadata = litellm_params.get("metadata", {}) # headers passed to LiteLLM proxy, can be found here - - # Calculate cost using litellm.completion_cost() - cost = litellm.completion_cost(completion_response=response_obj) - response = response_obj - # tokens used in response - usage = response_obj["usage"] - - print( - f""" - Model: {model}, - Messages: {messages}, - User: {user}, - Usage: {usage}, - Cost: {cost}, - Response: {response} - Proxy Metadata: {metadata} - """ - ) return async def async_log_failure_event(self, kwargs, response_obj, start_time, end_time): try: print(f"On Async Failure !") - print("\nkwargs", kwargs) - # Access kwargs passed to litellm.completion() - model = kwargs.get("model", None) - messages = kwargs.get("messages", None) - user = kwargs.get("user", None) - - # Access litellm_params passed to litellm.completion(), example access `metadata` - litellm_params = kwargs.get("litellm_params", {}) - metadata = litellm_params.get("metadata", {}) # headers passed to LiteLLM proxy, can be found here - - # Acess Exceptions & Traceback - exception_event = kwargs.get("exception", None) - traceback_event = kwargs.get("traceback_exception", None) - - # Calculate cost using litellm.completion_cost() - cost = litellm.completion_cost(completion_response=response_obj) - print("now checking response obj") - - print( - f""" - Model: {model}, - Messages: {messages}, - User: {user}, - Cost: {cost}, - Response: {response_obj} - Proxy Metadata: {metadata} - Exception: {exception_event} - Traceback: {traceback_event} - """ - ) except Exception as e: print(f"Exception: {e}") diff --git a/litellm/tests/test_custom_logger.py b/litellm/tests/test_custom_logger.py index 0702cb52c..333293596 100644 --- a/litellm/tests/test_custom_logger.py +++ b/litellm/tests/test_custom_logger.py @@ -142,8 +142,8 @@ def test_async_custom_handler(): assert len(str(customHandler2.async_completion_kwargs_fail.get("exception"))) > 10 # exppect APIError("OpenAIException - Error code: 401 - {'error': {'message': 'Incorrect API key provided: test. You can find your API key at https://platform.openai.com/account/api-keys.', 'type': 'invalid_request_error', 'param': None, 'code': 'invalid_api_key'}}"), 'traceback_exception': 'Traceback (most recent call last):\n File "/Users/ishaanjaffer/Github/litellm/litellm/llms/openai.py", line 269, in acompletion\n response = await openai_aclient.chat.completions.create(**data)\n File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/openai/resources/chat/completions.py", line 119 print("Passed setting async failure") - async def test_2(): - response = await litellm.acompletion( + def test_2(): + response = litellm.completion( model="gpt-3.5-turbo", messages=[{ "role": "user", @@ -152,7 +152,7 @@ def test_async_custom_handler(): ) print("\n response", response) assert customHandler2.async_success == False - asyncio.run(test_2()) + test_2() assert customHandler2.async_success == True, "async success is not set to True even after success" assert customHandler2.async_completion_kwargs.get("model") == "gpt-3.5-turbo" diff --git a/litellm/utils.py b/litellm/utils.py index 4b64caa8b..879447194 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -1264,6 +1264,7 @@ def client(original_function): litellm._async_success_callback.append(callback) if callback not in litellm._async_failure_callback: litellm._async_failure_callback.append(callback) + print_verbose(f"Initialized litellm callbacks, Async Success Callbacks: {litellm._async_success_callback}") if ( len(litellm.input_callback) > 0 or len(litellm.success_callback) > 0 @@ -1301,7 +1302,7 @@ def client(original_function): # Pop the async items from success_callback in reverse order to avoid index issues for index in reversed(removed_async_items): - litellm.success_callback.pop(index) + litellm.failure_callback.pop(index) if add_breadcrumb: add_breadcrumb( category="litellm.llm_call", @@ -1424,10 +1425,6 @@ def client(original_function): return litellm.stream_chunk_builder(chunks, messages=kwargs.get("messages", None)) else: return result - elif "acompletion" in kwargs and kwargs["acompletion"] == True: - return result - elif "aembedding" in kwargs and kwargs["aembedding"] == True: - return result ### POST-CALL RULES ### post_call_processing(original_response=result, model=model) @@ -1437,6 +1434,8 @@ def client(original_function): litellm.cache.add_cache(result, *args, **kwargs) # LOG SUCCESS - handle streaming success logging in the _next_ object, remove `handle_success` once it's deprecated + print_verbose(f"Wrapper: Completed Call, calling async_success_handler") + asyncio.run(logging_obj.async_success_handler(result, start_time, end_time)) threading.Thread(target=logging_obj.success_handler, args=(result, start_time, end_time)).start() # threading.Thread(target=logging_obj.success_handler, args=(result, start_time, end_time)).start() my_thread = threading.Thread( @@ -1444,6 +1443,10 @@ def client(original_function): ) # don't interrupt execution of main thread my_thread.start() # RETURN RESULT + if "acompletion" in kwargs and kwargs["acompletion"] == True: + return result + elif "aembedding" in kwargs and kwargs["aembedding"] == True: + return result result._response_ms = (end_time - start_time).total_seconds() * 1000 # return response latency in ms like openai return result except Exception as e: @@ -1544,6 +1547,7 @@ def client(original_function): if litellm.caching or litellm.caching_with_models or litellm.cache != None: # user init a cache object litellm.cache.add_cache(result, *args, **kwargs) # LOG SUCCESS - handle streaming success logging in the _next_ object + print_verbose(f"Async Wrapper: Completed Call, calling async_success_handler") asyncio.create_task(logging_obj.async_success_handler(result, start_time, end_time)) threading.Thread(target=logging_obj.success_handler, args=(result, start_time, end_time)).start() # RETURN RESULT From 3f4fe668a8db85c9f2642ae07bc69d2d35cd99b8 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Thu, 7 Dec 2023 18:20:58 -0800 Subject: [PATCH 259/460] (ci/cd) vertex ai test --- litellm/tests/test_amazing_vertex_completion.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/litellm/tests/test_amazing_vertex_completion.py b/litellm/tests/test_amazing_vertex_completion.py index 6a3f5cab7..8b6821caa 100644 --- a/litellm/tests/test_amazing_vertex_completion.py +++ b/litellm/tests/test_amazing_vertex_completion.py @@ -75,7 +75,7 @@ def test_vertex_ai(): test_models = random.sample(test_models, 4) for model in test_models: try: - if model in ["code-gecko@001", "code-gecko@latest", "code-bison@001"]: + if model in ["code-gecko@001", "code-gecko@latest", "code-bison@001", "text-bison@001"]: # our account does not have access to this model continue print("making request", model) @@ -98,7 +98,7 @@ def test_vertex_ai_stream(): test_models = random.sample(test_models, 4) for model in test_models: try: - if model in ["code-gecko@001", "code-gecko@latest", "code-bison@001"]: + if model in ["code-gecko@001", "code-gecko@latest", "code-bison@001", "text-bison@001"]: # our account does not have access to this model continue print("making request", model) From f99e3a381867d332c0d0f68da4cdd7fb88909fb7 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Thu, 7 Dec 2023 18:37:06 -0800 Subject: [PATCH 260/460] (fix) undo commit fd04b48 --- litellm/utils.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/litellm/utils.py b/litellm/utils.py index 879447194..e2feb6a12 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -1425,6 +1425,10 @@ def client(original_function): return litellm.stream_chunk_builder(chunks, messages=kwargs.get("messages", None)) else: return result + elif "acompletion" in kwargs and kwargs["acompletion"] == True: + return result + elif "aembedding" in kwargs and kwargs["aembedding"] == True: + return result ### POST-CALL RULES ### post_call_processing(original_response=result, model=model) @@ -1435,7 +1439,6 @@ def client(original_function): # LOG SUCCESS - handle streaming success logging in the _next_ object, remove `handle_success` once it's deprecated print_verbose(f"Wrapper: Completed Call, calling async_success_handler") - asyncio.run(logging_obj.async_success_handler(result, start_time, end_time)) threading.Thread(target=logging_obj.success_handler, args=(result, start_time, end_time)).start() # threading.Thread(target=logging_obj.success_handler, args=(result, start_time, end_time)).start() my_thread = threading.Thread( @@ -1443,10 +1446,6 @@ def client(original_function): ) # don't interrupt execution of main thread my_thread.start() # RETURN RESULT - if "acompletion" in kwargs and kwargs["acompletion"] == True: - return result - elif "aembedding" in kwargs and kwargs["aembedding"] == True: - return result result._response_ms = (end_time - start_time).total_seconds() * 1000 # return response latency in ms like openai return result except Exception as e: From b8b15435b7ed446fd0048341addef318b13533cf Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Thu, 7 Dec 2023 18:38:51 -0800 Subject: [PATCH 261/460] (test) undo fd04b48 --- litellm/tests/test_custom_logger.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/litellm/tests/test_custom_logger.py b/litellm/tests/test_custom_logger.py index 333293596..0702cb52c 100644 --- a/litellm/tests/test_custom_logger.py +++ b/litellm/tests/test_custom_logger.py @@ -142,8 +142,8 @@ def test_async_custom_handler(): assert len(str(customHandler2.async_completion_kwargs_fail.get("exception"))) > 10 # exppect APIError("OpenAIException - Error code: 401 - {'error': {'message': 'Incorrect API key provided: test. You can find your API key at https://platform.openai.com/account/api-keys.', 'type': 'invalid_request_error', 'param': None, 'code': 'invalid_api_key'}}"), 'traceback_exception': 'Traceback (most recent call last):\n File "/Users/ishaanjaffer/Github/litellm/litellm/llms/openai.py", line 269, in acompletion\n response = await openai_aclient.chat.completions.create(**data)\n File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/openai/resources/chat/completions.py", line 119 print("Passed setting async failure") - def test_2(): - response = litellm.completion( + async def test_2(): + response = await litellm.acompletion( model="gpt-3.5-turbo", messages=[{ "role": "user", @@ -152,7 +152,7 @@ def test_async_custom_handler(): ) print("\n response", response) assert customHandler2.async_success == False - test_2() + asyncio.run(test_2()) assert customHandler2.async_success == True, "async success is not set to True even after success" assert customHandler2.async_completion_kwargs.get("model") == "gpt-3.5-turbo" From 9cf3051ea2723b8e9d241353a1a157ab7e168951 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Thu, 7 Dec 2023 19:40:06 -0800 Subject: [PATCH 262/460] feat(proxy_server.py): enable background health checks --- litellm/proxy/_types.py | 3 ++ litellm/{ => proxy}/health_check.py | 0 litellm/proxy/proxy_server.py | 75 ++++++++++++++++++++++++----- 3 files changed, 65 insertions(+), 13 deletions(-) rename litellm/{ => proxy}/health_check.py (100%) diff --git a/litellm/proxy/_types.py b/litellm/proxy/_types.py index 029430f09..626ec513c 100644 --- a/litellm/proxy/_types.py +++ b/litellm/proxy/_types.py @@ -111,6 +111,9 @@ class ConfigGeneralSettings(BaseModel): custom_auth: Optional[str] = Field(None, description="override user_api_key_auth with your own auth script - https://docs.litellm.ai/docs/proxy/virtual_keys#custom-auth") max_parallel_requests: Optional[int] = Field(None, description="maximum parallel requests for each api key") infer_model_from_keys: Optional[bool] = Field(None, description="for `/models` endpoint, infers available model based on environment keys (e.g. OPENAI_API_KEY)") + background_health_checks: Optional[bool] = Field(None, description="run health checks in background") + health_check_interval: int = Field(300, description="background health check interval in seconds") + class ConfigYAML(BaseModel): """ diff --git a/litellm/health_check.py b/litellm/proxy/health_check.py similarity index 100% rename from litellm/health_check.py rename to litellm/proxy/health_check.py diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index b4763c11c..bdd415f28 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -98,7 +98,7 @@ from litellm.proxy.utils import ( import pydantic from litellm.proxy._types import * from litellm.caching import DualCache -from litellm.health_check import perform_health_check +from litellm.proxy.health_check import perform_health_check litellm.suppress_debug_info = True from fastapi import FastAPI, Request, HTTPException, status, Depends, BackgroundTasks from fastapi.routing import APIRouter @@ -193,6 +193,9 @@ otel_logging = False prisma_client: Optional[PrismaClient] = None user_api_key_cache = DualCache() user_custom_auth = None +use_background_health_checks = None +health_check_interval = None +health_check_results = {} ### REDIS QUEUE ### async_result = None celery_app_conn = None @@ -418,8 +421,26 @@ def run_ollama_serve(): LiteLLM Warning: proxy started with `ollama` model\n`ollama serve` failed with Exception{e}. \nEnsure you run `ollama serve` """) +async def _run_background_health_check(): + """ + Periodically run health checks in the background on the endpoints. + + Update health_check_results, based on this. + """ + global health_check_results, llm_model_list, health_check_interval + while True: + healthy_endpoints, unhealthy_endpoints = await perform_health_check(model_list=llm_model_list) + + # Update the global variable with the health check results + health_check_results["healthy_endpoints"] = healthy_endpoints + health_check_results["unhealthy_endpoints"] = unhealthy_endpoints + health_check_results["healthy_count"] = len(healthy_endpoints) + health_check_results["unhealthy_count"] = len(unhealthy_endpoints) + + await asyncio.sleep(health_check_interval) + def load_router_config(router: Optional[litellm.Router], config_file_path: str): - global master_key, user_config_file_path, otel_logging, user_custom_auth, user_custom_auth_path + global master_key, user_config_file_path, otel_logging, user_custom_auth, user_custom_auth_path, use_background_health_checks, health_check_interval config = {} try: if os.path.exists(config_file_path): @@ -473,8 +494,15 @@ def load_router_config(router: Optional[litellm.Router], config_file_path: str): custom_auth = general_settings.get("custom_auth", None) if custom_auth: user_custom_auth = get_instance_fn(value=custom_auth, config_file_path=config_file_path) + ### BACKGROUND HEALTH CHECKS ### + # Enable background health checks + use_background_health_checks = general_settings.get("background_health_checks", False) + health_check_interval = general_settings.get("health_check_interval", 300) + ## LITELLM MODULE SETTINGS (e.g. litellm.drop_params=True,..) litellm_settings = config.get('litellm_settings', None) + if litellm_settings is None: + litellm_settings = {} if litellm_settings: # ANSI escape code for blue text blue_color_code = "\033[94m" @@ -711,7 +739,6 @@ def data_generator(response): except: yield f"data: {json.dumps(chunk)}\n\n" - async def async_data_generator(response): print_verbose("inside generator") async for chunk in response: @@ -797,7 +824,7 @@ async def rate_limit_per_token(request: Request, call_next): @router.on_event("startup") async def startup_event(): - global prisma_client, master_key + global prisma_client, master_key, use_background_health_checks import json worker_config = litellm.get_secret("WORKER_CONFIG") @@ -810,6 +837,10 @@ async def startup_event(): # if not, assume it's a json string worker_config = json.loads(os.getenv("WORKER_CONFIG")) initialize(**worker_config) + + if use_background_health_checks: + asyncio.create_task(_run_background_health_check()) # start the background health check coroutine. + print_verbose(f"prisma client - {prisma_client}") if prisma_client: await prisma_client.connect() @@ -824,8 +855,11 @@ async def shutdown_event(): if prisma_client: print("Disconnecting from Prisma") await prisma_client.disconnect() + + ## RESET CUSTOM VARIABLES ## master_key = None user_custom_auth = None + #### API ENDPOINTS #### @router.get("/v1/models", dependencies=[Depends(user_api_key_auth)]) @router.get("/models", dependencies=[Depends(user_api_key_auth)]) # if project requires model list @@ -1326,23 +1360,38 @@ async def config_yaml_endpoint(config_info: ConfigYAML): async def test_endpoint(request: Request): return {"route": request.url.path} -@router.get("/health", description="Check the health of all the endpoints in config.yaml", tags=["health"], dependencies=[Depends(user_api_key_auth)]) +@router.get("/health", tags=["health"], dependencies=[Depends(user_api_key_auth)]) async def health_endpoint(request: Request, model: Optional[str] = fastapi.Query(None, description="Specify the model name (optional)")): - global llm_model_list + """ + Check the health of all the endpoints in config.yaml + + To run health checks in the background, add this to config.yaml: + ``` + general_settings: + # ... other settings + background_health_checks: True + ``` + else, the health checks will be run on models when /health is called. + """ + global health_check_results, use_background_health_checks if llm_model_list is None: raise HTTPException( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail={"error": "Model list not initialized"}, ) - healthy_endpoints, unhealthy_endpoints = await perform_health_check(llm_model_list, model) + + if use_background_health_checks: + return health_check_results + else: + healthy_endpoints, unhealthy_endpoints = await perform_health_check(llm_model_list, model) - return { - "healthy_endpoints": healthy_endpoints, - "unhealthy_endpoints": unhealthy_endpoints, - "healthy_count": len(healthy_endpoints), - "unhealthy_count": len(unhealthy_endpoints), - } + return { + "healthy_endpoints": healthy_endpoints, + "unhealthy_endpoints": unhealthy_endpoints, + "healthy_count": len(healthy_endpoints), + "unhealthy_count": len(unhealthy_endpoints), + } @router.get("/") async def home(request: Request): From a350b80d2864fb984c2205fc5711867bdafa6b8a Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Thu, 7 Dec 2023 19:40:23 -0800 Subject: [PATCH 263/460] =?UTF-8?q?bump:=20version=201.11.1=20=E2=86=92=20?= =?UTF-8?q?1.12.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index be84351ee..4eef95e2e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "litellm" -version = "1.11.1" +version = "1.12.0" description = "Library to easily interface with LLM API providers" authors = ["BerriAI"] license = "MIT License" @@ -55,7 +55,7 @@ requires = ["poetry-core", "wheel"] build-backend = "poetry.core.masonry.api" [tool.commitizen] -version = "1.11.1" +version = "1.12.0" version_files = [ "pyproject.toml:^version" ] From dfba30550833d01d73c77630dcbca35a696a45e3 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Thu, 7 Dec 2023 20:10:36 -0800 Subject: [PATCH 264/460] test: test_router.py fix router testing n --- litellm/tests/test_caching_ssl.py | 6 +++--- litellm/tests/test_router.py | 7 ++++--- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/litellm/tests/test_caching_ssl.py b/litellm/tests/test_caching_ssl.py index bcdea8d41..839e37ea4 100644 --- a/litellm/tests/test_caching_ssl.py +++ b/litellm/tests/test_caching_ssl.py @@ -20,7 +20,7 @@ from litellm.caching import Cache messages = [{"role": "user", "content": f"who is ishaan {time.time()}"}] def test_caching_v2(): # test in memory cache try: - litellm.cache = Cache(type="redis", host="os.environ/REDIS_HOST_2", port="os.environ/REDIS_PORT_2", password="os.environ/REDIS_PASSWORD_2", ssl="os.environ/REDIS_SSL") + litellm.cache = Cache(type="redis", host="os.environ/REDIS_HOST_2", port="os.environ/REDIS_PORT_2", password="os.environ/REDIS_PASSWORD_2", ssl="os.environ/REDIS_SSL_2") response1 = completion(model="gpt-3.5-turbo", messages=messages, caching=True) response2 = completion(model="gpt-3.5-turbo", messages=messages, caching=True) print(f"response1: {response1}") @@ -55,7 +55,7 @@ def test_caching_router(): "rpm": 1800 } ] - litellm.cache = Cache(type="redis", host="os.environ/REDIS_HOST_2", port="os.environ/REDIS_PORT_2", password="os.environ/REDIS_PASSWORD_2", ssl="os.environ/REDIS_SSL") + litellm.cache = Cache(type="redis", host="os.environ/REDIS_HOST_2", port="os.environ/REDIS_PORT_2", password="os.environ/REDIS_PASSWORD_2", ssl="os.environ/REDIS_SSL_2") router = Router(model_list=model_list, routing_strategy="simple-shuffle", set_verbose=False, @@ -71,4 +71,4 @@ def test_caching_router(): print(f"error occurred: {traceback.format_exc()}") pytest.fail(f"Error occurred: {e}") -test_caching_router() \ No newline at end of file +# test_caching_router() \ No newline at end of file diff --git a/litellm/tests/test_router.py b/litellm/tests/test_router.py index 74141f364..e135f4228 100644 --- a/litellm/tests/test_router.py +++ b/litellm/tests/test_router.py @@ -626,13 +626,14 @@ def test_openai_completion_on_router(): messages=[ { "role": "user", - "content": "hello from litellm test", + "content": f"hello from litellm test {time.time()}", } ], stream=True ) complete_response = "" print(response) + # if you want to see all the attributes and methods async for chunk in response: print(chunk) complete_response += chunk.choices[0].delta.content or "" @@ -675,7 +676,7 @@ def test_openai_completion_on_router(): except Exception as e: traceback.print_exc() pytest.fail(f"Error occurred: {e}") -# test_openai_completion_on_router() +test_openai_completion_on_router() def test_reading_keys_os_environ(): @@ -742,7 +743,7 @@ def test_reading_keys_os_environ(): traceback.print_exc() pytest.fail(f"Error occurred: {e}") -test_reading_keys_os_environ() +# test_reading_keys_os_environ() def test_reading_openai_keys_os_environ(): From f5afc429b3309ff65cc77792b0339cbe3f6936b7 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Thu, 7 Dec 2023 20:35:32 -0800 Subject: [PATCH 265/460] fix(proxy_server.py): add call hooks pre+post completion and embedding calls --- litellm/proxy/proxy_server.py | 30 ++++++++++++++++++++++++++++-- litellm/proxy/utils.py | 33 +++++++++++++++++++++++++++++++-- 2 files changed, 59 insertions(+), 4 deletions(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index bdd415f28..5e5048777 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -93,7 +93,8 @@ def generate_feedback_box(): import litellm from litellm.proxy.utils import ( PrismaClient, - get_instance_fn + get_instance_fn, + CallHooks ) import pydantic from litellm.proxy._types import * @@ -196,6 +197,7 @@ user_custom_auth = None use_background_health_checks = None health_check_interval = None health_check_results = {} +call_hooks = CallHooks() ### REDIS QUEUE ### async_result = None celery_app_conn = None @@ -570,6 +572,8 @@ def load_router_config(router: Optional[litellm.Router], config_file_path: str): litellm_model_name = model["litellm_params"]["model"] if "ollama" in litellm_model_name: run_ollama_serve() + + call_hooks.update_router_config(litellm_settings=litellm_settings, model_list=model_list, general_settings=general_settings) return router, model_list, general_settings async def generate_key_helper_fn(duration_str: Optional[str], models: list, aliases: dict, config: dict, spend: float, token: Optional[str]=None, user_id: Optional[str]=None): @@ -740,9 +744,13 @@ def data_generator(response): yield f"data: {json.dumps(chunk)}\n\n" async def async_data_generator(response): + global call_hooks + print_verbose("inside generator") async for chunk in response: print_verbose(f"returned chunk: {chunk}") + ### CALL HOOKS ### - modify outgoing response + response = call_hooks.post_call_success(chunk=chunk, call_type="completion") try: yield f"data: {json.dumps(chunk.dict())}\n\n" except: @@ -941,7 +949,7 @@ async def completion(request: Request, model: Optional[str] = None, user_api_key @router.post("/chat/completions", dependencies=[Depends(user_api_key_auth)], tags=["chat/completions"]) @router.post("/openai/deployments/{model:path}/chat/completions", dependencies=[Depends(user_api_key_auth)], tags=["chat/completions"]) # azure compatible endpoint async def chat_completion(request: Request, model: Optional[str] = None, user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), background_tasks: BackgroundTasks = BackgroundTasks()): - global general_settings, user_debug + global general_settings, user_debug, call_hooks try: data = {} data = await request.json() # type: ignore @@ -977,6 +985,11 @@ async def chat_completion(request: Request, model: Optional[str] = None, user_ap data["max_tokens"] = user_max_tokens if user_api_base: data["api_base"] = user_api_base + + ### CALL HOOKS ### - modify incoming data before calling the model + data = call_hooks.pre_call(data=data, call_type="completion") + + ### ROUTE THE REQUEST ### router_model_names = [m["model_name"] for m in llm_model_list] if llm_model_list is not None else [] if llm_router is not None and data["model"] in router_model_names: # model in router model list response = await llm_router.acompletion(**data) @@ -986,8 +999,13 @@ async def chat_completion(request: Request, model: Optional[str] = None, user_ap response = await llm_router.acompletion(**data) else: # router is not set response = await litellm.acompletion(**data) + if 'stream' in data and data['stream'] == True: # use generate_responses to stream responses return StreamingResponse(async_data_generator(response), media_type='text/event-stream') + + ### CALL HOOKS ### - modify outgoing response + response = call_hooks.post_call_success(response=response, call_type="completion") + background_tasks.add_task(log_input_output, request, response) # background task for logging to OTEL return response except Exception as e: @@ -1022,6 +1040,7 @@ async def chat_completion(request: Request, model: Optional[str] = None, user_ap @router.post("/embeddings", dependencies=[Depends(user_api_key_auth)], response_class=ORJSONResponse) async def embeddings(request: Request, user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), background_tasks: BackgroundTasks = BackgroundTasks()): try: + global call_hooks # Use orjson to parse JSON data, orjson speeds up requests significantly body = await request.body() @@ -1056,6 +1075,9 @@ async def embeddings(request: Request, user_api_key_dict: UserAPIKeyAuth = Depen input_list.append(litellm.decode(model="gpt-3.5-turbo", tokens=i)) data["input"] = input_list break + + ### CALL HOOKS ### - modify incoming data before calling the model + data = call_hooks.pre_call(data=data, call_type="embeddings") ## ROUTE TO CORRECT ENDPOINT ## if llm_router is not None and data["model"] in router_model_names: # model in router model list @@ -1065,6 +1087,10 @@ async def embeddings(request: Request, user_api_key_dict: UserAPIKeyAuth = Depen else: response = await litellm.aembedding(**data) background_tasks.add_task(log_input_output, request, response) # background task for logging to OTEL + + ### CALL HOOKS ### - modify outgoing response + data = call_hooks.post_call_success(response=response, call_type="embeddings") + return response except Exception as e: traceback.print_exc() diff --git a/litellm/proxy/utils.py b/litellm/proxy/utils.py index 9e4ec5900..41fffb113 100644 --- a/litellm/proxy/utils.py +++ b/litellm/proxy/utils.py @@ -1,4 +1,4 @@ -from typing import Optional, List, Any +from typing import Optional, List, Any, Literal import os, subprocess, hashlib, importlib ### DB CONNECTOR ### @@ -131,4 +131,33 @@ def get_instance_fn(value: str, config_file_path: Optional[str] = None) -> Any: # Re-raise the exception with a user-friendly message raise ImportError(f"Could not import {instance_name} from {module_name}") from e except Exception as e: - raise e \ No newline at end of file + raise e + +### CALL HOOKS ### + +class CallHooks: + """ + Allows users to modify the incoming request / output to the proxy, without having to deal with parsing Request body. + + Covers: + 1. /chat/completions + 2. /embeddings + """ + + def __init__(self, *args, **kwargs): + self.call_details = {} + + def update_router_config(self, litellm_settings: dict, general_settings: dict, model_list: list): + self.call_details["litellm_settings"] = litellm_settings + self.call_details["general_settings"] = general_settings + self.call_details["model_list"] = model_list + + def pre_call(self, data: dict, call_type: Literal["completion", "embeddings"]): + self.call_details["data"] = data + return data + + def post_call_success(self, response: Optional[Any]=None, call_type: Optional[Literal["completion", "embeddings"]]=None, chunk: Optional[Any]=None): + return response + + def post_call_failure(self, *args, **kwargs): + pass \ No newline at end of file From 2f1c5aa0c7c5128ac108e4c6d8d1996bdffbc5cf Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Thu, 7 Dec 2023 20:39:40 -0800 Subject: [PATCH 266/460] fix: setting cache responses on proxy --- litellm/proxy/proxy_server.py | 6 +++++- litellm/router.py | 4 ++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 5e5048777..1b211976f 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -460,6 +460,9 @@ def load_router_config(router: Optional[litellm.Router], config_file_path: str): print_verbose(f"Loaded config YAML (api_key and environment_variables are not shown):\n{json.dumps(printed_yaml, indent=2)}") + ## ROUTER CONFIG + cache_responses = False + ## ENVIRONMENT VARIABLES environment_variables = config.get('environment_variables', None) if environment_variables: @@ -514,6 +517,7 @@ def load_router_config(router: Optional[litellm.Router], config_file_path: str): print(f"{blue_color_code}\nSetting Cache on Proxy") from litellm.caching import Cache cache_type = value["type"] + cache_responses = True cache_host = litellm.get_secret("REDIS_HOST", None) cache_port = litellm.get_secret("REDIS_PORT", None) cache_password = litellm.get_secret("REDIS_PASSWORD", None) @@ -565,7 +569,7 @@ def load_router_config(router: Optional[litellm.Router], config_file_path: str): ## MODEL LIST model_list = config.get('model_list', None) if model_list: - router = litellm.Router(model_list=model_list, num_retries=3) + router = litellm.Router(model_list=model_list, num_retries=3, cache_responses=cache_responses) print(f"\033[32mLiteLLM: Proxy initialized with Config, Set models:\033[0m") for model in model_list: print(f"\033[32m {model.get('model_name', '')}\033[0m") diff --git a/litellm/router.py b/litellm/router.py index 04f518b2d..c6ff34c81 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -53,7 +53,7 @@ class Router: ``` """ model_names: List = [] - cache_responses: Optional[bool] = None + cache_responses: Optional[bool] = False default_cache_time_seconds: int = 1 * 60 * 60 # 1 hour num_retries: int = 0 tenacity = None @@ -65,7 +65,7 @@ class Router: redis_host: Optional[str] = None, redis_port: Optional[int] = None, redis_password: Optional[str] = None, - cache_responses: Optional[bool] = None, + cache_responses: Optional[bool] = False, cache_kwargs: dict = {}, # additional kwargs to pass to RedisCache (see caching.py) ## RELIABILITY ## num_retries: int = 0, From 0406e01c6db1f9043b78ab4dc5bc09506f0c7a63 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Fri, 8 Dec 2023 07:32:23 -0800 Subject: [PATCH 267/460] docs(deploy.md): add proxy perf to docs --- docs/my-website/docs/proxy/deploy.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/my-website/docs/proxy/deploy.md b/docs/my-website/docs/proxy/deploy.md index 5c4657ea3..745d79966 100644 --- a/docs/my-website/docs/proxy/deploy.md +++ b/docs/my-website/docs/proxy/deploy.md @@ -73,3 +73,13 @@ Your LiteLLM container should be running now on the defined port e.g. `8000`. + +## LiteLLM Proxy Performance + +### Throughput - 30% Increase +LiteLLM proxy + Load Balancer gives **30% increase** in throughput compared to Raw OpenAI API + + +### Latency Added - 0.00325 seconds +LiteLLM proxy adds **0.00325 seconds** latency as compared to using the Raw OpenAI API + From d548836903559ca77ffca0a0b66b9ac6de98f079 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Fri, 8 Dec 2023 07:33:33 -0800 Subject: [PATCH 268/460] docs: add proxy req/s --- docs/my-website/docs/proxy/deploy.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/my-website/docs/proxy/deploy.md b/docs/my-website/docs/proxy/deploy.md index 745d79966..051f0af59 100644 --- a/docs/my-website/docs/proxy/deploy.md +++ b/docs/my-website/docs/proxy/deploy.md @@ -76,6 +76,8 @@ Your LiteLLM container should be running now on the defined port e.g. `8000`. ## LiteLLM Proxy Performance +LiteLLM proxy has been load tested to handle 1500 req/s. + ### Throughput - 30% Increase LiteLLM proxy + Load Balancer gives **30% increase** in throughput compared to Raw OpenAI API From 2ede903f0b2219a7bc320ebcbe3e753f8df400d3 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Fri, 8 Dec 2023 07:39:13 -0800 Subject: [PATCH 269/460] docs: fix imports --- docs/my-website/docs/proxy/deploy.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/my-website/docs/proxy/deploy.md b/docs/my-website/docs/proxy/deploy.md index 051f0af59..65ba90eee 100644 --- a/docs/my-website/docs/proxy/deploy.md +++ b/docs/my-website/docs/proxy/deploy.md @@ -80,8 +80,8 @@ LiteLLM proxy has been load tested to handle 1500 req/s. ### Throughput - 30% Increase LiteLLM proxy + Load Balancer gives **30% increase** in throughput compared to Raw OpenAI API - + ### Latency Added - 0.00325 seconds LiteLLM proxy adds **0.00325 seconds** latency as compared to using the Raw OpenAI API - + From 9494c2cd9e2eddf207f21c4cff07846192cb0cba Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Fri, 8 Dec 2023 09:20:04 -0800 Subject: [PATCH 270/460] fix(requirements.txt): add ollama async_generator in requirements.txt --- litellm/proxy/proxy_server.py | 6 ++++-- requirements.txt | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 1b211976f..16aa4c6b4 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -381,9 +381,11 @@ async def track_cost_callback( elif kwargs["stream"] is False: # regular response input_text = kwargs.get("messages", "") if isinstance(input_text, list): - input_text = "".join(m["content"] for m in input_text) + response_cost = litellm.completion_cost(completion_response=completion_response, messages=input_text) + elif isinstance(input_text, str): + response_cost = litellm.completion_cost(completion_response=completion_response, prompt=input_text) print(f"received completion response: {completion_response}") - response_cost = litellm.completion_cost(completion_response=completion_response, completion=input_text) + print("regular response_cost", response_cost) user_api_key = kwargs["litellm_params"]["metadata"].get("user_api_key", None) print(f"user_api_key - {user_api_key}; prisma_client - {prisma_client}") diff --git a/requirements.txt b/requirements.txt index f153c58f3..b6a15fb7a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -16,4 +16,5 @@ prisma celery psutil mangum -google-generativeai \ No newline at end of file +google-generativeai +async_generator # for ollama \ No newline at end of file From 1b35736797f213e5c45f9bde587ea842f3cfbf27 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Fri, 8 Dec 2023 09:53:46 -0800 Subject: [PATCH 271/460] fix(utils.py): fix cost calculation to handle tool input --- litellm/proxy/proxy_server.py | 7 +-- litellm/tests/test_proxy_server_spend.py | 69 ++++++++++++++++++++++++ litellm/utils.py | 7 +-- 3 files changed, 77 insertions(+), 6 deletions(-) create mode 100644 litellm/tests/test_proxy_server_spend.py diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 16aa4c6b4..c6046d059 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -366,6 +366,7 @@ async def track_cost_callback( global prisma_client try: # check if it has collected an entire stream response + print(f"kwargs stream: {kwargs.get('stream', None)} + complete streaming response: {kwargs.get('complete_streaming_response', None)}") if "complete_streaming_response" in kwargs: # for tracking streaming cost we pass the "messages" and the output_text to litellm.completion_cost completion_response=kwargs["complete_streaming_response"] @@ -377,16 +378,16 @@ async def track_cost_callback( completion=output_text ) print("streaming response_cost", response_cost) - # for non streaming responses - elif kwargs["stream"] is False: # regular response + elif kwargs["stream"] == False: # for non streaming responses input_text = kwargs.get("messages", "") + print(f"type of input_text: {type(input_text)}") if isinstance(input_text, list): response_cost = litellm.completion_cost(completion_response=completion_response, messages=input_text) elif isinstance(input_text, str): response_cost = litellm.completion_cost(completion_response=completion_response, prompt=input_text) print(f"received completion response: {completion_response}") - print("regular response_cost", response_cost) + print(f"regular response_cost: {response_cost}") user_api_key = kwargs["litellm_params"]["metadata"].get("user_api_key", None) print(f"user_api_key - {user_api_key}; prisma_client - {prisma_client}") if user_api_key and prisma_client: diff --git a/litellm/tests/test_proxy_server_spend.py b/litellm/tests/test_proxy_server_spend.py new file mode 100644 index 000000000..5e025a334 --- /dev/null +++ b/litellm/tests/test_proxy_server_spend.py @@ -0,0 +1,69 @@ +# import openai, json +# client = openai.OpenAI( +# api_key="sk-1234", +# base_url="http://0.0.0.0:8000" +# ) + +# super_fake_messages = [ +# { +# "role": "user", +# "content": "What's the weather like in San Francisco, Tokyo, and Paris?" +# }, +# { +# "content": None, +# "role": "assistant", +# "tool_calls": [ +# { +# "id": "1", +# "function": { +# "arguments": "{\"location\": \"San Francisco\", \"unit\": \"celsius\"}", +# "name": "get_current_weather" +# }, +# "type": "function" +# }, +# { +# "id": "2", +# "function": { +# "arguments": "{\"location\": \"Tokyo\", \"unit\": \"celsius\"}", +# "name": "get_current_weather" +# }, +# "type": "function" +# }, +# { +# "id": "3", +# "function": { +# "arguments": "{\"location\": \"Paris\", \"unit\": \"celsius\"}", +# "name": "get_current_weather" +# }, +# "type": "function" +# } +# ] +# }, +# { +# "tool_call_id": "1", +# "role": "tool", +# "name": "get_current_weather", +# "content": "{\"location\": \"San Francisco\", \"temperature\": \"90\", \"unit\": \"celsius\"}" +# }, +# { +# "tool_call_id": "2", +# "role": "tool", +# "name": "get_current_weather", +# "content": "{\"location\": \"Tokyo\", \"temperature\": \"30\", \"unit\": \"celsius\"}" +# }, +# { +# "tool_call_id": "3", +# "role": "tool", +# "name": "get_current_weather", +# "content": "{\"location\": \"Paris\", \"temperature\": \"50\", \"unit\": \"celsius\"}" +# } +# ] + +# super_fake_response = client.chat.completions.create( +# model="gpt-3.5-turbo", +# messages=super_fake_messages, +# seed=1337, +# stream=False +# ) # get a new response from the model where it can see the function response + +# print(json.dumps(super_fake_response.model_dump(), indent=4)) \ No newline at end of file diff --git a/litellm/utils.py b/litellm/utils.py index e2feb6a12..cc11e0fbc 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -1858,8 +1858,6 @@ def completion_cost( - If an error occurs during execution, the function returns 0.0 without blocking the user's execution path. """ try: - if messages != []: - prompt = " ".join([message["content"] for message in messages]) # Handle Inputs to completion_cost prompt_tokens = 0 completion_tokens = 0 @@ -1869,7 +1867,10 @@ def completion_cost( completion_tokens = completion_response['usage']['completion_tokens'] model = model or completion_response['model'] # check if user passed an override for model, if it's none check completion_response['model'] else: - prompt_tokens = token_counter(model=model, text=prompt) + if len(messages) > 0: + prompt_tokens = token_counter(model=model, messages=messages) + elif len(prompt) > 0: + prompt_tokens = token_counter(model=model, text=prompt) completion_tokens = token_counter(model=model, text=completion) # Calculate cost based on prompt_tokens, completion_tokens From 4e6a8d09d0adbae9d6f3a1a1f8de4a3413212d6f Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Fri, 8 Dec 2023 10:40:02 -0800 Subject: [PATCH 272/460] fix(proxy/utils.py): tracking db failed writes --- litellm/proxy/utils.py | 32 +++-- litellm/tests/test_proxy_server_spend.py | 145 ++++++++++++----------- 2 files changed, 99 insertions(+), 78 deletions(-) diff --git a/litellm/proxy/utils.py b/litellm/proxy/utils.py index 41fffb113..5cd229214 100644 --- a/litellm/proxy/utils.py +++ b/litellm/proxy/utils.py @@ -70,15 +70,25 @@ class PrismaClient: """ Update existing data """ - hashed_token = self.hash_token(token=token) - data["token"] = hashed_token - await self.db.litellm_verificationtoken.update( - where={ - "token": hashed_token - }, - data={**data} # type: ignore - ) - return {"token": token, "data": data} + try: + hashed_token = self.hash_token(token=token) + data["token"] = hashed_token + await self.db.litellm_verificationtoken.update( + where={ + "token": hashed_token + }, + data={**data} # type: ignore + ) + print("\033[91m" + f"DB write succeeded" + "\033[0m") + return {"token": token, "data": data} + except Exception as e: + print() + print() + print() + print("\033[91m" + f"DB write failed: {e}" + "\033[0m") + print() + print() + print() async def delete_data(self, tokens: List): """ @@ -96,8 +106,7 @@ class PrismaClient: async def disconnect(self): await self.db.disconnect() -# ### CUSTOM FILE ### - +### CUSTOM FILE ### def get_instance_fn(value: str, config_file_path: Optional[str] = None) -> Any: try: print(f"value: {value}") @@ -134,7 +143,6 @@ def get_instance_fn(value: str, config_file_path: Optional[str] = None) -> Any: raise e ### CALL HOOKS ### - class CallHooks: """ Allows users to modify the incoming request / output to the proxy, without having to deal with parsing Request body. diff --git a/litellm/tests/test_proxy_server_spend.py b/litellm/tests/test_proxy_server_spend.py index 5e025a334..0ad897c95 100644 --- a/litellm/tests/test_proxy_server_spend.py +++ b/litellm/tests/test_proxy_server_spend.py @@ -1,69 +1,82 @@ -# import openai, json -# client = openai.OpenAI( -# api_key="sk-1234", -# base_url="http://0.0.0.0:8000" -# ) +import openai, json, time, asyncio +client = openai.AsyncOpenAI( + api_key="sk-1234", + base_url="http://0.0.0.0:8000" +) -# super_fake_messages = [ -# { -# "role": "user", -# "content": "What's the weather like in San Francisco, Tokyo, and Paris?" -# }, -# { -# "content": None, -# "role": "assistant", -# "tool_calls": [ -# { -# "id": "1", -# "function": { -# "arguments": "{\"location\": \"San Francisco\", \"unit\": \"celsius\"}", -# "name": "get_current_weather" -# }, -# "type": "function" -# }, -# { -# "id": "2", -# "function": { -# "arguments": "{\"location\": \"Tokyo\", \"unit\": \"celsius\"}", -# "name": "get_current_weather" -# }, -# "type": "function" -# }, -# { -# "id": "3", -# "function": { -# "arguments": "{\"location\": \"Paris\", \"unit\": \"celsius\"}", -# "name": "get_current_weather" -# }, -# "type": "function" -# } -# ] -# }, -# { -# "tool_call_id": "1", -# "role": "tool", -# "name": "get_current_weather", -# "content": "{\"location\": \"San Francisco\", \"temperature\": \"90\", \"unit\": \"celsius\"}" -# }, -# { -# "tool_call_id": "2", -# "role": "tool", -# "name": "get_current_weather", -# "content": "{\"location\": \"Tokyo\", \"temperature\": \"30\", \"unit\": \"celsius\"}" -# }, -# { -# "tool_call_id": "3", -# "role": "tool", -# "name": "get_current_weather", -# "content": "{\"location\": \"Paris\", \"temperature\": \"50\", \"unit\": \"celsius\"}" -# } -# ] +super_fake_messages = [ + { + "role": "user", + "content": f"What's the weather like in San Francisco, Tokyo, and Paris? {time.time()}" + }, + { + "content": None, + "role": "assistant", + "tool_calls": [ + { + "id": "1", + "function": { + "arguments": "{\"location\": \"San Francisco\", \"unit\": \"celsius\"}", + "name": "get_current_weather" + }, + "type": "function" + }, + { + "id": "2", + "function": { + "arguments": "{\"location\": \"Tokyo\", \"unit\": \"celsius\"}", + "name": "get_current_weather" + }, + "type": "function" + }, + { + "id": "3", + "function": { + "arguments": "{\"location\": \"Paris\", \"unit\": \"celsius\"}", + "name": "get_current_weather" + }, + "type": "function" + } + ] + }, + { + "tool_call_id": "1", + "role": "tool", + "name": "get_current_weather", + "content": "{\"location\": \"San Francisco\", \"temperature\": \"90\", \"unit\": \"celsius\"}" + }, + { + "tool_call_id": "2", + "role": "tool", + "name": "get_current_weather", + "content": "{\"location\": \"Tokyo\", \"temperature\": \"30\", \"unit\": \"celsius\"}" + }, + { + "tool_call_id": "3", + "role": "tool", + "name": "get_current_weather", + "content": "{\"location\": \"Paris\", \"temperature\": \"50\", \"unit\": \"celsius\"}" + } +] -# super_fake_response = client.chat.completions.create( -# model="gpt-3.5-turbo", -# messages=super_fake_messages, -# seed=1337, -# stream=False -# ) # get a new response from the model where it can see the function response +async def chat_completions(): + super_fake_response = await client.chat.completions.create( + model="gpt-3.5-turbo", + messages=super_fake_messages, + seed=1337, + stream=False + ) # get a new response from the model where it can see the function response + await asyncio.sleep(1) + return super_fake_response -# print(json.dumps(super_fake_response.model_dump(), indent=4)) \ No newline at end of file +async def loadtest_fn(n = 2000): + global num_task_cancelled_errors, exception_counts, chat_completions + start = time.time() + tasks = [chat_completions() for _ in range(n)] + chat_completions = await asyncio.gather(*tasks) + successful_completions = [c for c in chat_completions if c is not None] + print(n, time.time() - start, len(successful_completions)) + +# print(json.dumps(super_fake_response.model_dump(), indent=4)) + +asyncio.run(loadtest_fn()) \ No newline at end of file From 7aec95ed7c36d03cfd2334e9516df27857bf0dc6 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Fri, 8 Dec 2023 11:40:19 -0800 Subject: [PATCH 273/460] feat(proxy_server.py): add sentry logging for db read/writes --- litellm/proxy/proxy_server.py | 16 ++- litellm/proxy/utils.py | 155 ++++++++++++++++++----- litellm/tests/test_proxy_server_spend.py | 154 +++++++++++----------- litellm/utils.py | 1 + 4 files changed, 208 insertions(+), 118 deletions(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index c6046d059..66d23331a 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -94,7 +94,8 @@ import litellm from litellm.proxy.utils import ( PrismaClient, get_instance_fn, - CallHooks + CallHooks, + ProxyLogging ) import pydantic from litellm.proxy._types import * @@ -198,6 +199,7 @@ use_background_health_checks = None health_check_interval = None health_check_results = {} call_hooks = CallHooks() +proxy_logging_obj: Optional[ProxyLogging] = None ### REDIS QUEUE ### async_result = None celery_app_conn = None @@ -300,10 +302,10 @@ async def user_api_key_auth(request: Request, api_key: str = fastapi.Security(ap ) def prisma_setup(database_url: Optional[str]): - global prisma_client - if database_url: + global prisma_client, proxy_logging_obj + if database_url is not None and proxy_logging_obj is not None: try: - prisma_client = PrismaClient(database_url=database_url) + prisma_client = PrismaClient(database_url=database_url, proxy_logging_obj=proxy_logging_obj) except Exception as e: print("Error when initializing prisma, Ensure you run pip install prisma", e) @@ -839,11 +841,13 @@ async def rate_limit_per_token(request: Request, call_next): @router.on_event("startup") async def startup_event(): - global prisma_client, master_key, use_background_health_checks + global prisma_client, master_key, use_background_health_checks, proxy_logging_obj import json + ### INITIALIZE GLOBAL LOGGING OBJECT ### + proxy_logging_obj = ProxyLogging() + ### LOAD CONFIG ### worker_config = litellm.get_secret("WORKER_CONFIG") - print(f"worker_config: {worker_config}") print_verbose(f"worker_config: {worker_config}") # check if it's a valid file path if os.path.isfile(worker_config): diff --git a/litellm/proxy/utils.py b/litellm/proxy/utils.py index 5cd229214..0785215f6 100644 --- a/litellm/proxy/utils.py +++ b/litellm/proxy/utils.py @@ -1,9 +1,72 @@ from typing import Optional, List, Any, Literal -import os, subprocess, hashlib, importlib +import os, subprocess, hashlib, importlib, asyncio +import litellm + +### LOGGING ### +class ProxyLogging: + """ + Logging for proxy. + + Implemented mainly to log successful/failed db read/writes. + + Currently just logs this to a provided sentry integration. + """ + + def __init__(self,): + ## INITIALIZE LITELLM CALLBACKS ## + self._init_litellm_callbacks() + pass + + + def _init_litellm_callbacks(self): + if len(litellm.callbacks) > 0: + for callback in litellm.callbacks: + if callback not in litellm.input_callback: + litellm.input_callback.append(callback) + if callback not in litellm.success_callback: + litellm.success_callback.append(callback) + if callback not in litellm.failure_callback: + litellm.failure_callback.append(callback) + if callback not in litellm._async_success_callback: + litellm._async_success_callback.append(callback) + if callback not in litellm._async_failure_callback: + litellm._async_failure_callback.append(callback) + if ( + len(litellm.input_callback) > 0 + or len(litellm.success_callback) > 0 + or len(litellm.failure_callback) > 0 + ) and len(callback_list) == 0: + callback_list = list( + set( + litellm.input_callback + + litellm.success_callback + + litellm.failure_callback + ) + ) + litellm.utils.set_callbacks( + callback_list=callback_list + ) + + async def success_handler(self, *args, **kwargs): + """ + Log successful db read/writes + """ + pass + + async def failure_handler(self, original_exception): + """ + Log failed db read/writes + + Currently only logs exceptions to sentry + """ + print(f"reaches failure handler logging - {original_exception}; sentry: {litellm.utils.capture_exception}") + if litellm.utils.capture_exception: + litellm.utils.capture_exception(error=original_exception) + ### DB CONNECTOR ### class PrismaClient: - def __init__(self, database_url: str): + def __init__(self, database_url: str, proxy_logging_obj: ProxyLogging): print("LiteLLM: DATABASE_URL Set in config, trying to 'pip install prisma'") os.environ["DATABASE_URL"] = database_url # Save the current working directory @@ -22,6 +85,9 @@ class PrismaClient: from prisma import Client # type: ignore self.db = Client() #Client to connect to Prisma db + ## init logging object + self.proxy_logging_obj = proxy_logging_obj + def hash_token(self, token: str): # Hash the string using SHA-256 hashed_token = hashlib.sha256(token.encode()).hexdigest() @@ -29,42 +95,48 @@ class PrismaClient: return hashed_token async def get_data(self, token: str, expires: Optional[Any]=None): - hashed_token = self.hash_token(token=token) - if expires: - response = await self.db.litellm_verificationtoken.find_first( + try: + hashed_token = self.hash_token(token=token) + if expires: + response = await self.db.litellm_verificationtoken.find_first( + where={ + "token": hashed_token, + "expires": {"gte": expires} # Check if the token is not expired + } + ) + else: + response = await self.db.litellm_verificationtoken.find_unique( where={ - "token": hashed_token, - "expires": {"gte": expires} # Check if the token is not expired + "token": hashed_token } ) - else: - response = await self.db.litellm_verificationtoken.find_unique( - where={ - "token": hashed_token - } - ) - return response + return response + except Exception as e: + asyncio.create_task(self.proxy_logging_obj.failure_handler(original_exception=e)) async def insert_data(self, data: dict): """ Add a key to the database. If it already exists, do nothing. """ - token = data["token"] - hashed_token = self.hash_token(token=token) - data["token"] = hashed_token - print(f"passed in data: {data}; hashed_token: {hashed_token}") + try: + token = data["token"] + hashed_token = self.hash_token(token=token) + data["token"] = hashed_token + print(f"passed in data: {data}; hashed_token: {hashed_token}") - new_verification_token = await self.db.litellm_verificationtoken.upsert( # type: ignore - where={ - 'token': hashed_token, - }, - data={ - "create": {**data}, #type: ignore - "update": {} # don't do anything if it already exists - } - ) + new_verification_token = await self.db.litellm_verificationtoken.upsert( # type: ignore + where={ + 'token': hashed_token, + }, + data={ + "create": {**data}, #type: ignore + "update": {} # don't do anything if it already exists + } + ) - return new_verification_token + return new_verification_token + except Exception as e: + asyncio.create_task(self.proxy_logging_obj.failure_handler(original_exception=e)) async def update_data(self, token: str, data: dict): """ @@ -82,6 +154,7 @@ class PrismaClient: print("\033[91m" + f"DB write succeeded" + "\033[0m") return {"token": token, "data": data} except Exception as e: + asyncio.create_task(self.proxy_logging_obj.failure_handler(original_exception=e)) print() print() print() @@ -90,21 +163,31 @@ class PrismaClient: print() print() + async def delete_data(self, tokens: List): """ Allow user to delete a key(s) """ - hashed_tokens = [self.hash_token(token=token) for token in tokens] - await self.db.litellm_verificationtoken.delete_many( - where={"token": {"in": hashed_tokens}} - ) - return {"deleted_keys": tokens} + try: + hashed_tokens = [self.hash_token(token=token) for token in tokens] + await self.db.litellm_verificationtoken.delete_many( + where={"token": {"in": hashed_tokens}} + ) + return {"deleted_keys": tokens} + except Exception as e: + asyncio.create_task(self.proxy_logging_obj.failure_handler(original_exception=e)) async def connect(self): - await self.db.connect() + try: + await self.db.connect() + except Exception as e: + asyncio.create_task(self.proxy_logging_obj.failure_handler(original_exception=e)) async def disconnect(self): - await self.db.disconnect() + try: + await self.db.disconnect() + except Exception as e: + asyncio.create_task(self.proxy_logging_obj.failure_handler(original_exception=e)) ### CUSTOM FILE ### def get_instance_fn(value: str, config_file_path: Optional[str] = None) -> Any: @@ -142,6 +225,8 @@ def get_instance_fn(value: str, config_file_path: Optional[str] = None) -> Any: except Exception as e: raise e + + ### CALL HOOKS ### class CallHooks: """ diff --git a/litellm/tests/test_proxy_server_spend.py b/litellm/tests/test_proxy_server_spend.py index 0ad897c95..f64ad8987 100644 --- a/litellm/tests/test_proxy_server_spend.py +++ b/litellm/tests/test_proxy_server_spend.py @@ -1,82 +1,82 @@ -import openai, json, time, asyncio -client = openai.AsyncOpenAI( - api_key="sk-1234", - base_url="http://0.0.0.0:8000" -) +# import openai, json, time, asyncio +# client = openai.AsyncOpenAI( +# api_key="sk-1234", +# base_url="http://0.0.0.0:8000" +# ) -super_fake_messages = [ - { - "role": "user", - "content": f"What's the weather like in San Francisco, Tokyo, and Paris? {time.time()}" - }, - { - "content": None, - "role": "assistant", - "tool_calls": [ - { - "id": "1", - "function": { - "arguments": "{\"location\": \"San Francisco\", \"unit\": \"celsius\"}", - "name": "get_current_weather" - }, - "type": "function" - }, - { - "id": "2", - "function": { - "arguments": "{\"location\": \"Tokyo\", \"unit\": \"celsius\"}", - "name": "get_current_weather" - }, - "type": "function" - }, - { - "id": "3", - "function": { - "arguments": "{\"location\": \"Paris\", \"unit\": \"celsius\"}", - "name": "get_current_weather" - }, - "type": "function" - } - ] - }, - { - "tool_call_id": "1", - "role": "tool", - "name": "get_current_weather", - "content": "{\"location\": \"San Francisco\", \"temperature\": \"90\", \"unit\": \"celsius\"}" - }, - { - "tool_call_id": "2", - "role": "tool", - "name": "get_current_weather", - "content": "{\"location\": \"Tokyo\", \"temperature\": \"30\", \"unit\": \"celsius\"}" - }, - { - "tool_call_id": "3", - "role": "tool", - "name": "get_current_weather", - "content": "{\"location\": \"Paris\", \"temperature\": \"50\", \"unit\": \"celsius\"}" - } -] +# super_fake_messages = [ +# { +# "role": "user", +# "content": f"What's the weather like in San Francisco, Tokyo, and Paris? {time.time()}" +# }, +# { +# "content": None, +# "role": "assistant", +# "tool_calls": [ +# { +# "id": "1", +# "function": { +# "arguments": "{\"location\": \"San Francisco\", \"unit\": \"celsius\"}", +# "name": "get_current_weather" +# }, +# "type": "function" +# }, +# { +# "id": "2", +# "function": { +# "arguments": "{\"location\": \"Tokyo\", \"unit\": \"celsius\"}", +# "name": "get_current_weather" +# }, +# "type": "function" +# }, +# { +# "id": "3", +# "function": { +# "arguments": "{\"location\": \"Paris\", \"unit\": \"celsius\"}", +# "name": "get_current_weather" +# }, +# "type": "function" +# } +# ] +# }, +# { +# "tool_call_id": "1", +# "role": "tool", +# "name": "get_current_weather", +# "content": "{\"location\": \"San Francisco\", \"temperature\": \"90\", \"unit\": \"celsius\"}" +# }, +# { +# "tool_call_id": "2", +# "role": "tool", +# "name": "get_current_weather", +# "content": "{\"location\": \"Tokyo\", \"temperature\": \"30\", \"unit\": \"celsius\"}" +# }, +# { +# "tool_call_id": "3", +# "role": "tool", +# "name": "get_current_weather", +# "content": "{\"location\": \"Paris\", \"temperature\": \"50\", \"unit\": \"celsius\"}" +# } +# ] -async def chat_completions(): - super_fake_response = await client.chat.completions.create( - model="gpt-3.5-turbo", - messages=super_fake_messages, - seed=1337, - stream=False - ) # get a new response from the model where it can see the function response - await asyncio.sleep(1) - return super_fake_response +# async def chat_completions(): +# super_fake_response = await client.chat.completions.create( +# model="gpt-3.5-turbo", +# messages=super_fake_messages, +# seed=1337, +# stream=False +# ) # get a new response from the model where it can see the function response +# await asyncio.sleep(1) +# return super_fake_response -async def loadtest_fn(n = 2000): - global num_task_cancelled_errors, exception_counts, chat_completions - start = time.time() - tasks = [chat_completions() for _ in range(n)] - chat_completions = await asyncio.gather(*tasks) - successful_completions = [c for c in chat_completions if c is not None] - print(n, time.time() - start, len(successful_completions)) +# async def loadtest_fn(n = 1): +# global num_task_cancelled_errors, exception_counts, chat_completions +# start = time.time() +# tasks = [chat_completions() for _ in range(n)] +# chat_completions = await asyncio.gather(*tasks) +# successful_completions = [c for c in chat_completions if c is not None] +# print(n, time.time() - start, len(successful_completions)) -# print(json.dumps(super_fake_response.model_dump(), indent=4)) +# # print(json.dumps(super_fake_response.model_dump(), indent=4)) -asyncio.run(loadtest_fn()) \ No newline at end of file +# asyncio.run(loadtest_fn()) \ No newline at end of file diff --git a/litellm/utils.py b/litellm/utils.py index cc11e0fbc..837705195 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -1127,6 +1127,7 @@ class Logging: f"LiteLLM.LoggingError: [Non-Blocking] Exception occurred while failure logging {traceback.format_exc()}" ) pass + async def async_failure_handler(self, exception, traceback_exception, start_time=None, end_time=None): """ Implementing async callbacks, to handle asyncio event loop issues when custom integrations need to use async functions. From 5a9b58b2bba49add892538ca8bc9573685460d9e Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Fri, 8 Dec 2023 11:41:14 -0800 Subject: [PATCH 274/460] =?UTF-8?q?bump:=20version=201.12.0=20=E2=86=92=20?= =?UTF-8?q?1.12.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 4eef95e2e..765428f4f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "litellm" -version = "1.12.0" +version = "1.12.1" description = "Library to easily interface with LLM API providers" authors = ["BerriAI"] license = "MIT License" @@ -55,7 +55,7 @@ requires = ["poetry-core", "wheel"] build-backend = "poetry.core.masonry.api" [tool.commitizen] -version = "1.12.0" +version = "1.12.1" version_files = [ "pyproject.toml:^version" ] From 9b0afbe2cbd478582a5287950448591888b37c9d Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Fri, 8 Dec 2023 11:27:07 -0800 Subject: [PATCH 275/460] (fix) bug - caching: gen cache key in order --- litellm/caching.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/litellm/caching.py b/litellm/caching.py index 4f000689c..ceba18835 100644 --- a/litellm/caching.py +++ b/litellm/caching.py @@ -223,13 +223,17 @@ class Cache: str: The cache key generated from the arguments, or None if no cache key could be generated. """ cache_key ="" - for param in kwargs: + # sort kwargs by keys, since model: [gpt-4, temperature: 0.2, max_tokens: 200] == [temperature: 0.2, max_tokens: 200, model: gpt-4] + completion_kwargs = ["model", "messages", "temperature", "top_p", "n", "stop", "max_tokens", "presence_penalty", "frequency_penalty", "logit_bias", "user", "response_format", "seed", "tools", "tool_choice"] + for param in completion_kwargs: # ignore litellm params here - if param in set(["model", "messages", "temperature", "top_p", "n", "stop", "max_tokens", "presence_penalty", "frequency_penalty", "logit_bias", "user", "response_format", "seed", "tools", "tool_choice"]): + if param in kwargs: # check if param == model and model_group is passed in, then override model with model_group if param == "model" and kwargs.get("metadata", None) is not None and kwargs["metadata"].get("model_group", None) is not None: param_value = kwargs["metadata"].get("model_group", None) # for litellm.Router use model_group for caching over `model` else: + if kwargs[param] is None: + continue # ignore None params param_value = kwargs[param] cache_key+= f"{str(param)}: {str(param_value)}" return cache_key From 6e8ad10991fde8aa5a9eeedc56b10863ba15736a Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Fri, 8 Dec 2023 11:48:11 -0800 Subject: [PATCH 276/460] (feat) caching - streaming caching support --- litellm/caching.py | 3 -- litellm/utils.py | 70 +++++++++++++++++++++++++++++++++++----------- 2 files changed, 54 insertions(+), 19 deletions(-) diff --git a/litellm/caching.py b/litellm/caching.py index ceba18835..dc4c339f2 100644 --- a/litellm/caching.py +++ b/litellm/caching.py @@ -262,9 +262,6 @@ class Cache: cache_key = self.get_cache_key(*args, **kwargs) if cache_key is not None: cached_result = self.cache.get_cache(cache_key) - if cached_result != None and 'stream' in kwargs and kwargs['stream'] == True: - # if streaming is true and we got a cache hit, return a generator - return self.generate_streaming_content(cached_result["choices"][0]['message']['content']) return cached_result except Exception as e: logging.debug(f"An exception occurred: {traceback.format_exc()}") diff --git a/litellm/utils.py b/litellm/utils.py index 837705195..0c1ebc6ac 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -817,19 +817,6 @@ class Logging: if callback == "api_manager": print_verbose("reaches api manager for updating model cost") litellm.apiManager.update_cost(completion_obj=result, user=self.user) - if callback == "cache": - if litellm.cache != None and self.model_call_details.get('optional_params', {}).get('stream', False) == True: - litellm_call_id = self.litellm_params["litellm_call_id"] - if litellm_call_id in self.litellm_params["stream_response"]: - # append for the given call_id - if self.litellm_params["stream_response"][litellm_call_id]["choices"][0]["message"]["content"] == "default": - self.litellm_params["stream_response"][litellm_call_id]["choices"][0]["message"]["content"] = result["content"] # handle first try - else: - self.litellm_params["stream_response"][litellm_call_id]["choices"][0]["message"]["content"] += result["content"] - else: # init a streaming response for this call id - new_model_response = ModelResponse(choices=[Choices(message=Message(content="default"))]) - self.litellm_params["stream_response"][litellm_call_id] = new_model_response - litellm.cache.add_cache(self.litellm_params["stream_response"][litellm_call_id], **self.model_call_details) if callback == "promptlayer": print_verbose("reaches promptlayer for logging!") promptLayerLogger.log_event( @@ -937,6 +924,16 @@ class Logging: end_time=end_time, print_verbose=print_verbose, ) + if callback == "cache": + # this only logs streaming once, complete_streaming_response exists i.e when stream ends + kwargs = self.model_call_details + if self.stream: + if "complete_streaming_response" not in kwargs: + return + else: + result = kwargs["complete_streaming_response"] + # only add to cache once we have a complete streaming response + litellm.cache.add_cache(result, **kwargs) if callback == "traceloop": deep_copy = {} for k, v in self.model_call_details.items(): @@ -1401,7 +1398,6 @@ def client(original_function): print_verbose(f"Checking Cache") cached_result = litellm.cache.get_cache(*args, **kwargs) if cached_result != None: - print_verbose(f"Cache Hit!") if "detail" in cached_result: # implies an error occurred pass @@ -1409,7 +1405,7 @@ def client(original_function): call_type = original_function.__name__ print_verbose(f"Cache Response Object routing: call_type - {call_type}; cached_result instace: {type(cached_result)}") if call_type == CallTypes.completion.value and isinstance(cached_result, dict): - return convert_to_model_response_object(response_object=cached_result, model_response_object=ModelResponse()) + return convert_to_model_response_object(response_object=cached_result, model_response_object=ModelResponse(), stream = kwargs.get("stream", False)) elif call_type == CallTypes.embedding.value and isinstance(cached_result, dict): return convert_to_model_response_object(response_object=cached_result, response_type="embedding") else: @@ -3414,12 +3410,54 @@ def handle_failure(exception, traceback_exception, start_time, end_time, args, k exception_logging(logger_fn=user_logger_fn, exception=e) pass +def convert_to_streaming_response(response_object: Optional[dict]=None): + # used for yielding Cache hits when stream == True + if response_object is None: + raise Exception("Error in response object format") -def convert_to_model_response_object(response_object: Optional[dict]=None, model_response_object: Optional[Union[ModelResponse, EmbeddingResponse]]=None, response_type: Literal["completion", "embedding"] = "completion"): + model_response_object = ModelResponse(stream=True) + choice_list=[] + for idx, choice in enumerate(response_object["choices"]): + delta = Delta( + content=choice["message"].get("content", None), + role=choice["message"]["role"], + function_call=choice["message"].get("function_call", None), + tool_calls=choice["message"].get("tool_calls", None) + ) + finish_reason = choice.get("finish_reason", None) + if finish_reason == None: + # gpt-4 vision can return 'finish_reason' or 'finish_details' + finish_reason = choice.get("finish_details") + choice = StreamingChoices(finish_reason=finish_reason, index=idx, delta=delta) + choice_list.append(choice) + model_response_object.choices = choice_list + + if "usage" in response_object and response_object["usage"] is not None: + model_response_object.usage.completion_tokens = response_object["usage"].get("completion_tokens", 0) # type: ignore + model_response_object.usage.prompt_tokens = response_object["usage"].get("prompt_tokens", 0) # type: ignore + model_response_object.usage.total_tokens = response_object["usage"].get("total_tokens", 0) # type: ignore + + if "id" in response_object: + model_response_object.id = response_object["id"] + + if "system_fingerprint" in response_object: + model_response_object.system_fingerprint = response_object["system_fingerprint"] + + if "model" in response_object: + model_response_object.model = response_object["model"] + yield model_response_object + + +def convert_to_model_response_object(response_object: Optional[dict]=None, model_response_object: Optional[Union[ModelResponse, EmbeddingResponse]]=None, response_type: Literal["completion", "embedding"] = "completion", stream = False): try: if response_type == "completion" and (model_response_object is None or isinstance(model_response_object, ModelResponse)): if response_object is None or model_response_object is None: raise Exception("Error in response object format") + if stream == True: + # for returning cached responses, we need to yield a generator + return convert_to_streaming_response( + response_object=response_object + ) choice_list=[] for idx, choice in enumerate(response_object["choices"]): message = Message( From fa8ba9dd4ec8dcf2a8649beedb437afd524bc09f Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Fri, 8 Dec 2023 11:50:36 -0800 Subject: [PATCH 277/460] (test) cache + streaming --- litellm/tests/test_caching.py | 41 +++++++++++++++++++++++++++++++---- 1 file changed, 37 insertions(+), 4 deletions(-) diff --git a/litellm/tests/test_caching.py b/litellm/tests/test_caching.py index a0980e9de..dd7264eec 100644 --- a/litellm/tests/test_caching.py +++ b/litellm/tests/test_caching.py @@ -36,7 +36,7 @@ def test_caching_v2(): # test in memory cache print(f"error occurred: {traceback.format_exc()}") pytest.fail(f"Error occurred: {e}") -test_caching_v2() +# test_caching_v2() @@ -158,9 +158,9 @@ def test_redis_cache_completion(): messages = [{"role": "user", "content": f"write a one sentence poem about: {random_number}"}] litellm.cache = Cache(type="redis", host=os.environ['REDIS_HOST'], port=os.environ['REDIS_PORT'], password=os.environ['REDIS_PASSWORD']) print("test2 for caching") - response1 = completion(model="gpt-3.5-turbo", messages=messages, caching=True, max_tokens=10, seed=1222) - response2 = completion(model="gpt-3.5-turbo", messages=messages, caching=True, max_tokens=10, seed=1222) - response3 = completion(model="gpt-3.5-turbo", messages=messages, caching=True, temperature=1) + response1 = completion(model="gpt-3.5-turbo", messages=messages, caching=True, max_tokens=20) + response2 = completion(model="gpt-3.5-turbo", messages=messages, caching=True, max_tokens=20) + response3 = completion(model="gpt-3.5-turbo", messages=messages, caching=True, temperature=0.5) response4 = completion(model="command-nightly", messages=messages, caching=True) print("\nresponse 1", response1) @@ -192,6 +192,39 @@ def test_redis_cache_completion(): # test_redis_cache_completion() +def test_redis_cache_completion_stream(): + try: + litellm.set_verbose = False + random_number = random.randint(1, 100000) # add a random number to ensure it's always adding / reading from cache + messages = [{"role": "user", "content": f"write a one sentence poem about: {random_number}"}] + litellm.cache = Cache(type="redis", host=os.environ['REDIS_HOST'], port=os.environ['REDIS_PORT'], password=os.environ['REDIS_PASSWORD']) + print("test for caching, streaming + completion") + response1 = completion(model="gpt-3.5-turbo", messages=messages, max_tokens=40, temperature=0.2, stream=True) + response_1_content = "" + for chunk in response1: + print(chunk) + response_1_content += chunk.choices[0].delta.content or "" + print(response_1_content) + time.sleep(0.5) + response2 = completion(model="gpt-3.5-turbo", messages=messages, max_tokens=40, temperature=0.2, stream=True) + response_2_content = "" + for chunk in response2: + print(chunk) + response_2_content += chunk.choices[0].delta.content or "" + print("\nresponse 1", response_1_content) + print("\nresponse 2", response_2_content) + assert response_1_content == response_2_content, f"Response 1 != Response 2. Same params, Response 1{response_1_content} != Response 2{response_2_content}" + litellm.cache = None + except Exception as e: + print(e) + raise e + """ + + 1 & 2 should be exactly the same + """ +# test_redis_cache_completion_stream() + + # redis cache with custom keys def custom_get_cache_key(*args, **kwargs): # return key to use for your cache: From f06c3e0f08cddd8079955f355612e2517c076055 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Fri, 8 Dec 2023 11:58:03 -0800 Subject: [PATCH 278/460] fix(proxy_server.py): initializing sentry in proxy logging before db init --- litellm/proxy/proxy_server.py | 82 ++++++++++++++++++----------------- litellm/proxy/utils.py | 11 ++--- 2 files changed, 48 insertions(+), 45 deletions(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 66d23331a..aa4e51e47 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -303,7 +303,10 @@ async def user_api_key_auth(request: Request, api_key: str = fastapi.Security(ap def prisma_setup(database_url: Optional[str]): global prisma_client, proxy_logging_obj - if database_url is not None and proxy_logging_obj is not None: + ### INITIALIZE GLOBAL LOGGING OBJECT ### + proxy_logging_obj = ProxyLogging() + + if database_url is not None: try: prisma_client = PrismaClient(database_url=database_url, proxy_logging_obj=proxy_logging_obj) except Exception as e: @@ -474,41 +477,6 @@ def load_router_config(router: Optional[litellm.Router], config_file_path: str): for key, value in environment_variables.items(): os.environ[key] = value - ## GENERAL SERVER SETTINGS (e.g. master key,..) - general_settings = config.get("general_settings", {}) - if general_settings is None: - general_settings = {} - if general_settings: - ### LOAD FROM AZURE KEY VAULT ### - use_azure_key_vault = general_settings.get("use_azure_key_vault", False) - load_from_azure_key_vault(use_azure_key_vault=use_azure_key_vault) - ### CONNECT TO DATABASE ### - database_url = general_settings.get("database_url", None) - if database_url and database_url.startswith("os.environ/"): - database_url = litellm.get_secret(database_url) - prisma_setup(database_url=database_url) - ## COST TRACKING ## - cost_tracking() - ### START REDIS QUEUE ### - use_queue = general_settings.get("use_queue", False) - celery_setup(use_queue=use_queue) - ### MASTER KEY ### - master_key = general_settings.get("master_key", None) - if master_key and master_key.startswith("os.environ/"): - master_key = litellm.get_secret(master_key) - #### OpenTelemetry Logging (OTEL) ######## - otel_logging = general_settings.get("otel", False) - if otel_logging == True: - print("\nOpenTelemetry Logging Activated") - ### CUSTOM API KEY AUTH ### - custom_auth = general_settings.get("custom_auth", None) - if custom_auth: - user_custom_auth = get_instance_fn(value=custom_auth, config_file_path=config_file_path) - ### BACKGROUND HEALTH CHECKS ### - # Enable background health checks - use_background_health_checks = general_settings.get("background_health_checks", False) - health_check_interval = general_settings.get("health_check_interval", 300) - ## LITELLM MODULE SETTINGS (e.g. litellm.drop_params=True,..) litellm_settings = config.get('litellm_settings', None) if litellm_settings is None: @@ -570,7 +538,42 @@ def load_router_config(router: Optional[litellm.Router], config_file_path: str): print_verbose(f"{blue_color_code} Initialized Success Callbacks - {litellm.failure_callback} {reset_color_code}") else: setattr(litellm, key, value) - + + ## GENERAL SERVER SETTINGS (e.g. master key,..) # do this after initializing litellm, to ensure sentry logging works for proxylogging + general_settings = config.get("general_settings", {}) + if general_settings is None: + general_settings = {} + if general_settings: + ### LOAD FROM AZURE KEY VAULT ### + use_azure_key_vault = general_settings.get("use_azure_key_vault", False) + load_from_azure_key_vault(use_azure_key_vault=use_azure_key_vault) + ### CONNECT TO DATABASE ### + database_url = general_settings.get("database_url", None) + if database_url and database_url.startswith("os.environ/"): + database_url = litellm.get_secret(database_url) + prisma_setup(database_url=database_url) + ## COST TRACKING ## + cost_tracking() + ### START REDIS QUEUE ### + use_queue = general_settings.get("use_queue", False) + celery_setup(use_queue=use_queue) + ### MASTER KEY ### + master_key = general_settings.get("master_key", None) + if master_key and master_key.startswith("os.environ/"): + master_key = litellm.get_secret(master_key) + #### OpenTelemetry Logging (OTEL) ######## + otel_logging = general_settings.get("otel", False) + if otel_logging == True: + print("\nOpenTelemetry Logging Activated") + ### CUSTOM API KEY AUTH ### + custom_auth = general_settings.get("custom_auth", None) + if custom_auth: + user_custom_auth = get_instance_fn(value=custom_auth, config_file_path=config_file_path) + ### BACKGROUND HEALTH CHECKS ### + # Enable background health checks + use_background_health_checks = general_settings.get("background_health_checks", False) + health_check_interval = general_settings.get("health_check_interval", 300) + ## MODEL LIST model_list = config.get('model_list', None) if model_list: @@ -841,10 +844,8 @@ async def rate_limit_per_token(request: Request, call_next): @router.on_event("startup") async def startup_event(): - global prisma_client, master_key, use_background_health_checks, proxy_logging_obj + global prisma_client, master_key, use_background_health_checks import json - ### INITIALIZE GLOBAL LOGGING OBJECT ### - proxy_logging_obj = ProxyLogging() ### LOAD CONFIG ### worker_config = litellm.get_secret("WORKER_CONFIG") @@ -857,6 +858,7 @@ async def startup_event(): worker_config = json.loads(os.getenv("WORKER_CONFIG")) initialize(**worker_config) + if use_background_health_checks: asyncio.create_task(_run_background_health_check()) # start the background health check coroutine. diff --git a/litellm/proxy/utils.py b/litellm/proxy/utils.py index 0785215f6..8ddadd6b1 100644 --- a/litellm/proxy/utils.py +++ b/litellm/proxy/utils.py @@ -31,11 +31,12 @@ class ProxyLogging: litellm._async_success_callback.append(callback) if callback not in litellm._async_failure_callback: litellm._async_failure_callback.append(callback) + if ( len(litellm.input_callback) > 0 or len(litellm.success_callback) > 0 or len(litellm.failure_callback) > 0 - ) and len(callback_list) == 0: + ): callback_list = list( set( litellm.input_callback @@ -59,7 +60,6 @@ class ProxyLogging: Currently only logs exceptions to sentry """ - print(f"reaches failure handler logging - {original_exception}; sentry: {litellm.utils.capture_exception}") if litellm.utils.capture_exception: litellm.utils.capture_exception(error=original_exception) @@ -68,6 +68,9 @@ class ProxyLogging: class PrismaClient: def __init__(self, database_url: str, proxy_logging_obj: ProxyLogging): print("LiteLLM: DATABASE_URL Set in config, trying to 'pip install prisma'") + ## init logging object + self.proxy_logging_obj = proxy_logging_obj + os.environ["DATABASE_URL"] = database_url # Save the current working directory original_dir = os.getcwd() @@ -85,8 +88,7 @@ class PrismaClient: from prisma import Client # type: ignore self.db = Client() #Client to connect to Prisma db - ## init logging object - self.proxy_logging_obj = proxy_logging_obj + def hash_token(self, token: str): # Hash the string using SHA-256 @@ -122,7 +124,6 @@ class PrismaClient: token = data["token"] hashed_token = self.hash_token(token=token) data["token"] = hashed_token - print(f"passed in data: {data}; hashed_token: {hashed_token}") new_verification_token = await self.db.litellm_verificationtoken.upsert( # type: ignore where={ From b8e9e1edc97b27310a2b02c2e124ee3e4d3b5acb Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Fri, 8 Dec 2023 13:14:59 -0800 Subject: [PATCH 279/460] (fix) test caching --- litellm/tests/test_caching.py | 43 +++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/litellm/tests/test_caching.py b/litellm/tests/test_caching.py index dd7264eec..c3bf5478b 100644 --- a/litellm/tests/test_caching.py +++ b/litellm/tests/test_caching.py @@ -194,7 +194,7 @@ def test_redis_cache_completion(): def test_redis_cache_completion_stream(): try: - litellm.set_verbose = False + litellm.set_verbose = True random_number = random.randint(1, 100000) # add a random number to ensure it's always adding / reading from cache messages = [{"role": "user", "content": f"write a one sentence poem about: {random_number}"}] litellm.cache = Cache(type="redis", host=os.environ['REDIS_HOST'], port=os.environ['REDIS_PORT'], password=os.environ['REDIS_PASSWORD']) @@ -222,9 +222,48 @@ def test_redis_cache_completion_stream(): 1 & 2 should be exactly the same """ -# test_redis_cache_completion_stream() +test_redis_cache_completion_stream() +# def test_redis_cache_acompletion_stream(): +# import asyncio +# try: +# litellm.set_verbose = False +# random_number = random.randint(1, 100000) # add a random number to ensure it's always adding / reading from cache +# messages = [{"role": "user", "content": f"write a one sentence poem about: {random_number}"}] +# litellm.cache = Cache(type="redis", host=os.environ['REDIS_HOST'], port=os.environ['REDIS_PORT'], password=os.environ['REDIS_PASSWORD']) +# print("test for caching, streaming + completion") +# response_1_content = "" +# response_2_content = "" + +# async def call1(): +# nonlocal response_1_content +# response1 = await litellm.acompletion(model="gpt-3.5-turbo", messages=messages, max_tokens=40, temperature=0.2, stream=True) +# async for chunk in response1: +# print(chunk) +# response_1_content += chunk.choices[0].delta.content or "" +# print(response_1_content) +# asyncio.run(call1()) +# time.sleep(0.5) +# print("\n\n Response 1 content: ", response_1_content, "\n\n") + +# async def call2(): +# nonlocal response_2_content +# response2 = await litellm.acompletion(model="gpt-3.5-turbo", messages=messages, max_tokens=40, temperature=0.2, stream=True) +# async for chunk in response2: +# print(chunk) +# response_2_content += chunk.choices[0].delta.content or "" +# print(response_2_content) +# asyncio.run(call2()) +# print("\nresponse 1", response_1_content) +# print("\nresponse 2", response_2_content) +# assert response_1_content == response_2_content, f"Response 1 != Response 2. Same params, Response 1{response_1_content} != Response 2{response_2_content}" +# litellm.cache = None +# except Exception as e: +# print(e) +# raise e +# test_redis_cache_acompletion_stream() + # redis cache with custom keys def custom_get_cache_key(*args, **kwargs): # return key to use for your cache: From 9f0b83248a743f2a3c5bc0b836979837c0634e7e Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Fri, 8 Dec 2023 13:34:19 -0800 Subject: [PATCH 280/460] fix(proxy/utils.py): add backoff/retry logic to db read/writes --- litellm/proxy/utils.py | 40 +++++- litellm/tests/test_proxy_server_spend.py | 154 +++++++++++------------ 2 files changed, 116 insertions(+), 78 deletions(-) diff --git a/litellm/proxy/utils.py b/litellm/proxy/utils.py index 8ddadd6b1..ec41ef20a 100644 --- a/litellm/proxy/utils.py +++ b/litellm/proxy/utils.py @@ -1,6 +1,6 @@ from typing import Optional, List, Any, Literal import os, subprocess, hashlib, importlib, asyncio -import litellm +import litellm, backoff ### LOGGING ### class ProxyLogging: @@ -65,6 +65,12 @@ class ProxyLogging: ### DB CONNECTOR ### +# Define the retry decorator with backoff strategy +# Function to be called whenever a retry is about to happen +def on_backoff(details): + # The 'tries' key in the details dictionary contains the number of completed tries + print(f"Backing off... this was attempt #{details['tries']}") + class PrismaClient: def __init__(self, database_url: str, proxy_logging_obj: ProxyLogging): print("LiteLLM: DATABASE_URL Set in config, trying to 'pip install prisma'") @@ -96,6 +102,13 @@ class PrismaClient: return hashed_token + @backoff.on_exception( + backoff.expo, + Exception, # base exception to catch for the backoff + max_tries=3, # maximum number of retries + max_time=10, # maximum total time to retry for + on_backoff=on_backoff, # specifying the function to call on backoff + ) async def get_data(self, token: str, expires: Optional[Any]=None): try: hashed_token = self.hash_token(token=token) @@ -116,6 +129,14 @@ class PrismaClient: except Exception as e: asyncio.create_task(self.proxy_logging_obj.failure_handler(original_exception=e)) + # Define a retrying strategy with exponential backoff + @backoff.on_exception( + backoff.expo, + Exception, # base exception to catch for the backoff + max_tries=3, # maximum number of retries + max_time=10, # maximum total time to retry for + on_backoff=on_backoff, # specifying the function to call on backoff + ) async def insert_data(self, data: dict): """ Add a key to the database. If it already exists, do nothing. @@ -138,7 +159,16 @@ class PrismaClient: return new_verification_token except Exception as e: asyncio.create_task(self.proxy_logging_obj.failure_handler(original_exception=e)) + raise e + # Define a retrying strategy with exponential backoff + @backoff.on_exception( + backoff.expo, + Exception, # base exception to catch for the backoff + max_tries=3, # maximum number of retries + max_time=10, # maximum total time to retry for + on_backoff=on_backoff, # specifying the function to call on backoff + ) async def update_data(self, token: str, data: dict): """ Update existing data @@ -165,6 +195,14 @@ class PrismaClient: print() + # Define a retrying strategy with exponential backoff + @backoff.on_exception( + backoff.expo, + Exception, # base exception to catch for the backoff + max_tries=3, # maximum number of retries + max_time=10, # maximum total time to retry for + on_backoff=on_backoff, # specifying the function to call on backoff + ) async def delete_data(self, tokens: List): """ Allow user to delete a key(s) diff --git a/litellm/tests/test_proxy_server_spend.py b/litellm/tests/test_proxy_server_spend.py index f64ad8987..5569b6731 100644 --- a/litellm/tests/test_proxy_server_spend.py +++ b/litellm/tests/test_proxy_server_spend.py @@ -1,82 +1,82 @@ -# import openai, json, time, asyncio -# client = openai.AsyncOpenAI( -# api_key="sk-1234", -# base_url="http://0.0.0.0:8000" -# ) +import openai, json, time, asyncio +client = openai.AsyncOpenAI( + api_key="sk-1234", + base_url="http://0.0.0.0:8000" +) -# super_fake_messages = [ -# { -# "role": "user", -# "content": f"What's the weather like in San Francisco, Tokyo, and Paris? {time.time()}" -# }, -# { -# "content": None, -# "role": "assistant", -# "tool_calls": [ -# { -# "id": "1", -# "function": { -# "arguments": "{\"location\": \"San Francisco\", \"unit\": \"celsius\"}", -# "name": "get_current_weather" -# }, -# "type": "function" -# }, -# { -# "id": "2", -# "function": { -# "arguments": "{\"location\": \"Tokyo\", \"unit\": \"celsius\"}", -# "name": "get_current_weather" -# }, -# "type": "function" -# }, -# { -# "id": "3", -# "function": { -# "arguments": "{\"location\": \"Paris\", \"unit\": \"celsius\"}", -# "name": "get_current_weather" -# }, -# "type": "function" -# } -# ] -# }, -# { -# "tool_call_id": "1", -# "role": "tool", -# "name": "get_current_weather", -# "content": "{\"location\": \"San Francisco\", \"temperature\": \"90\", \"unit\": \"celsius\"}" -# }, -# { -# "tool_call_id": "2", -# "role": "tool", -# "name": "get_current_weather", -# "content": "{\"location\": \"Tokyo\", \"temperature\": \"30\", \"unit\": \"celsius\"}" -# }, -# { -# "tool_call_id": "3", -# "role": "tool", -# "name": "get_current_weather", -# "content": "{\"location\": \"Paris\", \"temperature\": \"50\", \"unit\": \"celsius\"}" -# } -# ] +super_fake_messages = [ + { + "role": "user", + "content": f"What's the weather like in San Francisco, Tokyo, and Paris? {time.time()}" + }, + { + "content": None, + "role": "assistant", + "tool_calls": [ + { + "id": "1", + "function": { + "arguments": "{\"location\": \"San Francisco\", \"unit\": \"celsius\"}", + "name": "get_current_weather" + }, + "type": "function" + }, + { + "id": "2", + "function": { + "arguments": "{\"location\": \"Tokyo\", \"unit\": \"celsius\"}", + "name": "get_current_weather" + }, + "type": "function" + }, + { + "id": "3", + "function": { + "arguments": "{\"location\": \"Paris\", \"unit\": \"celsius\"}", + "name": "get_current_weather" + }, + "type": "function" + } + ] + }, + { + "tool_call_id": "1", + "role": "tool", + "name": "get_current_weather", + "content": "{\"location\": \"San Francisco\", \"temperature\": \"90\", \"unit\": \"celsius\"}" + }, + { + "tool_call_id": "2", + "role": "tool", + "name": "get_current_weather", + "content": "{\"location\": \"Tokyo\", \"temperature\": \"30\", \"unit\": \"celsius\"}" + }, + { + "tool_call_id": "3", + "role": "tool", + "name": "get_current_weather", + "content": "{\"location\": \"Paris\", \"temperature\": \"50\", \"unit\": \"celsius\"}" + } +] -# async def chat_completions(): -# super_fake_response = await client.chat.completions.create( -# model="gpt-3.5-turbo", -# messages=super_fake_messages, -# seed=1337, -# stream=False -# ) # get a new response from the model where it can see the function response -# await asyncio.sleep(1) -# return super_fake_response +async def chat_completions(): + super_fake_response = await client.chat.completions.create( + model="gpt-3.5-turbo", + messages=super_fake_messages, + seed=1337, + stream=False + ) # get a new response from the model where it can see the function response + await asyncio.sleep(1) + return super_fake_response -# async def loadtest_fn(n = 1): -# global num_task_cancelled_errors, exception_counts, chat_completions -# start = time.time() -# tasks = [chat_completions() for _ in range(n)] -# chat_completions = await asyncio.gather(*tasks) -# successful_completions = [c for c in chat_completions if c is not None] -# print(n, time.time() - start, len(successful_completions)) +async def loadtest_fn(n = 1): + global num_task_cancelled_errors, exception_counts, chat_completions + start = time.time() + tasks = [chat_completions() for _ in range(n)] + chat_completions = await asyncio.gather(*tasks) + successful_completions = [c for c in chat_completions if c is not None] + print(n, time.time() - start, len(successful_completions)) -# # print(json.dumps(super_fake_response.model_dump(), indent=4)) +# print(json.dumps(super_fake_response.model_dump(), indent=4)) -# asyncio.run(loadtest_fn()) \ No newline at end of file +asyncio.run(loadtest_fn()) \ No newline at end of file From bab958561effb3a888ff8c47c03604dc2d9a27b5 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Fri, 8 Dec 2023 13:35:42 -0800 Subject: [PATCH 281/460] fix(proxy/utils.py): correctly raise exceptions on db call fail --- litellm/proxy/utils.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/litellm/proxy/utils.py b/litellm/proxy/utils.py index ec41ef20a..ab215f9ca 100644 --- a/litellm/proxy/utils.py +++ b/litellm/proxy/utils.py @@ -128,6 +128,7 @@ class PrismaClient: return response except Exception as e: asyncio.create_task(self.proxy_logging_obj.failure_handler(original_exception=e)) + raise e # Define a retrying strategy with exponential backoff @backoff.on_exception( @@ -193,6 +194,7 @@ class PrismaClient: print() print() print() + raise e # Define a retrying strategy with exponential backoff @@ -215,18 +217,37 @@ class PrismaClient: return {"deleted_keys": tokens} except Exception as e: asyncio.create_task(self.proxy_logging_obj.failure_handler(original_exception=e)) + raise e + # Define a retrying strategy with exponential backoff + @backoff.on_exception( + backoff.expo, + Exception, # base exception to catch for the backoff + max_tries=3, # maximum number of retries + max_time=10, # maximum total time to retry for + on_backoff=on_backoff, # specifying the function to call on backoff + ) async def connect(self): try: await self.db.connect() except Exception as e: asyncio.create_task(self.proxy_logging_obj.failure_handler(original_exception=e)) + raise e + # Define a retrying strategy with exponential backoff + @backoff.on_exception( + backoff.expo, + Exception, # base exception to catch for the backoff + max_tries=3, # maximum number of retries + max_time=10, # maximum total time to retry for + on_backoff=on_backoff, # specifying the function to call on backoff + ) async def disconnect(self): try: await self.db.disconnect() except Exception as e: asyncio.create_task(self.proxy_logging_obj.failure_handler(original_exception=e)) + raise e ### CUSTOM FILE ### def get_instance_fn(value: str, config_file_path: Optional[str] = None) -> Any: From 72cca2e5a7b911be3ed3cc8aa34fe41c0ba3eeab Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Fri, 8 Dec 2023 14:03:36 -0800 Subject: [PATCH 282/460] (feat) pass model_info, proxy_server_request callback --- litellm/utils.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/litellm/utils.py b/litellm/utils.py index 0c1ebc6ac..12bb9eaa9 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -1435,7 +1435,7 @@ def client(original_function): litellm.cache.add_cache(result, *args, **kwargs) # LOG SUCCESS - handle streaming success logging in the _next_ object, remove `handle_success` once it's deprecated - print_verbose(f"Wrapper: Completed Call, calling async_success_handler") + print_verbose(f"Wrapper: Completed Call, calling success_handler") threading.Thread(target=logging_obj.success_handler, args=(result, start_time, end_time)).start() # threading.Thread(target=logging_obj.success_handler, args=(result, start_time, end_time)).start() my_thread = threading.Thread( @@ -1974,7 +1974,9 @@ def get_litellm_params( litellm_call_id=None, model_alias_map=None, completion_call_id=None, - metadata=None + metadata=None, + model_info=None, + proxy_server_request=None, ): litellm_params = { "return_async": return_async, @@ -1988,6 +1990,8 @@ def get_litellm_params( "model_alias_map": model_alias_map, "completion_call_id": completion_call_id, "metadata": metadata, + "model_info": model_info, + "proxy_server_request": proxy_server_request, "stream_response": {} # litellm_call_id: ModelResponse Dict } From be94a8c478ade899307e65ff6dbb44256f4fec8d Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Fri, 8 Dec 2023 14:06:38 -0800 Subject: [PATCH 283/460] (feat) pass model_info, proxy_server_request to callback --- litellm/main.py | 8 ++++++-- litellm/proxy/proxy_server.py | 17 ++++++++++++++++- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/litellm/main.py b/litellm/main.py index 76eae2b1a..74c066337 100644 --- a/litellm/main.py +++ b/litellm/main.py @@ -327,6 +327,8 @@ def completion( litellm_logging_obj = kwargs.get('litellm_logging_obj', None) id = kwargs.get('id', None) metadata = kwargs.get('metadata', None) + model_info = kwargs.get('model_info', None) + proxy_server_request = kwargs.get('proxy_server_request', None) fallbacks = kwargs.get('fallbacks', None) headers = kwargs.get("headers", None) num_retries = kwargs.get("num_retries", None) ## deprecated @@ -347,7 +349,7 @@ def completion( client = kwargs.get("client", None) ######## end of unpacking kwargs ########### openai_params = ["functions", "function_call", "temperature", "temperature", "top_p", "n", "stream", "stop", "max_tokens", "presence_penalty", "frequency_penalty", "logit_bias", "user", "request_timeout", "api_base", "api_version", "api_key", "deployment_id", "organization", "base_url", "default_headers", "timeout", "response_format", "seed", "tools", "tool_choice", "max_retries"] - litellm_params = ["metadata", "acompletion", "caching", "return_async", "mock_response", "api_key", "api_version", "api_base", "force_timeout", "logger_fn", "verbose", "custom_llm_provider", "litellm_logging_obj", "litellm_call_id", "use_client", "id", "fallbacks", "azure", "headers", "model_list", "num_retries", "context_window_fallback_dict", "roles", "final_prompt_value", "bos_token", "eos_token", "request_timeout", "complete_response", "self", "client", "rpm", "tpm", "input_cost_per_token", "output_cost_per_token", "hf_model_name"] + litellm_params = ["metadata", "acompletion", "caching", "return_async", "mock_response", "api_key", "api_version", "api_base", "force_timeout", "logger_fn", "verbose", "custom_llm_provider", "litellm_logging_obj", "litellm_call_id", "use_client", "id", "fallbacks", "azure", "headers", "model_list", "num_retries", "context_window_fallback_dict", "roles", "final_prompt_value", "bos_token", "eos_token", "request_timeout", "complete_response", "self", "client", "rpm", "tpm", "input_cost_per_token", "output_cost_per_token", "hf_model_name", "model_info", "proxy_server_request"] default_params = openai_params + litellm_params non_default_params = {k: v for k,v in kwargs.items() if k not in default_params} # model-specific params - pass them straight to the model/provider if mock_response: @@ -454,7 +456,9 @@ def completion( litellm_call_id=kwargs.get('litellm_call_id', None), model_alias_map=litellm.model_alias_map, completion_call_id=id, - metadata=metadata + metadata=metadata, + model_info=model_info, + proxy_server_request=proxy_server_request ) logging.update_environment_variables(model=model, user=user, optional_params=optional_params, litellm_params=litellm_params) if custom_llm_provider == "azure": diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index aa4e51e47..e8b0d9e46 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -967,6 +967,14 @@ async def chat_completion(request: Request, model: Optional[str] = None, user_ap data = {} data = await request.json() # type: ignore + # Include original request and headers in the data + data["proxy_server_request"] = { + "url": str(request.url), + "method": request.method, + "headers": dict(request.headers), + "body": copy.copy(data) # use copy instead of deepcopy + } + print_verbose(f"receiving data: {data}") data["model"] = ( general_settings.get("completion_model", None) # server default @@ -1059,7 +1067,14 @@ async def embeddings(request: Request, user_api_key_dict: UserAPIKeyAuth = Depen body = await request.body() data = orjson.loads(body) - + # Include original request and headers in the data + data["proxy_server_request"] = { + "url": str(request.url), + "method": request.method, + "headers": dict(request.headers), + "body": copy.copy(data) # use copy instead of deepcopy + } + data["user"] = user_api_key_dict.user_id data["model"] = ( general_settings.get("embedding_model", None) # server default From 9805269bd7dfa8cf82ccc5e009bcafaacc873548 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Fri, 8 Dec 2023 14:07:31 -0800 Subject: [PATCH 284/460] (feat) proxy: pass model_info as kwargs --- litellm/router.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/litellm/router.py b/litellm/router.py index c6ff34c81..edbc3cd74 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -187,6 +187,7 @@ class Router: deployment = self.get_available_deployment(model=model, messages=messages, specific_deployment=kwargs.pop("specific_deployment", None)) kwargs.setdefault("metadata", {}).update({"deployment": deployment["litellm_params"]["model"]}) data = deployment["litellm_params"].copy() + kwargs["model_info"] = deployment.get("model_info", {}) for k, v in self.default_litellm_params.items(): if k not in data: # prioritize model-specific params > default router params data[k] = v @@ -234,6 +235,7 @@ class Router: original_model_string = None # set a default for this variable deployment = self.get_available_deployment(model=model, messages=messages, specific_deployment=kwargs.pop("specific_deployment", None)) kwargs.setdefault("metadata", {}).update({"deployment": deployment["litellm_params"]["model"]}) + kwargs["model_info"] = deployment.get("model_info", {}) data = deployment["litellm_params"].copy() for k, v in self.default_litellm_params.items(): if k not in data: # prioritize model-specific params > default router params @@ -303,6 +305,7 @@ class Router: # pick the one that is available (lowest TPM/RPM) deployment = self.get_available_deployment(model=model, input=input, specific_deployment=kwargs.pop("specific_deployment", None)) kwargs.setdefault("metadata", {}).update({"deployment": deployment["litellm_params"]["model"]}) + kwargs["model_info"] = deployment.get("model_info", {}) data = deployment["litellm_params"].copy() for k, v in self.default_litellm_params.items(): if k not in data: # prioritize model-specific params > default router params @@ -329,6 +332,7 @@ class Router: deployment = self.get_available_deployment(model=model, input=input, specific_deployment=kwargs.pop("specific_deployment", None)) kwargs.setdefault("metadata", {}).update({"deployment": deployment["litellm_params"]["model"]}) data = deployment["litellm_params"].copy() + kwargs["model_info"] = deployment.get("model_info", {}) for k, v in self.default_litellm_params.items(): if k not in data: # prioritize model-specific params > default router params data[k] = v From 93b1df1c7962b8a4121c1fdaf7b3b9829e25f223 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Fri, 8 Dec 2023 14:16:39 -0800 Subject: [PATCH 285/460] (feat) embedding - pass model_info, proxy_server request --- litellm/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/main.py b/litellm/main.py index 74c066337..61bff17ab 100644 --- a/litellm/main.py +++ b/litellm/main.py @@ -1780,7 +1780,7 @@ def embedding( tpm = kwargs.pop("tpm", None) aembedding = kwargs.pop("aembedding", None) openai_params = ["functions", "function_call", "temperature", "temperature", "top_p", "n", "stream", "stop", "max_tokens", "presence_penalty", "frequency_penalty", "logit_bias", "user", "request_timeout", "api_base", "api_version", "api_key", "deployment_id", "organization", "base_url", "default_headers", "timeout", "response_format", "seed", "tools", "tool_choice", "max_retries", "encoding_format"] - litellm_params = ["metadata", "acompletion", "caching", "return_async", "mock_response", "api_key", "api_version", "api_base", "force_timeout", "logger_fn", "verbose", "custom_llm_provider", "litellm_logging_obj", "litellm_call_id", "use_client", "id", "fallbacks", "azure", "headers", "model_list", "num_retries", "context_window_fallback_dict", "roles", "final_prompt_value", "bos_token", "eos_token", "request_timeout", "complete_response", "self", "client", "rpm", "tpm", "input_cost_per_token", "output_cost_per_token", "hf_model_name"] + litellm_params = ["metadata", "acompletion", "caching", "return_async", "mock_response", "api_key", "api_version", "api_base", "force_timeout", "logger_fn", "verbose", "custom_llm_provider", "litellm_logging_obj", "litellm_call_id", "use_client", "id", "fallbacks", "azure", "headers", "model_list", "num_retries", "context_window_fallback_dict", "roles", "final_prompt_value", "bos_token", "eos_token", "request_timeout", "complete_response", "self", "client", "rpm", "tpm", "input_cost_per_token", "output_cost_per_token", "hf_model_name", "proxy_server_request", "model_info"] default_params = openai_params + litellm_params non_default_params = {k: v for k,v in kwargs.items() if k not in default_params} # model-specific params - pass them straight to the model/provider optional_params = {} From 14d57ec7de3f023cfb2e1344af2b67f1aa655c45 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Fri, 8 Dec 2023 14:25:36 -0800 Subject: [PATCH 286/460] (feat) proxy: log model_info + proxy_server request --- litellm/main.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/litellm/main.py b/litellm/main.py index 61bff17ab..650e41204 100644 --- a/litellm/main.py +++ b/litellm/main.py @@ -1778,6 +1778,8 @@ def embedding( client = kwargs.pop("client", None) rpm = kwargs.pop("rpm", None) tpm = kwargs.pop("tpm", None) + model_info = kwargs.get("model_info", None) + proxy_server_request = kwargs.get("proxy_server_request", None) aembedding = kwargs.pop("aembedding", None) openai_params = ["functions", "function_call", "temperature", "temperature", "top_p", "n", "stream", "stop", "max_tokens", "presence_penalty", "frequency_penalty", "logit_bias", "user", "request_timeout", "api_base", "api_version", "api_key", "deployment_id", "organization", "base_url", "default_headers", "timeout", "response_format", "seed", "tools", "tool_choice", "max_retries", "encoding_format"] litellm_params = ["metadata", "acompletion", "caching", "return_async", "mock_response", "api_key", "api_version", "api_base", "force_timeout", "logger_fn", "verbose", "custom_llm_provider", "litellm_logging_obj", "litellm_call_id", "use_client", "id", "fallbacks", "azure", "headers", "model_list", "num_retries", "context_window_fallback_dict", "roles", "final_prompt_value", "bos_token", "eos_token", "request_timeout", "complete_response", "self", "client", "rpm", "tpm", "input_cost_per_token", "output_cost_per_token", "hf_model_name", "proxy_server_request", "model_info"] @@ -1792,7 +1794,7 @@ def embedding( try: response = None logging = litellm_logging_obj - logging.update_environment_variables(model=model, user="", optional_params=optional_params, litellm_params={"timeout": timeout, "azure": azure, "litellm_call_id": litellm_call_id, "logger_fn": logger_fn}) + logging.update_environment_variables(model=model, user="", optional_params=optional_params, litellm_params={"timeout": timeout, "azure": azure, "litellm_call_id": litellm_call_id, "logger_fn": logger_fn, "proxy_server_request": proxy_server_request, "model_info": model_info}) if azure == True or custom_llm_provider == "azure": # azure configs api_type = get_secret("AZURE_API_TYPE") or "azure" From 73984504e9c97d769a2ae1453416f724507b8c91 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Fri, 8 Dec 2023 14:26:16 -0800 Subject: [PATCH 287/460] (test) proxy: access model_info and request_obj --- .../tests/test_configs/test_custom_logger.yaml | 6 ++++++ litellm/tests/test_proxy_custom_logger.py | 18 ++++++++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/litellm/tests/test_configs/test_custom_logger.yaml b/litellm/tests/test_configs/test_custom_logger.yaml index c4f44f9ef..4c8f414dc 100644 --- a/litellm/tests/test_configs/test_custom_logger.yaml +++ b/litellm/tests/test_configs/test_custom_logger.yaml @@ -5,12 +5,18 @@ model_list: api_base: os.environ/AZURE_API_BASE api_key: os.environ/AZURE_API_KEY api_version: "2023-07-01-preview" + model_info: + mode: chat + input_cost_per_token: 0.0002 - model_name: azure-embedding-model litellm_params: model: azure/azure-embedding-model api_base: os.environ/AZURE_API_BASE api_key: os.environ/AZURE_API_KEY api_version: "2023-07-01-preview" + model_info: + mode: embedding + input_cost_per_token: 0.002 litellm_settings: drop_params: True diff --git a/litellm/tests/test_proxy_custom_logger.py b/litellm/tests/test_proxy_custom_logger.py index 9d5931f50..503ea4a81 100644 --- a/litellm/tests/test_proxy_custom_logger.py +++ b/litellm/tests/test_proxy_custom_logger.py @@ -70,11 +70,19 @@ def test_chat_completion(client): response = client.post("/chat/completions", json=test_data, headers=headers) print("made request", response.status_code, response.text) - assert my_custom_logger.async_success == True # checks if the status of async_success is True, only the async_log_success_event can set this to true + assert my_custom_logger.async_success == True # checks if the status of async_success is True, only the async_log_success_event can set this to true assert my_custom_logger.async_completion_kwargs["model"] == "chatgpt-v-2" # checks if kwargs passed to async_log_success_event are correct + print("\n\n Custom Logger Async Completion args", my_custom_logger.async_completion_kwargs) + litellm_params = my_custom_logger.async_completion_kwargs.get("litellm_params") + config_model_info = litellm_params.get("model_info") + proxy_server_request_object = litellm_params.get("proxy_server_request") + + assert config_model_info == {'mode': 'chat', 'input_cost_per_token': 0.0002} + assert proxy_server_request_object == {'url': 'http://testserver/chat/completions', 'method': 'POST', 'headers': {'host': 'testserver', 'accept': '*/*', 'accept-encoding': 'gzip, deflate', 'connection': 'keep-alive', 'user-agent': 'testclient', 'authorization': 'Bearer None', 'content-length': '105', 'content-type': 'application/json'}, 'body': {'model': 'Azure OpenAI GPT-4 Canada', 'messages': [{'role': 'user', 'content': 'hi'}], 'max_tokens': 10}} result = response.json() print(f"Received response: {result}") + print("\nPassed /chat/completions with Custom Logger!") except Exception as e: pytest.fail("LiteLLM Proxy test failed. Exception", e) @@ -82,7 +90,7 @@ def test_chat_completion(client): def test_embedding(client): try: - # Your test data + # Your test data print("initialized proxy") # import the initialized custom logger print(litellm.callbacks) @@ -100,6 +108,12 @@ def test_embedding(client): assert my_custom_logger.async_success_embedding == True # checks if the status of async_success is True, only the async_log_success_event can set this to true assert my_custom_logger.async_embedding_kwargs["model"] == "azure-embedding-model" # checks if kwargs passed to async_log_success_event are correct + kwargs = my_custom_logger.async_embedding_kwargs + litellm_params = kwargs.get("litellm_params") + proxy_server_request = litellm_params.get("proxy_server_request") + model_info = litellm_params.get("model_info") + assert proxy_server_request == {'url': 'http://testserver/embeddings', 'method': 'POST', 'headers': {'host': 'testserver', 'accept': '*/*', 'accept-encoding': 'gzip, deflate', 'connection': 'keep-alive', 'user-agent': 'testclient', 'authorization': 'Bearer None', 'content-length': '54', 'content-type': 'application/json'}, 'body': {'model': 'azure-embedding-model', 'input': ['hello']}} + assert model_info == {'input_cost_per_token': 0.002, 'mode': 'embedding'} result = response.json() print(f"Received response: {result}") except Exception as e: From 76d0c50523092b5b08ae155b80192cd8629f376b Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Fri, 8 Dec 2023 14:27:53 -0800 Subject: [PATCH 288/460] (ci/cd) comment beta test --- litellm/tests/test_proxy_server_spend.py | 154 +++++++++++------------ 1 file changed, 77 insertions(+), 77 deletions(-) diff --git a/litellm/tests/test_proxy_server_spend.py b/litellm/tests/test_proxy_server_spend.py index 5569b6731..f64ad8987 100644 --- a/litellm/tests/test_proxy_server_spend.py +++ b/litellm/tests/test_proxy_server_spend.py @@ -1,82 +1,82 @@ -import openai, json, time, asyncio -client = openai.AsyncOpenAI( - api_key="sk-1234", - base_url="http://0.0.0.0:8000" -) +# import openai, json, time, asyncio +# client = openai.AsyncOpenAI( +# api_key="sk-1234", +# base_url="http://0.0.0.0:8000" +# ) -super_fake_messages = [ - { - "role": "user", - "content": f"What's the weather like in San Francisco, Tokyo, and Paris? {time.time()}" - }, - { - "content": None, - "role": "assistant", - "tool_calls": [ - { - "id": "1", - "function": { - "arguments": "{\"location\": \"San Francisco\", \"unit\": \"celsius\"}", - "name": "get_current_weather" - }, - "type": "function" - }, - { - "id": "2", - "function": { - "arguments": "{\"location\": \"Tokyo\", \"unit\": \"celsius\"}", - "name": "get_current_weather" - }, - "type": "function" - }, - { - "id": "3", - "function": { - "arguments": "{\"location\": \"Paris\", \"unit\": \"celsius\"}", - "name": "get_current_weather" - }, - "type": "function" - } - ] - }, - { - "tool_call_id": "1", - "role": "tool", - "name": "get_current_weather", - "content": "{\"location\": \"San Francisco\", \"temperature\": \"90\", \"unit\": \"celsius\"}" - }, - { - "tool_call_id": "2", - "role": "tool", - "name": "get_current_weather", - "content": "{\"location\": \"Tokyo\", \"temperature\": \"30\", \"unit\": \"celsius\"}" - }, - { - "tool_call_id": "3", - "role": "tool", - "name": "get_current_weather", - "content": "{\"location\": \"Paris\", \"temperature\": \"50\", \"unit\": \"celsius\"}" - } -] +# super_fake_messages = [ +# { +# "role": "user", +# "content": f"What's the weather like in San Francisco, Tokyo, and Paris? {time.time()}" +# }, +# { +# "content": None, +# "role": "assistant", +# "tool_calls": [ +# { +# "id": "1", +# "function": { +# "arguments": "{\"location\": \"San Francisco\", \"unit\": \"celsius\"}", +# "name": "get_current_weather" +# }, +# "type": "function" +# }, +# { +# "id": "2", +# "function": { +# "arguments": "{\"location\": \"Tokyo\", \"unit\": \"celsius\"}", +# "name": "get_current_weather" +# }, +# "type": "function" +# }, +# { +# "id": "3", +# "function": { +# "arguments": "{\"location\": \"Paris\", \"unit\": \"celsius\"}", +# "name": "get_current_weather" +# }, +# "type": "function" +# } +# ] +# }, +# { +# "tool_call_id": "1", +# "role": "tool", +# "name": "get_current_weather", +# "content": "{\"location\": \"San Francisco\", \"temperature\": \"90\", \"unit\": \"celsius\"}" +# }, +# { +# "tool_call_id": "2", +# "role": "tool", +# "name": "get_current_weather", +# "content": "{\"location\": \"Tokyo\", \"temperature\": \"30\", \"unit\": \"celsius\"}" +# }, +# { +# "tool_call_id": "3", +# "role": "tool", +# "name": "get_current_weather", +# "content": "{\"location\": \"Paris\", \"temperature\": \"50\", \"unit\": \"celsius\"}" +# } +# ] -async def chat_completions(): - super_fake_response = await client.chat.completions.create( - model="gpt-3.5-turbo", - messages=super_fake_messages, - seed=1337, - stream=False - ) # get a new response from the model where it can see the function response - await asyncio.sleep(1) - return super_fake_response +# async def chat_completions(): +# super_fake_response = await client.chat.completions.create( +# model="gpt-3.5-turbo", +# messages=super_fake_messages, +# seed=1337, +# stream=False +# ) # get a new response from the model where it can see the function response +# await asyncio.sleep(1) +# return super_fake_response -async def loadtest_fn(n = 1): - global num_task_cancelled_errors, exception_counts, chat_completions - start = time.time() - tasks = [chat_completions() for _ in range(n)] - chat_completions = await asyncio.gather(*tasks) - successful_completions = [c for c in chat_completions if c is not None] - print(n, time.time() - start, len(successful_completions)) +# async def loadtest_fn(n = 1): +# global num_task_cancelled_errors, exception_counts, chat_completions +# start = time.time() +# tasks = [chat_completions() for _ in range(n)] +# chat_completions = await asyncio.gather(*tasks) +# successful_completions = [c for c in chat_completions if c is not None] +# print(n, time.time() - start, len(successful_completions)) -# print(json.dumps(super_fake_response.model_dump(), indent=4)) +# # print(json.dumps(super_fake_response.model_dump(), indent=4)) -asyncio.run(loadtest_fn()) \ No newline at end of file +# asyncio.run(loadtest_fn()) \ No newline at end of file From 977bfaaab91d91082d0af5866b18df1608dc9e93 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Fri, 8 Dec 2023 14:57:29 -0800 Subject: [PATCH 289/460] (docs) proxy - get model_info,server_request --- docs/my-website/docs/proxy/logging.md | 173 ++++++++------------------ 1 file changed, 50 insertions(+), 123 deletions(-) diff --git a/docs/my-website/docs/proxy/logging.md b/docs/my-website/docs/proxy/logging.md index 335a3d502..ec6f2ecbe 100644 --- a/docs/my-website/docs/proxy/logging.md +++ b/docs/my-website/docs/proxy/logging.md @@ -160,144 +160,71 @@ On Success Response: {'id': 'chatcmpl-8S8avKJ1aVBg941y5xzGMSKrYCMvN', 'choices': [{'finish_reason': 'stop', 'index': 0, 'message': {'content': 'Good morning! How can I assist you today?', 'role': 'assistant'}}], 'created': 1701716913, 'model': 'gpt-3.5-turbo-0613', 'object': 'chat.completion', 'system_fingerprint': None, 'usage': {'completion_tokens': 10, 'prompt_tokens': 11, 'total_tokens': 21}} Proxy Metadata: {'user_api_key': None, 'headers': Headers({'host': '0.0.0.0:8000', 'user-agent': 'curl/7.88.1', 'accept': '*/*', 'authorization': 'Bearer sk-1234', 'content-length': '199', 'content-type': 'application/x-www-form-urlencoded'}), 'model_group': 'gpt-3.5-turbo', 'deployment': 'gpt-3.5-turbo-ModelID-gpt-3.5-turbo'} ``` - +### Logging `model_info` set in config.yaml + +Here is how to log the `model_info` set in your proxy `config.yaml`. Information on setting `model_info` on [config.yaml](https://docs.litellm.ai/docs/proxy/configs) + +```python +class MyCustomHandler(CustomLogger): + async def async_log_success_event(self, kwargs, response_obj, start_time, end_time): + print(f"On Async Success!") + + litellm_params = kwargs.get("litellm_params", None) + model_info = litellm_params.get("model_info") + print(model_info) +``` + +**Expected Output** +```json +{'mode': 'embedding', 'input_cost_per_token': 0.002} +``` + +### Logging LLM Responses ## OpenTelemetry, ElasticSearch From 5fa2b6e5ad58fa6bea8b19b02169b394b7fa6011 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Fri, 8 Dec 2023 17:10:57 -0800 Subject: [PATCH 290/460] fix(proxy_server.py): enable pre+post-call hooks and max parallel request limits --- .pre-commit-config.yaml | 2 +- litellm/proxy/_types.py | 20 ++- litellm/proxy/hooks/__init__.py | 1 + .../proxy/hooks/parallel_request_limiter.py | 33 ++++ litellm/proxy/proxy_server.py | 142 +++++++----------- litellm/proxy/schema.prisma | 1 + litellm/proxy/utils.py | 100 ++++++++---- litellm/tests/test_configs/test_config.yaml | 1 - litellm/tests/test_proxy_server_keys.py | 43 +++++- 9 files changed, 213 insertions(+), 130 deletions(-) create mode 100644 litellm/proxy/hooks/__init__.py create mode 100644 litellm/proxy/hooks/parallel_request_limiter.py diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 5e74b6596..9fc7bb3d3 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -3,7 +3,7 @@ repos: rev: 3.8.4 # The version of flake8 to use hooks: - id: flake8 - exclude: ^litellm/tests/|^litellm/proxy/|^litellm/integrations/ + exclude: ^litellm/tests/|^litellm/proxy/proxy_server.py|^litellm/integrations/ additional_dependencies: [flake8-print] files: litellm/.*\.py - repo: local diff --git a/litellm/proxy/_types.py b/litellm/proxy/_types.py index 626ec513c..67cbb6063 100644 --- a/litellm/proxy/_types.py +++ b/litellm/proxy/_types.py @@ -76,12 +76,13 @@ class ModelParams(BaseModel): protected_namespaces = () class GenerateKeyRequest(BaseModel): - duration: str = "1h" - models: list = [] - aliases: dict = {} - config: dict = {} - spend: int = 0 + duration: Optional[str] = "1h" + models: Optional[list] = [] + aliases: Optional[dict] = {} + config: Optional[dict] = {} + spend: Optional[float] = 0 user_id: Optional[str] = None + max_parallel_requests: Optional[int] = None class GenerateKeyResponse(BaseModel): key: str @@ -96,8 +97,17 @@ class DeleteKeyRequest(BaseModel): class UserAPIKeyAuth(BaseModel): # the expected response object for user api key auth + """ + Return the row in the db + """ api_key: Optional[str] = None + models: list = [] + aliases: dict = {} + config: dict = {} + spend: Optional[float] = 0 user_id: Optional[str] = None + max_parallel_requests: Optional[int] = None + duration: str = "1h" class ConfigGeneralSettings(BaseModel): """ diff --git a/litellm/proxy/hooks/__init__.py b/litellm/proxy/hooks/__init__.py new file mode 100644 index 000000000..b6e690fd5 --- /dev/null +++ b/litellm/proxy/hooks/__init__.py @@ -0,0 +1 @@ +from . import * diff --git a/litellm/proxy/hooks/parallel_request_limiter.py b/litellm/proxy/hooks/parallel_request_limiter.py new file mode 100644 index 000000000..14f4c330c --- /dev/null +++ b/litellm/proxy/hooks/parallel_request_limiter.py @@ -0,0 +1,33 @@ +from typing import Optional +from litellm.caching import DualCache +from fastapi import HTTPException + +async def max_parallel_request_allow_request(max_parallel_requests: Optional[int], api_key: Optional[str], user_api_key_cache: DualCache): + if api_key is None: + return + + if max_parallel_requests is None: + return + + # CHECK IF REQUEST ALLOWED + request_count_api_key = f"{api_key}_request_count" + current = user_api_key_cache.get_cache(key=request_count_api_key) + if current is None: + user_api_key_cache.set_cache(request_count_api_key, 1) + elif int(current) < max_parallel_requests: + # Increase count for this token + user_api_key_cache.set_cache(request_count_api_key, int(current) + 1) + else: + raise HTTPException(status_code=429, detail="Max parallel request limit reached.") + + +async def max_parallel_request_update_count(api_key: Optional[str], user_api_key_cache: DualCache): + if api_key is None: + return + + request_count_api_key = f"{api_key}_request_count" + # Decrease count for this token + current = user_api_key_cache.get_cache(key=request_count_api_key) or 1 + user_api_key_cache.set_cache(request_count_api_key, int(current) - 1) + + return \ No newline at end of file diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index e8b0d9e46..843930ad6 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -102,7 +102,7 @@ from litellm.proxy._types import * from litellm.caching import DualCache from litellm.proxy.health_check import perform_health_check litellm.suppress_debug_info = True -from fastapi import FastAPI, Request, HTTPException, status, Depends, BackgroundTasks +from fastapi import FastAPI, Request, HTTPException, status, Depends, BackgroundTasks, Header from fastapi.routing import APIRouter from fastapi.security import OAuth2PasswordBearer from fastapi.encoders import jsonable_encoder @@ -198,7 +198,7 @@ user_custom_auth = None use_background_health_checks = None health_check_interval = None health_check_results = {} -call_hooks = CallHooks() +call_hooks = CallHooks(user_api_key_cache=user_api_key_cache) proxy_logging_obj: Optional[ProxyLogging] = None ### REDIS QUEUE ### async_result = None @@ -259,10 +259,10 @@ async def user_api_key_auth(request: Request, api_key: str = fastapi.Security(ap if prisma_client: ## check for cache hit (In-Memory Cache) valid_token = user_api_key_cache.get_cache(key=api_key) + print(f"valid_token from cache: {valid_token}") if valid_token is None: ## check db - cleaned_api_key = api_key - valid_token = await prisma_client.get_data(token=cleaned_api_key, expires=datetime.utcnow()) + valid_token = await prisma_client.get_data(token=api_key, expires=datetime.utcnow()) user_api_key_cache.set_cache(key=api_key, value=valid_token, ttl=60) elif valid_token is not None: print(f"API Key Cache Hit!") @@ -274,10 +274,10 @@ async def user_api_key_auth(request: Request, api_key: str = fastapi.Security(ap llm_model_list = model_list print("\n new llm router model list", llm_model_list) if len(valid_token.models) == 0: # assume an empty model list means all models are allowed to be called - return_dict = {"api_key": valid_token.token} - if valid_token.user_id: - return_dict["user_id"] = valid_token.user_id - return UserAPIKeyAuth(**return_dict) + api_key = valid_token.token + valid_token_dict = valid_token.model_dump() + valid_token_dict.pop("token", None) + return UserAPIKeyAuth(api_key=api_key, **valid_token_dict) else: data = await request.json() model = data.get("model", None) @@ -285,10 +285,10 @@ async def user_api_key_auth(request: Request, api_key: str = fastapi.Security(ap model = litellm.model_alias_map[model] if model and model not in valid_token.models: raise Exception(f"Token not allowed to access model") - return_dict = {"api_key": valid_token.token} - if valid_token.user_id: - return_dict["user_id"] = valid_token.user_id - return UserAPIKeyAuth(**return_dict) + api_key = valid_token.token + valid_token_dict = valid_token.model_dump() + valid_token.pop("token", None) + return UserAPIKeyAuth(api_key=api_key, **valid_token) else: raise Exception(f"Invalid token") except Exception as e: @@ -588,7 +588,7 @@ def load_router_config(router: Optional[litellm.Router], config_file_path: str): call_hooks.update_router_config(litellm_settings=litellm_settings, model_list=model_list, general_settings=general_settings) return router, model_list, general_settings -async def generate_key_helper_fn(duration_str: Optional[str], models: list, aliases: dict, config: dict, spend: float, token: Optional[str]=None, user_id: Optional[str]=None): +async def generate_key_helper_fn(duration: Optional[str], models: list, aliases: dict, config: dict, spend: float, token: Optional[str]=None, user_id: Optional[str]=None, max_parallel_requests: Optional[int]=None): global prisma_client if prisma_client is None: @@ -617,11 +617,11 @@ async def generate_key_helper_fn(duration_str: Optional[str], models: list, alia else: raise ValueError("Unsupported duration unit") - if duration_str is None: # allow tokens that never expire + if duration is None: # allow tokens that never expire expires = None else: - duration = _duration_in_seconds(duration=duration_str) - expires = datetime.utcnow() + timedelta(seconds=duration) + duration_s = _duration_in_seconds(duration=duration) + expires = datetime.utcnow() + timedelta(seconds=duration_s) aliases_json = json.dumps(aliases) config_json = json.dumps(config) @@ -635,7 +635,8 @@ async def generate_key_helper_fn(duration_str: Optional[str], models: list, alia "aliases": aliases_json, "config": config_json, "spend": spend, - "user_id": user_id + "user_id": user_id, + "max_parallel_requests": max_parallel_requests } new_verification_token = await prisma_client.insert_data(data=verification_token_data) except Exception as e: @@ -755,14 +756,12 @@ def data_generator(response): except: yield f"data: {json.dumps(chunk)}\n\n" -async def async_data_generator(response): +async def async_data_generator(response, user_api_key_dict): global call_hooks print_verbose("inside generator") async for chunk in response: print_verbose(f"returned chunk: {chunk}") - ### CALL HOOKS ### - modify outgoing response - response = call_hooks.post_call_success(chunk=chunk, call_type="completion") try: yield f"data: {json.dumps(chunk.dict())}\n\n" except: @@ -812,36 +811,6 @@ def get_litellm_model_info(model: dict = {}): # if litellm does not have info on the model it should return {} return {} -@app.middleware("http") -async def rate_limit_per_token(request: Request, call_next): - global user_api_key_cache, general_settings - max_parallel_requests = general_settings.get("max_parallel_requests", None) - api_key = request.headers.get("Authorization") - if max_parallel_requests is not None and api_key is not None: # Rate limiting is enabled - api_key = _get_bearer_token(api_key=api_key) - # CHECK IF REQUEST ALLOWED - request_count_api_key = f"{api_key}_request_count" - current = user_api_key_cache.get_cache(key=request_count_api_key) - if current is None: - user_api_key_cache.set_cache(request_count_api_key, 1) - elif int(current) < max_parallel_requests: - # Increase count for this token - user_api_key_cache.set_cache(request_count_api_key, int(current) + 1) - else: - raise HTTPException(status_code=429, detail="Too many requests.") - - - response = await call_next(request) - - # Decrease count for this token - current = user_api_key_cache.get_cache(key=request_count_api_key) - user_api_key_cache.set_cache(request_count_api_key, int(current) - 1) - - return response - else: # Rate limiting is not enabled, just pass the request - response = await call_next(request) - return response - @router.on_event("startup") async def startup_event(): global prisma_client, master_key, use_background_health_checks @@ -868,7 +837,7 @@ async def startup_event(): if prisma_client is not None and master_key is not None: # add master key to db - await generate_key_helper_fn(duration_str=None, models=[], aliases={}, config={}, spend=0, token=master_key) + await generate_key_helper_fn(duration=None, models=[], aliases={}, config={}, spend=0, token=master_key) @router.on_event("shutdown") async def shutdown_event(): @@ -1008,7 +977,7 @@ async def chat_completion(request: Request, model: Optional[str] = None, user_ap data["api_base"] = user_api_base ### CALL HOOKS ### - modify incoming data before calling the model - data = call_hooks.pre_call(data=data, call_type="completion") + data = await call_hooks.pre_call(user_api_key_dict=user_api_key_dict, data=data, call_type="completion") ### ROUTE THE REQUEST ### router_model_names = [m["model_name"] for m in llm_model_list] if llm_model_list is not None else [] @@ -1021,15 +990,19 @@ async def chat_completion(request: Request, model: Optional[str] = None, user_ap else: # router is not set response = await litellm.acompletion(**data) + print(f"final response: {response}") if 'stream' in data and data['stream'] == True: # use generate_responses to stream responses - return StreamingResponse(async_data_generator(response), media_type='text/event-stream') + return StreamingResponse(async_data_generator(user_api_key_dict=user_api_key_dict, response=response), media_type='text/event-stream') ### CALL HOOKS ### - modify outgoing response - response = call_hooks.post_call_success(response=response, call_type="completion") + response = await call_hooks.post_call_success(user_api_key_dict=user_api_key_dict, response=response, call_type="completion") background_tasks.add_task(log_input_output, request, response) # background task for logging to OTEL return response - except Exception as e: + except Exception as e: + print(f"Exception received: {str(e)}") + raise e + await call_hooks.post_call_failure(original_exception=e, user_api_key_dict=user_api_key_dict) print(f"\033[1;31mAn error occurred: {e}\n\n Debug this by setting `--debug`, e.g. `litellm --model gpt-3.5-turbo --debug`") router_model_names = [m["model_name"] for m in llm_model_list] if llm_model_list is not None else [] if llm_router is not None and data.get("model", "") in router_model_names: @@ -1046,23 +1019,26 @@ async def chat_completion(request: Request, model: Optional[str] = None, user_ap print(f"{key}: {value}") if user_debug: traceback.print_exc() - error_traceback = traceback.format_exc() - error_msg = f"{str(e)}\n\n{error_traceback}" - try: - status = e.status_code # type: ignore - except: - status = 500 - raise HTTPException( - status_code=status, - detail=error_msg - ) + + if isinstance(e, HTTPException): + raise e + else: + error_traceback = traceback.format_exc() + error_msg = f"{str(e)}\n\n{error_traceback}" + try: + status = e.status_code # type: ignore + except: + status = 500 + raise HTTPException( + status_code=status, + detail=error_msg + ) @router.post("/v1/embeddings", dependencies=[Depends(user_api_key_auth)], response_class=ORJSONResponse) @router.post("/embeddings", dependencies=[Depends(user_api_key_auth)], response_class=ORJSONResponse) async def embeddings(request: Request, user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), background_tasks: BackgroundTasks = BackgroundTasks()): + global call_hooks try: - global call_hooks - # Use orjson to parse JSON data, orjson speeds up requests significantly body = await request.body() data = orjson.loads(body) @@ -1105,7 +1081,7 @@ async def embeddings(request: Request, user_api_key_dict: UserAPIKeyAuth = Depen break ### CALL HOOKS ### - modify incoming data before calling the model - data = call_hooks.pre_call(data=data, call_type="embeddings") + data = await call_hooks.pre_call(user_api_key_dict=user_api_key_dict, data=data, call_type="embeddings") ## ROUTE TO CORRECT ENDPOINT ## if llm_router is not None and data["model"] in router_model_names: # model in router model list @@ -1117,19 +1093,18 @@ async def embeddings(request: Request, user_api_key_dict: UserAPIKeyAuth = Depen background_tasks.add_task(log_input_output, request, response) # background task for logging to OTEL ### CALL HOOKS ### - modify outgoing response - data = call_hooks.post_call_success(response=response, call_type="embeddings") + data = call_hooks.post_call_success(user_api_key_dict=user_api_key_dict, response=response, call_type="embeddings") return response except Exception as e: + await call_hooks.post_call_failure(user_api_key_dict=user_api_key_dict, original_exception=e) traceback.print_exc() raise e - except Exception as e: - pass #### KEY MANAGEMENT #### @router.post("/key/generate", tags=["key management"], dependencies=[Depends(user_api_key_auth)], response_model=GenerateKeyResponse) -async def generate_key_fn(request: Request, data: GenerateKeyRequest): +async def generate_key_fn(request: Request, data: GenerateKeyRequest, Authorization: Optional[str] = Header(None)): """ Generate an API key based on the provided data. @@ -1141,26 +1116,17 @@ async def generate_key_fn(request: Request, data: GenerateKeyRequest): - aliases: Optional[dict] - Any alias mappings, on top of anything in the config.yaml model list. - https://docs.litellm.ai/docs/proxy/virtual_keys#managing-auth---upgradedowngrade-models - config: Optional[dict] - any key-specific configs, overrides config in config.yaml - spend: Optional[int] - Amount spent by key. Default is 0. Will be updated by proxy whenever key is used. https://docs.litellm.ai/docs/proxy/virtual_keys#managing-auth---tracking-spend + - max_parallel_requests: Optional[int] - Rate limit a user based on the number of parallel requests. Raises 429 error, if user's parallel requests > x. Returns: - - key: The generated api key - - expires: Datetime object for when key expires. + - key: (str) The generated api key + - expires: (datetime) Datetime object for when key expires. + - user_id: (str) Unique user id - used for tracking spend across multiple keys for same user id. """ # data = await request.json() - duration_str = data.duration # Default to 1 hour if duration is not provided - models = data.models # Default to an empty list (meaning allow token to call all models) - aliases = data.aliases # Default to an empty dict (no alias mappings, on top of anything in the config.yaml model_list) - config = data.config - spend = data.spend - user_id = data.user_id - if isinstance(models, list): - response = await generate_key_helper_fn(duration_str=duration_str, models=models, aliases=aliases, config=config, spend=spend, user_id=user_id) - return GenerateKeyResponse(key=response["token"], expires=response["expires"], user_id=response["user_id"]) - else: - raise HTTPException( - status_code=status.HTTP_400_BAD_REQUEST, - detail={"error": "models param must be a list"}, - ) + data_json = data.model_dump() + response = await generate_key_helper_fn(**data_json) + return GenerateKeyResponse(key=response["token"], expires=response["expires"], user_id=response["user_id"]) @router.post("/key/delete", tags=["key management"], dependencies=[Depends(user_api_key_auth)]) async def delete_key_fn(request: Request, data: DeleteKeyRequest): diff --git a/litellm/proxy/schema.prisma b/litellm/proxy/schema.prisma index 1ce57e2fe..ab4fc5e00 100644 --- a/litellm/proxy/schema.prisma +++ b/litellm/proxy/schema.prisma @@ -16,4 +16,5 @@ model LiteLLM_VerificationToken { aliases Json @default("{}") config Json @default("{}") user_id String? + max_parallel_requests Int? } \ No newline at end of file diff --git a/litellm/proxy/utils.py b/litellm/proxy/utils.py index ab215f9ca..688820e83 100644 --- a/litellm/proxy/utils.py +++ b/litellm/proxy/utils.py @@ -1,7 +1,13 @@ from typing import Optional, List, Any, Literal import os, subprocess, hashlib, importlib, asyncio import litellm, backoff +from litellm.proxy._types import UserAPIKeyAuth +from litellm.caching import DualCache +from litellm.proxy.hooks.parallel_request_limiter import max_parallel_request_allow_request, max_parallel_request_update_count +def print_verbose(print_statement): + if litellm.set_verbose: + print(print_statement) # noqa ### LOGGING ### class ProxyLogging: """ @@ -17,7 +23,6 @@ class ProxyLogging: self._init_litellm_callbacks() pass - def _init_litellm_callbacks(self): if len(litellm.callbacks) > 0: for callback in litellm.callbacks: @@ -69,11 +74,11 @@ class ProxyLogging: # Function to be called whenever a retry is about to happen def on_backoff(details): # The 'tries' key in the details dictionary contains the number of completed tries - print(f"Backing off... this was attempt #{details['tries']}") + print_verbose(f"Backing off... this was attempt #{details['tries']}") class PrismaClient: def __init__(self, database_url: str, proxy_logging_obj: ProxyLogging): - print("LiteLLM: DATABASE_URL Set in config, trying to 'pip install prisma'") + print_verbose("LiteLLM: DATABASE_URL Set in config, trying to 'pip install prisma'") ## init logging object self.proxy_logging_obj = proxy_logging_obj @@ -109,20 +114,22 @@ class PrismaClient: max_time=10, # maximum total time to retry for on_backoff=on_backoff, # specifying the function to call on backoff ) - async def get_data(self, token: str, expires: Optional[Any]=None): + async def get_data(self, token: str, expires: Optional[Any]=None): try: - hashed_token = self.hash_token(token=token) + # check if plain text or hash + if token.startswith("sk-"): + token = self.hash_token(token=token) if expires: response = await self.db.litellm_verificationtoken.find_first( where={ - "token": hashed_token, + "token": token, "expires": {"gte": expires} # Check if the token is not expired } ) else: response = await self.db.litellm_verificationtoken.find_unique( where={ - "token": hashed_token + "token": token } ) return response @@ -175,25 +182,23 @@ class PrismaClient: Update existing data """ try: - hashed_token = self.hash_token(token=token) - data["token"] = hashed_token - await self.db.litellm_verificationtoken.update( + print_verbose(f"token: {token}") + # check if plain text or hash + if token.startswith("sk-"): + token = self.hash_token(token=token) + + data["token"] = token + response = await self.db.litellm_verificationtoken.update( where={ - "token": hashed_token + "token": token }, data={**data} # type: ignore ) - print("\033[91m" + f"DB write succeeded" + "\033[0m") + print_verbose("\033[91m" + f"DB write succeeded {response}" + "\033[0m") return {"token": token, "data": data} except Exception as e: asyncio.create_task(self.proxy_logging_obj.failure_handler(original_exception=e)) - print() - print() - print() - print("\033[91m" + f"DB write failed: {e}" + "\033[0m") - print() - print() - print() + print_verbose("\033[91m" + f"DB write failed: {e}" + "\033[0m") raise e @@ -252,7 +257,7 @@ class PrismaClient: ### CUSTOM FILE ### def get_instance_fn(value: str, config_file_path: Optional[str] = None) -> Any: try: - print(f"value: {value}") + print_verbose(f"value: {value}") # Split the path by dots to separate module from instance parts = value.split(".") @@ -285,8 +290,6 @@ def get_instance_fn(value: str, config_file_path: Optional[str] = None) -> Any: except Exception as e: raise e - - ### CALL HOOKS ### class CallHooks: """ @@ -297,20 +300,55 @@ class CallHooks: 2. /embeddings """ - def __init__(self, *args, **kwargs): - self.call_details = {} + def __init__(self, user_api_key_cache: DualCache): + self.call_details: dict = {} + self.call_details["user_api_key_cache"] = user_api_key_cache def update_router_config(self, litellm_settings: dict, general_settings: dict, model_list: list): self.call_details["litellm_settings"] = litellm_settings self.call_details["general_settings"] = general_settings self.call_details["model_list"] = model_list - def pre_call(self, data: dict, call_type: Literal["completion", "embeddings"]): - self.call_details["data"] = data - return data + async def pre_call(self, user_api_key_dict: UserAPIKeyAuth, data: dict, call_type: Literal["completion", "embeddings"]): + try: + self.call_details["data"] = data + self.call_details["call_type"] = call_type - def post_call_success(self, response: Optional[Any]=None, call_type: Optional[Literal["completion", "embeddings"]]=None, chunk: Optional[Any]=None): - return response + ## check if max parallel requests set + if user_api_key_dict.max_parallel_requests is not None: + ## if set, check if request allowed + await max_parallel_request_allow_request( + max_parallel_requests=user_api_key_dict.max_parallel_requests, + api_key=user_api_key_dict.api_key, + user_api_key_cache=self.call_details["user_api_key_cache"]) + + return data + except Exception as e: + raise e - def post_call_failure(self, *args, **kwargs): - pass \ No newline at end of file + async def post_call_success(self, user_api_key_dict: UserAPIKeyAuth, response: Optional[Any]=None, call_type: Optional[Literal["completion", "embeddings"]]=None, chunk: Optional[Any]=None): + try: + # check if max parallel requests set + if user_api_key_dict.max_parallel_requests is not None: + ## decrement call, once complete + await max_parallel_request_update_count( + api_key=user_api_key_dict.api_key, + user_api_key_cache=self.call_details["user_api_key_cache"]) + + return response + except Exception as e: + raise e + + async def post_call_failure(self, original_exception: Exception, user_api_key_dict: UserAPIKeyAuth): + # check if max parallel requests set + if user_api_key_dict.max_parallel_requests is not None: + ## decrement call count if call failed + if (hasattr(original_exception, "status_code") + and original_exception.status_code == 429 + and "Max parallel request limit reached" in str(original_exception)): + pass # ignore failed calls due to max limit being reached + else: + await max_parallel_request_update_count( + api_key=user_api_key_dict.api_key, + user_api_key_cache=self.call_details["user_api_key_cache"]) + return \ No newline at end of file diff --git a/litellm/tests/test_configs/test_config.yaml b/litellm/tests/test_configs/test_config.yaml index 253a39774..a5e7802a4 100644 --- a/litellm/tests/test_configs/test_config.yaml +++ b/litellm/tests/test_configs/test_config.yaml @@ -3,7 +3,6 @@ general_settings: master_key: os.environ/PROXY_MASTER_KEY litellm_settings: drop_params: true - set_verbose: true success_callback: ["langfuse"] model_list: diff --git a/litellm/tests/test_proxy_server_keys.py b/litellm/tests/test_proxy_server_keys.py index fb0ec2f3c..5ffbfe3b0 100644 --- a/litellm/tests/test_proxy_server_keys.py +++ b/litellm/tests/test_proxy_server_keys.py @@ -1,4 +1,4 @@ -import sys, os +import sys, os, time import traceback from dotenv import load_dotenv @@ -19,7 +19,7 @@ logging.basicConfig( level=logging.DEBUG, # Set the desired logging level format="%(asctime)s - %(levelname)s - %(message)s", ) - +from concurrent.futures import ThreadPoolExecutor # test /chat/completion request to the proxy from fastapi.testclient import TestClient from fastapi import FastAPI @@ -62,6 +62,41 @@ def test_add_new_key(client): assert result["key"].startswith("sk-") print(f"Received response: {result}") except Exception as e: - pytest.fail("LiteLLM Proxy test failed. Exception", e) + pytest.fail(f"LiteLLM Proxy test failed. Exception: {str(e)}") -# # Run the test - only runs via pytest \ No newline at end of file +# # Run the test - only runs via pytest + + +def test_add_new_key_max_parallel_limit(client): + try: + # Your test data + test_data = {"duration": "20m", "max_parallel_requests": 1} + # Your bearer token + token = os.getenv("PROXY_MASTER_KEY") + + headers = { + "Authorization": f"Bearer {token}" + } + response = client.post("/key/generate", json=test_data, headers=headers) + print(f"response: {response.text}") + assert response.status_code == 200 + result = response.json() + def _post_data(): + json_data = {'model': 'azure-model', "messages": [{"role": "user", "content": f"this is a test request, write a short poem {time.time()}"}]} + response = client.post("/chat/completions", json=json_data, headers={"Authorization": f"Bearer {result['key']}"}) + return response + def _run_in_parallel(): + with ThreadPoolExecutor(max_workers=2) as executor: + future1 = executor.submit(_post_data) + future2 = executor.submit(_post_data) + + # Obtain the results from the futures + response1 = future1.result() + response2 = future2.result() + if response1.status_code == 429 or response2.status_code == 429: + pass + else: + raise Exception() + _run_in_parallel() + except Exception as e: + pytest.fail(f"LiteLLM Proxy test failed. Exception: {str(e)}") From 4e8e3ff33a28f6336a3bd0d4ce33d03906893bcd Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Fri, 8 Dec 2023 15:16:10 -0800 Subject: [PATCH 291/460] (fix) async custom logger - trigger when stream completed --- litellm/utils.py | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/litellm/utils.py b/litellm/utils.py index 12bb9eaa9..565a32c0b 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -999,12 +999,21 @@ class Logging: try: if isinstance(callback, CustomLogger): # custom logger class print_verbose(f"Async success callbacks: CustomLogger") - await callback.async_log_success_event( - kwargs=self.model_call_details, - response_obj=result, - start_time=start_time, - end_time=end_time, - ) + if self.stream: + if "complete_streaming_response" in self.model_call_details: + await callback.async_log_success_event( + kwargs=self.model_call_details, + response_obj=self.model_call_details["complete_streaming_response"], + start_time=start_time, + end_time=end_time, + ) + else: + await callback.async_log_success_event( + kwargs=self.model_call_details, + response_obj=result, + start_time=start_time, + end_time=end_time, + ) if callable(callback): # custom logger functions print_verbose(f"Async success callbacks: async_log_event") await customLogger.async_log_event( From 34428a8e67ee00ff0859af0d7ff22c360556aae8 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Fri, 8 Dec 2023 16:42:37 -0800 Subject: [PATCH 292/460] (docs) fix --- docs/my-website/docs/proxy/logging.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/my-website/docs/proxy/logging.md b/docs/my-website/docs/proxy/logging.md index ec6f2ecbe..23408e605 100644 --- a/docs/my-website/docs/proxy/logging.md +++ b/docs/my-website/docs/proxy/logging.md @@ -224,7 +224,6 @@ class MyCustomHandler(CustomLogger): {'mode': 'embedding', 'input_cost_per_token': 0.002} ``` -### Logging LLM Responses ## OpenTelemetry, ElasticSearch From b50faed5ab28f41850984bb1e6ba3543da12d924 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Fri, 8 Dec 2023 17:12:21 -0800 Subject: [PATCH 293/460] (test) callback - strict test - async callback resp --- litellm/tests/test_custom_logger.py | 36 ++++++++++++++++++----------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/litellm/tests/test_custom_logger.py b/litellm/tests/test_custom_logger.py index 0702cb52c..aed779c68 100644 --- a/litellm/tests/test_custom_logger.py +++ b/litellm/tests/test_custom_logger.py @@ -8,6 +8,7 @@ import litellm from litellm.integrations.custom_logger import CustomLogger async_success = False +complete_streaming_response_in_callback = "" class MyCustomHandler(CustomLogger): def __init__(self): self.success: bool = False # type: ignore @@ -64,28 +65,37 @@ class MyCustomHandler(CustomLogger): self.async_completion_kwargs_fail = kwargs async def async_test_logging_fn(kwargs, completion_obj, start_time, end_time): - global async_success + global async_success, complete_streaming_response_in_callback print(f"ON ASYNC LOGGING") async_success = True + print("\nKWARGS", kwargs) + complete_streaming_response_in_callback = kwargs.get("complete_streaming_response") -@pytest.mark.asyncio -async def test_chat_openai(): + +def test_async_chat_openai_stream(): try: + global complete_streaming_response_in_callback # litellm.set_verbose = True litellm.success_callback = [async_test_logging_fn] - response = await litellm.acompletion(model="gpt-3.5-turbo", - messages=[{ - "role": "user", - "content": "Hi 👋 - i'm openai" - }], - stream=True) - async for chunk in response: - continue + complete_streaming_response = "" + async def call_gpt(): + nonlocal complete_streaming_response + response = await litellm.acompletion(model="gpt-3.5-turbo", + messages=[{ + "role": "user", + "content": "Hi 👋 - i'm openai" + }], + stream=True) + async for chunk in response: + complete_streaming_response += chunk["choices"][0]["delta"]["content"] or "" + print(complete_streaming_response) + asyncio.run(call_gpt()) + assert complete_streaming_response_in_callback["choices"][0]["message"]["content"] == complete_streaming_response assert async_success == True except Exception as e: print(e) pytest.fail(f"An error occurred - {str(e)}") -# test_chat_openai() +# test_async_chat_openai_stream() def test_completion_azure_stream_moderation_failure(): try: @@ -192,4 +202,4 @@ def test_async_custom_handler(): except Exception as e: pytest.fail(f"Error occurred: {e}") -test_async_custom_handler() \ No newline at end of file +# test_async_custom_handler() \ No newline at end of file From e2373618915972fb41a2f340a2645615b237c05e Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Fri, 8 Dec 2023 17:20:07 -0800 Subject: [PATCH 294/460] (test) async logger + streaming --- litellm/tests/test_custom_logger.py | 39 +++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/litellm/tests/test_custom_logger.py b/litellm/tests/test_custom_logger.py index aed779c68..44d011932 100644 --- a/litellm/tests/test_custom_logger.py +++ b/litellm/tests/test_custom_logger.py @@ -25,6 +25,8 @@ class MyCustomHandler(CustomLogger): self.async_completion_kwargs_fail = None # type: ignore self.async_embedding_kwargs_fail = None # type: ignore + self.stream_collected_response = None # type: ignore + def log_pre_api_call(self, model, messages, kwargs): print(f"Pre-API Call") @@ -51,6 +53,8 @@ class MyCustomHandler(CustomLogger): self.async_success_embedding = True self.async_embedding_kwargs = kwargs self.async_embedding_response = response_obj + if kwargs.get("stream") == True: + self.stream_collected_response = response_obj self.async_completion_kwargs = kwargs async def async_log_failure_event(self, kwargs, response_obj, start_time, end_time): @@ -123,6 +127,41 @@ def test_completion_azure_stream_moderation_failure(): pytest.fail(f"Error occurred: {e}") +def test_async_custom_handler_stream(): + try: + # [PROD Test] - Do not DELETE + # checks if the model response available in the async + stream callbacks is equal to the received response + customHandler2 = MyCustomHandler() + litellm.callbacks = [customHandler2] + litellm.set_verbose = False + messages = [ + {"role": "system", "content": "You are a helpful assistant."}, + { + "role": "user", + "content": "write 1 sentence about litellm being amazing", + }, + ] + complete_streaming_response = "" + async def test_1(): + nonlocal complete_streaming_response + response = await litellm.acompletion( + model="azure/chatgpt-v-2", + messages=messages, + stream=True + ) + async for chunk in response: + complete_streaming_response += chunk["choices"][0]["delta"]["content"] or "" + print(complete_streaming_response) + + asyncio.run(test_1()) + + response_in_success_handler = customHandler2.stream_collected_response + response_in_success_handler = response_in_success_handler["choices"][0]["message"]["content"] + assert response_in_success_handler == complete_streaming_response + except Exception as e: + pytest.fail(f"Error occurred: {e}") +# test_async_custom_handler_stream() + def test_async_custom_handler(): try: customHandler2 = MyCustomHandler() From 88c1d6649fd43876572f931a66a61612b6821618 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Fri, 8 Dec 2023 17:22:13 -0800 Subject: [PATCH 295/460] (fix) asyc callback + stream-stop dbl cnt chunk --- litellm/utils.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/litellm/utils.py b/litellm/utils.py index 565a32c0b..07bbc744a 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -5304,7 +5304,7 @@ class CustomStreamWrapper: return {"text": text, "is_finished": is_finished, "finish_reason": finish_reason} return "" - def chunk_creator(self, chunk): + def chunk_creator(self, chunk, in_async_func=False): model_response = ModelResponse(stream=True, model=self.model) model_response.choices[0].finish_reason = None response_obj = {} @@ -5481,7 +5481,10 @@ class CustomStreamWrapper: self.sent_first_chunk = True model_response.choices[0].delta = Delta(**completion_obj) # LOGGING - threading.Thread(target=self.logging_obj.success_handler, args=(model_response,)).start() + if in_async_func != True: + # only do logging if we're not being called by _anext_ + # _anext_ does its own logging, we check to avoid double counting chunks + threading.Thread(target=self.logging_obj.success_handler, args=(model_response,)).start() print_verbose(f"model_response: {model_response}") return model_response else: @@ -5489,7 +5492,8 @@ class CustomStreamWrapper: elif model_response.choices[0].finish_reason: model_response.choices[0].finish_reason = map_finish_reason(model_response.choices[0].finish_reason) # ensure consistent output to openai # LOGGING - threading.Thread(target=self.logging_obj.success_handler, args=(model_response,)).start() + if in_async_func != True: + threading.Thread(target=self.logging_obj.success_handler, args=(model_response,)).start() return model_response elif response_obj is not None and response_obj.get("original_chunk", None) is not None: # function / tool calling branch - only set for openai/azure compatible endpoints # enter this branch when no content has been passed in response @@ -5511,7 +5515,8 @@ class CustomStreamWrapper: model_response.choices[0].delta["role"] = "assistant" self.sent_first_chunk = True # LOGGING - threading.Thread(target=self.logging_obj.success_handler, args=(model_response,)).start() # log response + if in_async_func != True: + threading.Thread(target=self.logging_obj.success_handler, args=(model_response,)).start() # log response return model_response else: return @@ -5554,7 +5559,10 @@ class CustomStreamWrapper: async for chunk in self.completion_stream: if chunk == "None" or chunk is None: raise Exception - processed_chunk = self.chunk_creator(chunk=chunk) + + # chunk_creator() does logging/stream chunk building. We need to let it know its being called in_async_func, so we don't double add chunks. + # __anext__ also calls async_success_handler, which does logging + processed_chunk = self.chunk_creator(chunk=chunk, in_async_func=True) if processed_chunk is None: continue ## LOGGING From 8c628b64e039dc661d35875cb10054c0af0d0079 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Fri, 8 Dec 2023 17:25:03 -0800 Subject: [PATCH 296/460] (test) proxy - custom logger --- .../tests/test_configs/custom_callbacks.py | 6 ++ litellm/tests/test_proxy_custom_logger.py | 62 +++++++++++++++++++ 2 files changed, 68 insertions(+) diff --git a/litellm/tests/test_configs/custom_callbacks.py b/litellm/tests/test_configs/custom_callbacks.py index b65abcfc9..94b89e589 100644 --- a/litellm/tests/test_configs/custom_callbacks.py +++ b/litellm/tests/test_configs/custom_callbacks.py @@ -17,6 +17,8 @@ class MyCustomHandler(CustomLogger): self.async_completion_kwargs_fail = None # type: ignore self.async_embedding_kwargs_fail = None # type: ignore + + self.streaming_response_obj = None # type: ignore blue_color_code = "\033[94m" reset_color_code = "\033[0m" print(f"{blue_color_code}Initialized LiteLLM custom logger") @@ -57,6 +59,10 @@ class MyCustomHandler(CustomLogger): self.async_success_embedding = True self.async_embedding_kwargs = kwargs self.async_embedding_response = response_obj + if kwargs.get("stream") == True: + self.streaming_response_obj = response_obj + + self.async_completion_kwargs = kwargs model = kwargs.get("model", None) diff --git a/litellm/tests/test_proxy_custom_logger.py b/litellm/tests/test_proxy_custom_logger.py index 503ea4a81..a97f42843 100644 --- a/litellm/tests/test_proxy_custom_logger.py +++ b/litellm/tests/test_proxy_custom_logger.py @@ -87,6 +87,68 @@ def test_chat_completion(client): pytest.fail("LiteLLM Proxy test failed. Exception", e) +def test_chat_completion_stream(client): + try: + # Your test data + import json + print("initialized proxy") + # import the initialized custom logger + print(litellm.callbacks) + + assert len(litellm.callbacks) == 1 # assert litellm is initialized with 1 callback + my_custom_logger = litellm.callbacks[0] + + assert my_custom_logger.streaming_response_obj == None # no streaming response obj is set pre call + + test_data = { + "model": "Azure OpenAI GPT-4 Canada", + "messages": [ + { + "role": "user", + "content": "write 1 line poem about LiteLLM" + }, + ], + "max_tokens": 40, + "stream": True # streaming call + } + + + response = client.post("/chat/completions", json=test_data, headers=headers) + print("made request", response.status_code, response.text) + complete_response = "" + for line in response.iter_lines(): + if line: + # Process the streaming data line here + print("\n\n Line", line) + print(line) + line = str(line) + + json_data = line.replace('data: ', '') + + # Parse the JSON string + data = json.loads(json_data) + + print("\n\n decode_data", data) + + # Access the content of choices[0]['message']['content'] + content = data['choices'][0]['delta']['content'] or "" + + # Process the content as needed + print("Content:", content) + + complete_response+= content + + print("\n\nHERE is the complete streaming response string", complete_response) + print("\n\nHERE IS the streaming Response from callback\n\n") + print(my_custom_logger.streaming_response_obj) + + streamed_response = my_custom_logger.streaming_response_obj + assert complete_response == streamed_response["choices"][0]["message"]["content"] + + except Exception as e: + pytest.fail("LiteLLM Proxy test failed. Exception", e) + + def test_embedding(client): try: From 5efe336968dced48ca4ea8de8eb49adb159d3326 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Fri, 8 Dec 2023 17:26:14 -0800 Subject: [PATCH 297/460] (fix) linting --- litellm/proxy/proxy_server.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 843930ad6..3ff097b5e 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -1124,7 +1124,7 @@ async def generate_key_fn(request: Request, data: GenerateKeyRequest, Authorizat - user_id: (str) Unique user id - used for tracking spend across multiple keys for same user id. """ # data = await request.json() - data_json = data.model_dump() + data_json = data.model_dump() # type: ignore response = await generate_key_helper_fn(**data_json) return GenerateKeyResponse(key=response["token"], expires=response["expires"], user_id=response["user_id"]) From f2bba58a24b9cefd46c8a982e1e45e3bf9dc6b29 Mon Sep 17 00:00:00 2001 From: Krish Dholakia Date: Fri, 8 Dec 2023 17:49:42 -0800 Subject: [PATCH 298/460] Updated config.yml --- .circleci/config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index d3d51a483..9c7a84346 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -37,6 +37,7 @@ jobs: pip install traceloop-sdk==0.0.69 pip install openai pip install prisma + pip install langfuse - save_cache: paths: - ./venv From 39ea2e09096bd5802bee4a077d3bb9f9e1b5843a Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Fri, 8 Dec 2023 17:49:41 -0800 Subject: [PATCH 299/460] (ci/cd) add langfuse --- .circleci/config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index 9c7a84346..6caed4810 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -33,6 +33,7 @@ jobs: pip install "boto3>=1.28.57" pip install appdirs pip install langchain + pip install langfuse pip install numpydoc pip install traceloop-sdk==0.0.69 pip install openai From ccee0cefe4e33ea9b6236eef211c246fc47fe9f0 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Fri, 8 Dec 2023 17:50:14 -0800 Subject: [PATCH 300/460] (ci/cd) run tests --- litellm/tests/test_completion.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index 023f1ebd2..07727fafa 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -7,7 +7,7 @@ import os, io sys.path.insert( 0, os.path.abspath("../..") -) # Adds the parent directory to the system path +) # Adds the parent directory to the system path import pytest import litellm from litellm import embedding, completion, completion_cost, Timeout From b84f6670eaa601123853c068ff78ccdcf07a477a Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Fri, 8 Dec 2023 18:00:58 -0800 Subject: [PATCH 301/460] (docs) custom callbacks proxy --- docs/my-website/docs/proxy/logging.md | 59 +++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/docs/my-website/docs/proxy/logging.md b/docs/my-website/docs/proxy/logging.md index 23408e605..1c883a931 100644 --- a/docs/my-website/docs/proxy/logging.md +++ b/docs/my-website/docs/proxy/logging.md @@ -224,6 +224,65 @@ class MyCustomHandler(CustomLogger): {'mode': 'embedding', 'input_cost_per_token': 0.002} ``` +### Logging responses from proxy +Both `/chat/completions` and `/embeddings` responses are available as `response_obj` + +**Note: for `/chat/completions`, both `stream=True` and `non stream` responses are available as `response_obj`** + +```python +class MyCustomHandler(CustomLogger): + async def async_log_success_event(self, kwargs, response_obj, start_time, end_time): + print(f"On Async Success!") + print(response_obj) + +``` + +**Expected Output /chat/completion [for both `stream` and `non-stream` responses]** +```json +ModelResponse( + id='chatcmpl-8Tfu8GoMElwOZuj2JlHBhNHG01PPo', + choices=[ + Choices( + finish_reason='stop', + index=0, + message=Message( + content='As an AI language model, I do not have a physical body and therefore do not possess any degree or educational qualifications. My knowledge and abilities come from the programming and algorithms that have been developed by my creators.', + role='assistant' + ) + ) + ], + created=1702083284, + model='chatgpt-v-2', + object='chat.completion', + system_fingerprint=None, + usage=Usage( + completion_tokens=42, + prompt_tokens=5, + total_tokens=47 + ) +) +``` + +**Expected Output /embeddings** +```json +{ + 'model': 'ada', + 'data': [ + { + 'embedding': [ + -0.035126980394124985, -0.020624293014407158, -0.015343423001468182, + -0.03980357199907303, -0.02750781551003456, 0.02111034281551838, + -0.022069307044148445, -0.019442008808255196, -0.00955679826438427, + -0.013143060728907585, 0.029583381488919258, -0.004725852981209755, + -0.015198921784758568, -0.014069183729588985, 0.00897879246622324, + 0.01521205808967352, + # ... (truncated for brevity) + ] + } + ] +} +``` + ## OpenTelemetry, ElasticSearch From 1ca50c5fa2e36640368edca9ce033fd110e5df2a Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Fri, 8 Dec 2023 18:11:01 -0800 Subject: [PATCH 302/460] (ci/cd) run again --- litellm/tests/test_completion.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index 07727fafa..fc08a5ab5 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -7,7 +7,7 @@ import os, io sys.path.insert( 0, os.path.abspath("../..") -) # Adds the parent directory to the system path +) # Adds the parent directory to the system path import pytest import litellm from litellm import embedding, completion, completion_cost, Timeout From 13731f4bd8d0df64f26496cd972fb9b3a0f9cb56 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Fri, 8 Dec 2023 18:25:11 -0800 Subject: [PATCH 303/460] (test) fix --- litellm/tests/test_proxy_custom_logger.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/litellm/tests/test_proxy_custom_logger.py b/litellm/tests/test_proxy_custom_logger.py index a97f42843..06e0ab10f 100644 --- a/litellm/tests/test_proxy_custom_logger.py +++ b/litellm/tests/test_proxy_custom_logger.py @@ -79,7 +79,7 @@ def test_chat_completion(client): proxy_server_request_object = litellm_params.get("proxy_server_request") assert config_model_info == {'mode': 'chat', 'input_cost_per_token': 0.0002} - assert proxy_server_request_object == {'url': 'http://testserver/chat/completions', 'method': 'POST', 'headers': {'host': 'testserver', 'accept': '*/*', 'accept-encoding': 'gzip, deflate', 'connection': 'keep-alive', 'user-agent': 'testclient', 'authorization': 'Bearer None', 'content-length': '105', 'content-type': 'application/json'}, 'body': {'model': 'Azure OpenAI GPT-4 Canada', 'messages': [{'role': 'user', 'content': 'hi'}], 'max_tokens': 10}} + assert proxy_server_request_object == {'url': 'http://testserver/chat/completions', 'method': 'POST', 'headers': {'host': 'testserver', 'accept': '*/*', 'accept-encoding': 'gzip, deflate', 'connection': 'keep-alive', 'user-agent': 'testclient', 'authorization': 'Bearer sk-1234', 'content-length': '105', 'content-type': 'application/json'}, 'body': {'model': 'Azure OpenAI GPT-4 Canada', 'messages': [{'role': 'user', 'content': 'hi'}], 'max_tokens': 10}} result = response.json() print(f"Received response: {result}") print("\nPassed /chat/completions with Custom Logger!") @@ -174,7 +174,7 @@ def test_embedding(client): litellm_params = kwargs.get("litellm_params") proxy_server_request = litellm_params.get("proxy_server_request") model_info = litellm_params.get("model_info") - assert proxy_server_request == {'url': 'http://testserver/embeddings', 'method': 'POST', 'headers': {'host': 'testserver', 'accept': '*/*', 'accept-encoding': 'gzip, deflate', 'connection': 'keep-alive', 'user-agent': 'testclient', 'authorization': 'Bearer None', 'content-length': '54', 'content-type': 'application/json'}, 'body': {'model': 'azure-embedding-model', 'input': ['hello']}} + assert proxy_server_request == {'url': 'http://testserver/embeddings', 'method': 'POST', 'headers': {'host': 'testserver', 'accept': '*/*', 'accept-encoding': 'gzip, deflate', 'connection': 'keep-alive', 'user-agent': 'testclient', 'authorization': 'Bearer sk-1234', 'content-length': '54', 'content-type': 'application/json'}, 'body': {'model': 'azure-embedding-model', 'input': ['hello']}} assert model_info == {'input_cost_per_token': 0.002, 'mode': 'embedding'} result = response.json() print(f"Received response: {result}") From 0dc7d538b5db946aa92a2647d93f05af404dc3ae Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Fri, 8 Dec 2023 18:39:52 -0800 Subject: [PATCH 304/460] (docs) proxy - OTEL + traceloop --- docs/my-website/docs/proxy/logging.md | 81 ++++++++++++++------------- litellm/proxy/proxy_server.py | 4 ++ 2 files changed, 46 insertions(+), 39 deletions(-) diff --git a/docs/my-website/docs/proxy/logging.md b/docs/my-website/docs/proxy/logging.md index 1c883a931..f5e54351b 100644 --- a/docs/my-website/docs/proxy/logging.md +++ b/docs/my-website/docs/proxy/logging.md @@ -284,9 +284,47 @@ ModelResponse( ``` -## OpenTelemetry, ElasticSearch +## OpenTelemetry - Traceloop -### Step 1 Start OpenTelemetry Collecter Docker Container +Traceloop allows you to log LLM Input/Output in the OpenTelemetry format + +We will use the `--config` to set `litellm.success_callback = ["traceloop"]` this will log all successfull LLM calls to traceloop + +**Step 1** Install traceloop-sdk and set Traceloop API key + +```shell +pip install traceloop-sdk -U +``` + +```shell +TRACELOOP_API_KEY=51e7164.. +``` + +**Step 2**: Create a `config.yaml` file and set `litellm_settings`: `success_callback` +```yaml +model_list: + - model_name: gpt-3.5-turbo + litellm_params: + model: gpt-3.5-turbo +litellm_settings: + success_callback: ["traceloop"] +``` + +**Step 3**: Start the proxy, make a test request + +Start proxy +```shell +litellm --config config.yaml --debug +``` + +Test Request +``` +litellm --test +``` + + + + ## Logging Proxy Input/Output - Langfuse We will use the `--config` to set `litellm.success_callback = ["langfuse"]` this will log all successfull LLM calls to langfuse diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 3ff097b5e..8a4e12c80 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -523,6 +523,10 @@ def load_router_config(router: Optional[litellm.Router], config_file_path: str): # these are litellm callbacks - "langfuse", "sentry", "wandb" else: litellm.success_callback.append(callback) + if callback == "traceloop": + from traceloop.sdk import Traceloop + print_verbose(f"{blue_color_code} Initializing Traceloop SDK - \nRunning:`Traceloop.init(app_name='Litellm-Server', disable_batch=True)`") + Traceloop.init(app_name="Litellm-Server", disable_batch=True) print_verbose(f"{blue_color_code} Initialized Success Callbacks - {litellm.success_callback} {reset_color_code}") elif key == "failure_callback": litellm.failure_callback = [] From c7eebf75a829ef039cb40eb5311f53ac8983efc9 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Fri, 8 Dec 2023 18:46:19 -0800 Subject: [PATCH 305/460] (ci/cd) test proxy custom logger --- ...oxy_custom_logger.py => test_amazing_proxy_custom_logger.py} | 2 ++ 1 file changed, 2 insertions(+) rename litellm/tests/{test_proxy_custom_logger.py => test_amazing_proxy_custom_logger.py} (99%) diff --git a/litellm/tests/test_proxy_custom_logger.py b/litellm/tests/test_amazing_proxy_custom_logger.py similarity index 99% rename from litellm/tests/test_proxy_custom_logger.py rename to litellm/tests/test_amazing_proxy_custom_logger.py index 06e0ab10f..3e3e7468f 100644 --- a/litellm/tests/test_proxy_custom_logger.py +++ b/litellm/tests/test_amazing_proxy_custom_logger.py @@ -141,6 +141,8 @@ def test_chat_completion_stream(client): print("\n\nHERE is the complete streaming response string", complete_response) print("\n\nHERE IS the streaming Response from callback\n\n") print(my_custom_logger.streaming_response_obj) + import time + time.sleep(0.5) streamed_response = my_custom_logger.streaming_response_obj assert complete_response == streamed_response["choices"][0]["message"]["content"] From dface6a36fec2bbdd41571f61177217f4856209e Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Fri, 8 Dec 2023 18:47:18 -0800 Subject: [PATCH 306/460] (docs) traceloop --- docs/my-website/docs/proxy/logging.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/docs/my-website/docs/proxy/logging.md b/docs/my-website/docs/proxy/logging.md index f5e54351b..3b35acdbe 100644 --- a/docs/my-website/docs/proxy/logging.md +++ b/docs/my-website/docs/proxy/logging.md @@ -319,7 +319,17 @@ litellm --config config.yaml --debug Test Request ``` -litellm --test +curl --location 'http://0.0.0.0:8000/chat/completions' \ + --header 'Content-Type: application/json' \ + --data ' { + "model": "gpt-3.5-turbo", + "messages": [ + { + "role": "user", + "content": "what llm are you" + } + ] + }' ``` From fcc9f3c504d690fd0dbbc8df305aac986c3d3178 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Fri, 8 Dec 2023 18:55:18 -0800 Subject: [PATCH 307/460] (ci/cd) q up another test --- litellm/tests/test_caching.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/tests/test_caching.py b/litellm/tests/test_caching.py index c3bf5478b..1e1a7271b 100644 --- a/litellm/tests/test_caching.py +++ b/litellm/tests/test_caching.py @@ -266,7 +266,7 @@ test_redis_cache_completion_stream() # redis cache with custom keys def custom_get_cache_key(*args, **kwargs): - # return key to use for your cache: + # return key to use for your cache: key = kwargs.get("model", "") + str(kwargs.get("messages", "")) + str(kwargs.get("temperature", "")) + str(kwargs.get("logit_bias", "")) return key From 4cdada62c5cdc4aac63625c773f73f11f8e3c4aa Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Fri, 8 Dec 2023 19:04:45 -0800 Subject: [PATCH 308/460] (ci/cd) run another test --- litellm/tests/test_completion.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index fc08a5ab5..03bf54486 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -7,7 +7,7 @@ import os, io sys.path.insert( 0, os.path.abspath("../..") -) # Adds the parent directory to the system path +) # Adds the parent directory to the system path import pytest import litellm from litellm import embedding, completion, completion_cost, Timeout From d7265a84c92e19e986a573a1f2072aca0d94056b Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Fri, 8 Dec 2023 19:10:35 -0800 Subject: [PATCH 309/460] (test) caching reset success_callback --- litellm/tests/test_caching.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/litellm/tests/test_caching.py b/litellm/tests/test_caching.py index 1e1a7271b..7653a0748 100644 --- a/litellm/tests/test_caching.py +++ b/litellm/tests/test_caching.py @@ -194,6 +194,7 @@ def test_redis_cache_completion(): def test_redis_cache_completion_stream(): try: + litellm.success_callback = [] litellm.set_verbose = True random_number = random.randint(1, 100000) # add a random number to ensure it's always adding / reading from cache messages = [{"role": "user", "content": f"write a one sentence poem about: {random_number}"}] @@ -214,9 +215,11 @@ def test_redis_cache_completion_stream(): print("\nresponse 1", response_1_content) print("\nresponse 2", response_2_content) assert response_1_content == response_2_content, f"Response 1 != Response 2. Same params, Response 1{response_1_content} != Response 2{response_2_content}" + litellm.success_callback = [] litellm.cache = None except Exception as e: print(e) + litellm.success_callback = [] raise e """ From 04ec3637888b4d11350c406e64ae651689118ff9 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Fri, 8 Dec 2023 19:14:46 -0800 Subject: [PATCH 310/460] (test) redis cache --- litellm/caching.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/litellm/caching.py b/litellm/caching.py index dc4c339f2..c79f667df 100644 --- a/litellm/caching.py +++ b/litellm/caching.py @@ -91,6 +91,7 @@ class RedisCache(BaseCache): def set_cache(self, key, value, **kwargs): ttl = kwargs.get("ttl", None) + print_verbose(f"Set Redis Cache: key: {key}\nValue {value}") try: self.redis_client.set(name=key, value=str(value), ex=ttl) except Exception as e: @@ -99,8 +100,9 @@ class RedisCache(BaseCache): def get_cache(self, key, **kwargs): try: - # TODO convert this to a ModelResponse object + print_verbose(f"Get Redis Cache: key: {key}") cached_response = self.redis_client.get(key) + print_verbose(f"Got Redis Cache: key: {key}, cached_response {cached_response}") if cached_response != None: # cached_response is in `b{} convert it to ModelResponse cached_response = cached_response.decode("utf-8") # Convert bytes to string From db51a95a42fcf343f0491020e9c3bf9d1528691b Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Fri, 8 Dec 2023 19:16:12 -0800 Subject: [PATCH 311/460] (test) init success_callback = [] for ci/cd --- litellm/tests/test_completion.py | 1 + 1 file changed, 1 insertion(+) diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index 03bf54486..4660ea914 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -14,6 +14,7 @@ from litellm import embedding, completion, completion_cost, Timeout from litellm import RateLimitError litellm.num_retries = 3 litellm.cache = None +litellm.success_callback = [] user_message = "Write a short poem about the sky" messages = [{"content": user_message, "role": "user"}] From 9e9781d1933ce1204f8043edf1fbaabc31ae7593 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Fri, 8 Dec 2023 19:26:05 -0800 Subject: [PATCH 312/460] (Docs) Proxy,remove traceloop api key req --- docs/my-website/docs/proxy/logging.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/my-website/docs/proxy/logging.md b/docs/my-website/docs/proxy/logging.md index 3b35acdbe..c70c8680f 100644 --- a/docs/my-website/docs/proxy/logging.md +++ b/docs/my-website/docs/proxy/logging.md @@ -296,9 +296,8 @@ We will use the `--config` to set `litellm.success_callback = ["traceloop"]` thi pip install traceloop-sdk -U ``` -```shell -TRACELOOP_API_KEY=51e7164.. -``` +Traceloop outputs standard OpenTelemetry data that can be connected to your observability stack. Send standard OpenTelemetry from LiteLLM Proxy to [Traceloop](https://www.traceloop.com/docs/openllmetry/integrations/traceloop), [Dynatrace](https://www.traceloop.com/docs/openllmetry/integrations/dynatrace), [Datadog](https://www.traceloop.com/docs/openllmetry/integrations/datadog) +, [New Relic](https://www.traceloop.com/docs/openllmetry/integrations/newrelic), [Honeycomb](https://www.traceloop.com/docs/openllmetry/integrations/honeycomb), [Grafana Tempo](https://www.traceloop.com/docs/openllmetry/integrations/grafana), [Splunk](https://www.traceloop.com/docs/openllmetry/integrations/splunk), [OpenTelemetry Collector](https://www.traceloop.com/docs/openllmetry/integrations/otel-collector) **Step 2**: Create a `config.yaml` file and set `litellm_settings`: `success_callback` ```yaml From d9b115b8fba4c0483b4ec6974745909b02787a47 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Fri, 8 Dec 2023 19:26:55 -0800 Subject: [PATCH 313/460] (ci/cd) run again --- litellm/tests/test_completion.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index 4660ea914..96ddee40a 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -14,7 +14,7 @@ from litellm import embedding, completion, completion_cost, Timeout from litellm import RateLimitError litellm.num_retries = 3 litellm.cache = None -litellm.success_callback = [] +litellm.success_callback = [] user_message = "Write a short poem about the sky" messages = [{"content": user_message, "role": "user"}] From 4bf875d3ed4d0b9cbd521adeb4f7edddadf6d45f Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Fri, 8 Dec 2023 20:29:37 -0800 Subject: [PATCH 314/460] fix(router.py): fix least-busy routing --- litellm/__init__.py | 1 + litellm/caching.py | 4 - litellm/integrations/custom_logger.py | 19 +++++ litellm/router.py | 51 +++++++++---- litellm/router_strategy/least_busy.py | 96 ++++++++++++++++++++++++ litellm/tests/test_least_busy_routing.py | 79 +++++++++++++++++++ litellm/tests/test_router.py | 8 +- litellm/utils.py | 65 +++++++++++++--- 8 files changed, 292 insertions(+), 31 deletions(-) create mode 100644 litellm/router_strategy/least_busy.py create mode 100644 litellm/tests/test_least_busy_routing.py diff --git a/litellm/__init__.py b/litellm/__init__.py index 11757eab8..b7aeeb210 100644 --- a/litellm/__init__.py +++ b/litellm/__init__.py @@ -9,6 +9,7 @@ input_callback: List[Union[str, Callable]] = [] success_callback: List[Union[str, Callable]] = [] failure_callback: List[Union[str, Callable]] = [] callbacks: List[Callable] = [] +_async_input_callback: List[Callable] = [] # internal variable - async custom callbacks are routed here. _async_success_callback: List[Callable] = [] # internal variable - async custom callbacks are routed here. _async_failure_callback: List[Callable] = [] # internal variable - async custom callbacks are routed here. pre_call_rules: List[Callable] = [] diff --git a/litellm/caching.py b/litellm/caching.py index c79f667df..bbad49716 100644 --- a/litellm/caching.py +++ b/litellm/caching.py @@ -61,8 +61,6 @@ class InMemoryCache(BaseCache): cached_response = json.loads(original_cached_response) except: cached_response = original_cached_response - if isinstance(cached_response, dict): - cached_response['cache'] = True # set cache-hit flag to True return cached_response return None @@ -110,8 +108,6 @@ class RedisCache(BaseCache): cached_response = json.loads(cached_response) # Convert string to dictionary except: cached_response = ast.literal_eval(cached_response) - if isinstance(cached_response, dict): - cached_response['cache'] = True # set cache-hit flag to True return cached_response except Exception as e: # NON blocking - notify users Redis is throwing an exception diff --git a/litellm/integrations/custom_logger.py b/litellm/integrations/custom_logger.py index 586c90819..d0efc2fb0 100644 --- a/litellm/integrations/custom_logger.py +++ b/litellm/integrations/custom_logger.py @@ -27,6 +27,9 @@ class CustomLogger: # https://docs.litellm.ai/docs/observability/custom_callback def log_failure_event(self, kwargs, response_obj, start_time, end_time): pass + + async def async_log_pre_api_call(self, model, messages, kwargs): + pass async def async_log_success_event(self, kwargs, response_obj, start_time, end_time): pass @@ -51,6 +54,22 @@ class CustomLogger: # https://docs.litellm.ai/docs/observability/custom_callback traceback.print_exc() print_verbose(f"Custom Logger Error - {traceback.format_exc()}") + async def async_log_input_event(self, model, messages, kwargs, print_verbose, callback_func): + try: + kwargs["model"] = model + kwargs["messages"] = messages + kwargs["log_event_type"] = "pre_api_call" + await callback_func( + kwargs, + ) + print_verbose( + f"Custom Logger - model call details: {kwargs}" + ) + except: + traceback.print_exc() + print_verbose(f"Custom Logger Error - {traceback.format_exc()}") + + def log_event(self, kwargs, response_obj, start_time, end_time, print_verbose, callback_func): # Method definition try: diff --git a/litellm/router.py b/litellm/router.py index edbc3cd74..5a0cf8a37 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -9,14 +9,14 @@ from datetime import datetime from typing import Dict, List, Optional, Union, Literal, Any -import random, threading, time, traceback +import random, threading, time, traceback, uuid import litellm, openai from litellm.caching import RedisCache, InMemoryCache, DualCache import logging, asyncio import inspect, concurrent from openai import AsyncOpenAI from collections import defaultdict - +from litellm.router_strategy.least_busy import LeastBusyLoggingHandler class Router: """ Example usage: @@ -57,6 +57,7 @@ class Router: default_cache_time_seconds: int = 1 * 60 * 60 # 1 hour num_retries: int = 0 tenacity = None + leastbusy_logger: Optional[LeastBusyLoggingHandler] = None def __init__(self, model_list: Optional[list] = None, @@ -98,7 +99,7 @@ class Router: self.fail_calls: defaultdict = defaultdict(int) # dict to store fail_calls made to each model self.success_calls: defaultdict = defaultdict(int) # dict to store success_calls made to each model self.previous_models: List = [] # list to store failed calls (passed in as metadata to next call) - + # make Router.chat.completions.create compatible for openai.chat.completions.create self.chat = litellm.Chat(params=default_litellm_params) @@ -107,10 +108,6 @@ class Router: self.default_litellm_params.setdefault("timeout", timeout) self.default_litellm_params.setdefault("max_retries", 0) - - ### HEALTH CHECK THREAD ### - if self.routing_strategy == "least-busy": - self._start_health_check_thread() ### CACHING ### cache_type = "local" # default to an in-memory cache redis_cache = None @@ -137,6 +134,16 @@ class Router: litellm.cache = litellm.Cache(type=cache_type, **cache_config) self.cache_responses = cache_responses self.cache = DualCache(redis_cache=redis_cache, in_memory_cache=InMemoryCache()) # use a dual cache (Redis+In-Memory) for tracking cooldowns, usage, etc. + ### ROUTING SETUP ### + if routing_strategy == "least-busy": + self.leastbusy_logger = LeastBusyLoggingHandler(router_cache=self.cache) + ## add callback + if isinstance(litellm.input_callback, list): + litellm.input_callback.append(self.leastbusy_logger) # type: ignore + else: + litellm.input_callback = [self.leastbusy_logger] # type: ignore + if isinstance(litellm.callbacks, list): + litellm.callbacks.append(self.leastbusy_logger) # type: ignore ## USAGE TRACKING ## if isinstance(litellm.success_callback, list): litellm.success_callback.append(self.deployment_callback) @@ -664,6 +671,7 @@ class Router: return kwargs except Exception as e: raise e + def _set_cooldown_deployments(self, deployment: str): """ @@ -873,6 +881,10 @@ class Router: for model in self.model_list: litellm_params = model.get("litellm_params", {}) model_name = litellm_params.get("model") + #### MODEL ID INIT ######## + model_info = model.get("model_info", {}) + model_info["id"] = model_info.get("id", str(uuid.uuid4())) + model["model_info"] = model_info #### for OpenAI / Azure we need to initalize the Client for High Traffic ######## custom_llm_provider = litellm_params.get("custom_llm_provider") if custom_llm_provider is None: @@ -1119,8 +1131,8 @@ class Router: healthy_deployments = [m for m in self.model_list if m["model_name"] == model] if len(healthy_deployments) == 0: # check if the user sent in a deployment name instead - healthy_deployments = [m for m in self.model_list if m["litellm_params"]["model"] == model] + self.print_verbose(f"initial list of deployments: {healthy_deployments}") deployments_to_remove = [] cooldown_deployments = self._get_cooldown_deployments() @@ -1140,13 +1152,24 @@ class Router: model = litellm.model_alias_map[ model ] # update the model to the actual value if an alias has been passed in - if self.routing_strategy == "least-busy": - if len(self.healthy_deployments) > 0: - for item in self.healthy_deployments: - if item[0]["model_name"] == model: # first one in queue will be the one with the most availability - return item[0] + if self.routing_strategy == "least-busy" and self.leastbusy_logger is not None: + deployments = self.leastbusy_logger.get_available_deployments(model_group=model) + # pick least busy deployment + min_traffic = float('inf') + min_deployment = None + for k, v in deployments.items(): + if v < min_traffic: + min_deployment = k + ############## No Available Deployments passed, we do a random pick ################# + if min_deployment is None: + min_deployment = random.choice(healthy_deployments) + ############## Available Deployments passed, we find the relevant item ################# else: - raise ValueError("No models available.") + for m in healthy_deployments: + if m["model_info"]["id"] == min_deployment: + return m + min_deployment = random.choice(healthy_deployments) + return min_deployment elif self.routing_strategy == "simple-shuffle": # if users pass rpm or tpm, we do a random weighted pick - based on rpm/tpm ############## Check if we can do a RPM/TPM based weighted pick ################# diff --git a/litellm/router_strategy/least_busy.py b/litellm/router_strategy/least_busy.py new file mode 100644 index 000000000..0080e3fa8 --- /dev/null +++ b/litellm/router_strategy/least_busy.py @@ -0,0 +1,96 @@ +#### What this does #### +# identifies least busy deployment +# How is this achieved? +# - Before each call, have the router print the state of requests {"deployment": "requests_in_flight"} +# - use litellm.input_callbacks to log when a request is just about to be made to a model - {"deployment-id": traffic} +# - use litellm.success + failure callbacks to log when a request completed +# - in get_available_deployment, for a given model group name -> pick based on traffic + +import dotenv, os, requests +from typing import Optional +dotenv.load_dotenv() # Loading env variables using dotenv +import traceback +from litellm.caching import DualCache +from litellm.integrations.custom_logger import CustomLogger + +class LeastBusyLoggingHandler(CustomLogger): + + def __init__(self, router_cache: DualCache): + self.router_cache = router_cache + self.mapping_deployment_to_id: dict = {} + + + def log_pre_api_call(self, model, messages, kwargs): + """ + Log when a model is being used. + + Caching based on model group. + """ + try: + + if kwargs['litellm_params'].get('metadata') is None: + pass + else: + deployment = kwargs['litellm_params']['metadata'].get('deployment', None) + model_group = kwargs['litellm_params']['metadata'].get('model_group', None) + id = kwargs['litellm_params'].get('model_info', {}).get('id', None) + if deployment is None or model_group is None or id is None: + return + + # map deployment to id + self.mapping_deployment_to_id[deployment] = id + + request_count_api_key = f"{model_group}_request_count" + # update cache + request_count_dict = self.router_cache.get_cache(key=request_count_api_key) or {} + request_count_dict[deployment] = request_count_dict.get(deployment, 0) + 1 + self.router_cache.set_cache(key=request_count_api_key, value=request_count_dict) + except Exception as e: + pass + + async def async_log_success_event(self, kwargs, response_obj, start_time, end_time): + try: + if kwargs['litellm_params'].get('metadata') is None: + pass + else: + deployment = kwargs['litellm_params']['metadata'].get('deployment', None) + model_group = kwargs['litellm_params']['metadata'].get('model_group', None) + if deployment is None or model_group is None: + return + + + request_count_api_key = f"{model_group}_request_count" + # decrement count in cache + request_count_dict = self.router_cache.get_cache(key=request_count_api_key) or {} + request_count_dict[deployment] = request_count_dict.get(deployment) + self.router_cache.set_cache(key=request_count_api_key, value=request_count_dict) + except Exception as e: + pass + + async def async_log_failure_event(self, kwargs, response_obj, start_time, end_time): + try: + if kwargs['litellm_params'].get('metadata') is None: + pass + else: + deployment = kwargs['litellm_params']['metadata'].get('deployment', None) + model_group = kwargs['litellm_params']['metadata'].get('model_group', None) + if deployment is None or model_group is None: + return + + + request_count_api_key = f"{model_group}_request_count" + # decrement count in cache + request_count_dict = self.router_cache.get_cache(key=request_count_api_key) or {} + request_count_dict[deployment] = request_count_dict.get(deployment) + self.router_cache.set_cache(key=request_count_api_key, value=request_count_dict) + except Exception as e: + pass + + def get_available_deployments(self, model_group: str): + request_count_api_key = f"{model_group}_request_count" + request_count_dict = self.router_cache.get_cache(key=request_count_api_key) or {} + # map deployment to id + return_dict = {} + for key, value in request_count_dict.items(): + return_dict[self.mapping_deployment_to_id[key]] = value + return return_dict \ No newline at end of file diff --git a/litellm/tests/test_least_busy_routing.py b/litellm/tests/test_least_busy_routing.py new file mode 100644 index 000000000..05d3f3ec6 --- /dev/null +++ b/litellm/tests/test_least_busy_routing.py @@ -0,0 +1,79 @@ +# #### What this tests #### +# # This tests the router's ability to identify the least busy deployment + +# # +# # How is this achieved? +# # - Before each call, have the router print the state of requests {"deployment": "requests_in_flight"} +# # - use litellm.input_callbacks to log when a request is just about to be made to a model - {"deployment-id": traffic} +# # - use litellm.success + failure callbacks to log when a request completed +# # - in get_available_deployment, for a given model group name -> pick based on traffic + +# import sys, os, asyncio, time +# import traceback +# from dotenv import load_dotenv + +# load_dotenv() +# import os + +# sys.path.insert( +# 0, os.path.abspath("../..") +# ) # Adds the parent directory to the system path +# import pytest +# from litellm import Router +# import litellm + +# async def test_least_busy_routing(): +# model_list = [{ +# "model_name": "azure-model", +# "litellm_params": { +# "model": "azure/gpt-turbo", +# "api_key": "os.environ/AZURE_FRANCE_API_KEY", +# "api_base": "https://openai-france-1234.openai.azure.com", +# "rpm": 1440, +# } +# }, { +# "model_name": "azure-model", +# "litellm_params": { +# "model": "azure/gpt-35-turbo", +# "api_key": "os.environ/AZURE_EUROPE_API_KEY", +# "api_base": "https://my-endpoint-europe-berri-992.openai.azure.com", +# "rpm": 6 +# } +# }, { +# "model_name": "azure-model", +# "litellm_params": { +# "model": "azure/gpt-35-turbo", +# "api_key": "os.environ/AZURE_CANADA_API_KEY", +# "api_base": "https://my-endpoint-canada-berri992.openai.azure.com", +# "rpm": 6 +# } +# }] +# router = Router(model_list=model_list, +# routing_strategy="least-busy", +# set_verbose=False, +# num_retries=3) # type: ignore + +# async def call_azure_completion(): +# try: +# response = await router.acompletion( +# model="azure-model", +# messages=[ +# { +# "role": "user", +# "content": "hello this request will pass" +# } +# ] +# ) +# print("\n response", response) +# return response +# except: +# return None + +# n = 1000 +# start_time = time.time() +# tasks = [call_azure_completion() for _ in range(n)] +# chat_completions = await asyncio.gather(*tasks) +# successful_completions = [c for c in chat_completions if c is not None] +# print(n, time.time() - start_time, len(successful_completions)) + +# asyncio.run(test_least_busy_routing()) \ No newline at end of file diff --git a/litellm/tests/test_router.py b/litellm/tests/test_router.py index e135f4228..6f43ed99f 100644 --- a/litellm/tests/test_router.py +++ b/litellm/tests/test_router.py @@ -226,10 +226,12 @@ def test_call_one_endpoint(): ) print("\n response", response) + tasks = [] + tasks.append(call_azure_completion()) + tasks.append(call_bedrock_claude()) + tasks.append(call_azure_embedding()) - asyncio.run(call_azure_completion()) - asyncio.run(call_bedrock_claude()) - asyncio.run(call_azure_embedding()) + asyncio.gather(**tasks) os.environ["AZURE_API_BASE"] = old_api_base os.environ["AZURE_API_KEY"] = old_api_key diff --git a/litellm/utils.py b/litellm/utils.py index 07bbc744a..b8e4dd069 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -562,19 +562,25 @@ class Logging: **self.optional_params } + def _pre_call(self, input, api_key, model=None, additional_args={}): + """ + Common helper function across the sync + async pre-call function + """ + # print_verbose(f"logging pre call for model: {self.model} with call type: {self.call_type}") + self.model_call_details["input"] = input + self.model_call_details["api_key"] = api_key + self.model_call_details["additional_args"] = additional_args + self.model_call_details["log_event_type"] = "pre_api_call" + if ( + model + ): # if model name was changes pre-call, overwrite the initial model call name with the new one + self.model_call_details["model"] = model + def pre_call(self, input, api_key, model=None, additional_args={}): # Log the exact input to the LLM API litellm.error_logs['PRE_CALL'] = locals() try: - # print_verbose(f"logging pre call for model: {self.model} with call type: {self.call_type}") - self.model_call_details["input"] = input - self.model_call_details["api_key"] = api_key - self.model_call_details["additional_args"] = additional_args - self.model_call_details["log_event_type"] = "pre_api_call" - if ( - model - ): # if model name was changes pre-call, overwrite the initial model call name with the new one - self.model_call_details["model"] = model + self._pre_call(input=input, api_key=api_key, model=model, additional_args=additional_args) # User Logging -> if you pass in a custom logging function headers = additional_args.get("headers", {}) @@ -688,6 +694,34 @@ class Logging: if capture_exception: # log this error to sentry for debugging capture_exception(e) + async def async_pre_call(self, result=None, start_time=None, end_time=None, **kwargs): + """ + Â Implementing async callbacks, to handle asyncio event loop issues when custom integrations need to use async functions. + """ + start_time, end_time, result, complete_streaming_response = self._success_handler_helper_fn(start_time=start_time, end_time=end_time, result=result) + print_verbose(f"Async input callbacks: {litellm._async_input_callback}") + for callback in litellm._async_input_callback: + try: + if isinstance(callback, CustomLogger): # custom logger class + print_verbose(f"Async input callbacks: CustomLogger") + asyncio.create_task(callback.async_log_input_event( + model=self.model, + messages=self.messages, + kwargs=self.model_call_details, + )) + if callable(callback): # custom logger functions + print_verbose(f"Async success callbacks: async_log_event") + asyncio.create_task(customLogger.async_log_input_event( + model=self.model, + messages=self.messages, + kwargs=self.model_call_details, + print_verbose=print_verbose, + callback_func=callback + )) + except: + print_verbose( + f"LiteLLM.LoggingError: [Non-Blocking] Exception occurred while success logging {traceback.format_exc()}" + ) def post_call(self, original_response, input=None, api_key=None, additional_args={}): # Log the exact result from the LLM API, for streaming - log the type of response received litellm.error_logs['POST_CALL'] = locals() @@ -1289,6 +1323,17 @@ def client(original_function): function_id=function_id ) ## ASYNC CALLBACKS + if len(litellm.input_callback) > 0: + removed_async_items = [] + for index, callback in enumerate(litellm.input_callback): + if inspect.iscoroutinefunction(callback): + litellm._async_input_callback.append(callback) + removed_async_items.append(index) + + # Pop the async items from input_callback in reverse order to avoid index issues + for index in reversed(removed_async_items): + litellm.input_callback.pop(index) + if len(litellm.success_callback) > 0: removed_async_items = [] for index, callback in enumerate(litellm.success_callback): @@ -1307,7 +1352,7 @@ def client(original_function): litellm._async_failure_callback.append(callback) removed_async_items.append(index) - # Pop the async items from success_callback in reverse order to avoid index issues + # Pop the async items from failure_callback in reverse order to avoid index issues for index in reversed(removed_async_items): litellm.failure_callback.pop(index) if add_breadcrumb: From 8b144451e69535e0d27ded48ed54151fa1c3ab25 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Fri, 8 Dec 2023 22:00:36 -0800 Subject: [PATCH 315/460] (test) model_info calback --- litellm/tests/test_amazing_proxy_custom_logger.py | 4 ++-- litellm/tests/test_configs/test_custom_logger.yaml | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/litellm/tests/test_amazing_proxy_custom_logger.py b/litellm/tests/test_amazing_proxy_custom_logger.py index 3e3e7468f..0c4463cc7 100644 --- a/litellm/tests/test_amazing_proxy_custom_logger.py +++ b/litellm/tests/test_amazing_proxy_custom_logger.py @@ -78,7 +78,7 @@ def test_chat_completion(client): config_model_info = litellm_params.get("model_info") proxy_server_request_object = litellm_params.get("proxy_server_request") - assert config_model_info == {'mode': 'chat', 'input_cost_per_token': 0.0002} + assert config_model_info == {'id': 'gm', 'input_cost_per_token': 0.0002, 'mode': 'chat'} assert proxy_server_request_object == {'url': 'http://testserver/chat/completions', 'method': 'POST', 'headers': {'host': 'testserver', 'accept': '*/*', 'accept-encoding': 'gzip, deflate', 'connection': 'keep-alive', 'user-agent': 'testclient', 'authorization': 'Bearer sk-1234', 'content-length': '105', 'content-type': 'application/json'}, 'body': {'model': 'Azure OpenAI GPT-4 Canada', 'messages': [{'role': 'user', 'content': 'hi'}], 'max_tokens': 10}} result = response.json() print(f"Received response: {result}") @@ -177,7 +177,7 @@ def test_embedding(client): proxy_server_request = litellm_params.get("proxy_server_request") model_info = litellm_params.get("model_info") assert proxy_server_request == {'url': 'http://testserver/embeddings', 'method': 'POST', 'headers': {'host': 'testserver', 'accept': '*/*', 'accept-encoding': 'gzip, deflate', 'connection': 'keep-alive', 'user-agent': 'testclient', 'authorization': 'Bearer sk-1234', 'content-length': '54', 'content-type': 'application/json'}, 'body': {'model': 'azure-embedding-model', 'input': ['hello']}} - assert model_info == {'input_cost_per_token': 0.002, 'mode': 'embedding'} + assert model_info == {'input_cost_per_token': 0.002, 'mode': 'embedding', 'id': 'hello'} result = response.json() print(f"Received response: {result}") except Exception as e: diff --git a/litellm/tests/test_configs/test_custom_logger.yaml b/litellm/tests/test_configs/test_custom_logger.yaml index 4c8f414dc..145c618ed 100644 --- a/litellm/tests/test_configs/test_custom_logger.yaml +++ b/litellm/tests/test_configs/test_custom_logger.yaml @@ -8,6 +8,7 @@ model_list: model_info: mode: chat input_cost_per_token: 0.0002 + id: gm - model_name: azure-embedding-model litellm_params: model: azure/azure-embedding-model @@ -17,6 +18,7 @@ model_list: model_info: mode: embedding input_cost_per_token: 0.002 + id: hello litellm_settings: drop_params: True From 5d655507321f765112b6b2ef68e4a9fd057f01b6 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Sat, 9 Dec 2023 10:04:10 -0800 Subject: [PATCH 316/460] (test) custom logger print success handler --- litellm/tests/test_custom_logger.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/litellm/tests/test_custom_logger.py b/litellm/tests/test_custom_logger.py index 44d011932..dcfd0e0e8 100644 --- a/litellm/tests/test_custom_logger.py +++ b/litellm/tests/test_custom_logger.py @@ -157,10 +157,13 @@ def test_async_custom_handler_stream(): response_in_success_handler = customHandler2.stream_collected_response response_in_success_handler = response_in_success_handler["choices"][0]["message"]["content"] + print("\n\n") + print("response_in_success_handler: ", response_in_success_handler) + print("complete_streaming_response: ", complete_streaming_response) assert response_in_success_handler == complete_streaming_response except Exception as e: pytest.fail(f"Error occurred: {e}") -# test_async_custom_handler_stream() +test_async_custom_handler_stream() def test_async_custom_handler(): try: From c8b699c0aaec8e0dec051c26881d5ba42c7623aa Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Sat, 9 Dec 2023 10:10:48 -0800 Subject: [PATCH 317/460] (feat) custom logger: async stream,assemble chunks --- litellm/main.py | 1 + litellm/utils.py | 68 ++++++++++++++++++++++++++++-------------------- 2 files changed, 41 insertions(+), 28 deletions(-) diff --git a/litellm/main.py b/litellm/main.py index 650e41204..a7ed8f2a5 100644 --- a/litellm/main.py +++ b/litellm/main.py @@ -446,6 +446,7 @@ def completion( # For logging - save the values of the litellm-specific params passed in litellm_params = get_litellm_params( + acompletion=acompletion, return_async=return_async, api_key=api_key, force_timeout=force_timeout, diff --git a/litellm/utils.py b/litellm/utils.py index b8e4dd069..af7cbb659 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -698,7 +698,7 @@ class Logging: """ Â Implementing async callbacks, to handle asyncio event loop issues when custom integrations need to use async functions. """ - start_time, end_time, result, complete_streaming_response = self._success_handler_helper_fn(start_time=start_time, end_time=end_time, result=result) + start_time, end_time, result = self._success_handler_helper_fn(start_time=start_time, end_time=end_time, result=result) print_verbose(f"Async input callbacks: {litellm._async_input_callback}") for callback in litellm._async_input_callback: try: @@ -798,21 +798,10 @@ class Logging: end_time = datetime.datetime.now() self.model_call_details["log_event_type"] = "successful_api_call" self.model_call_details["end_time"] = end_time - complete_streaming_response = None - - ## BUILD COMPLETE STREAMED RESPONSE - if self.stream: - if result.choices[0].finish_reason is not None: # if it's the last chunk - self.streaming_chunks.append(result) - complete_streaming_response = litellm.stream_chunk_builder(self.streaming_chunks, messages=self.model_call_details.get("messages", None)) - else: - self.streaming_chunks.append(result) - elif isinstance(result, OpenAIObject): + + if isinstance(result, OpenAIObject): result = result.model_dump() - if complete_streaming_response: - self.model_call_details["complete_streaming_response"] = complete_streaming_response - print_verbose(f"success callbacks: {litellm.success_callback}") if litellm.max_budget and self.stream: @@ -820,7 +809,7 @@ class Logging: float_diff = float(time_diff) litellm._current_cost += litellm.completion_cost(model=self.model, prompt="", completion=result["content"], total_time=float_diff) - return start_time, end_time, result, complete_streaming_response + return start_time, end_time, result except: pass @@ -829,9 +818,25 @@ class Logging: f"Logging Details LiteLLM-Success Call" ) try: - start_time, end_time, result, complete_streaming_response = self._success_handler_helper_fn(start_time=start_time, end_time=end_time, result=result) - print_verbose(f"success callbacks: {litellm.success_callback}") + print_verbose(f"success callbacks: {litellm.success_callback}") + ## BUILD COMPLETE STREAMED RESPONSE + complete_streaming_response = None + if self.model_call_details.get("litellm_params", {}).get("acompletion", False) == True: + # if it's acompletion == True, chunks are built/appended in async_success_handler + if result.choices[0].finish_reason is not None: # if it's the last chunk + complete_streaming_response = litellm.stream_chunk_builder(self.streaming_chunks, messages=self.model_call_details.get("messages", None)) + else: + # this is a completion() call + if self.stream: + if result.choices[0].finish_reason is not None: # if it's the last chunk + self.streaming_chunks.append(result) + complete_streaming_response = litellm.stream_chunk_builder(self.streaming_chunks, messages=self.model_call_details.get("messages", None)) + else: + self.streaming_chunks.append(result) + if complete_streaming_response: + self.model_call_details["complete_streaming_response"] = complete_streaming_response + start_time, end_time, result = self._success_handler_helper_fn(start_time=start_time, end_time=end_time, result=result) for callback in litellm.success_callback: try: if callback == "lite_debugger": @@ -1026,9 +1031,19 @@ class Logging: """ Implementing async callbacks, to handle asyncio event loop issues when custom integrations need to use async functions. """ - start_time, end_time, result, complete_streaming_response = self._success_handler_helper_fn(start_time=start_time, end_time=end_time, result=result) print_verbose(f"Async success callbacks: {litellm._async_success_callback}") + ## BUILD COMPLETE STREAMED RESPONSE + complete_streaming_response = None + if self.stream: + if result.choices[0].finish_reason is not None: # if it's the last chunk + self.streaming_chunks.append(result) + complete_streaming_response = litellm.stream_chunk_builder(self.streaming_chunks, messages=self.model_call_details.get("messages", None)) + else: + self.streaming_chunks.append(result) + if complete_streaming_response: + self.model_call_details["complete_streaming_response"] = complete_streaming_response + start_time, end_time, result = self._success_handler_helper_fn(start_time=start_time, end_time=end_time, result=result) for callback in litellm._async_success_callback: try: if isinstance(callback, CustomLogger): # custom logger class @@ -2031,8 +2046,10 @@ def get_litellm_params( metadata=None, model_info=None, proxy_server_request=None, + acompletion=None, ): litellm_params = { + "acompletion": acompletion, "return_async": return_async, "api_key": api_key, "force_timeout": force_timeout, @@ -5349,7 +5366,7 @@ class CustomStreamWrapper: return {"text": text, "is_finished": is_finished, "finish_reason": finish_reason} return "" - def chunk_creator(self, chunk, in_async_func=False): + def chunk_creator(self, chunk): model_response = ModelResponse(stream=True, model=self.model) model_response.choices[0].finish_reason = None response_obj = {} @@ -5526,10 +5543,7 @@ class CustomStreamWrapper: self.sent_first_chunk = True model_response.choices[0].delta = Delta(**completion_obj) # LOGGING - if in_async_func != True: - # only do logging if we're not being called by _anext_ - # _anext_ does its own logging, we check to avoid double counting chunks - threading.Thread(target=self.logging_obj.success_handler, args=(model_response,)).start() + threading.Thread(target=self.logging_obj.success_handler, args=(model_response,)).start() print_verbose(f"model_response: {model_response}") return model_response else: @@ -5537,8 +5551,7 @@ class CustomStreamWrapper: elif model_response.choices[0].finish_reason: model_response.choices[0].finish_reason = map_finish_reason(model_response.choices[0].finish_reason) # ensure consistent output to openai # LOGGING - if in_async_func != True: - threading.Thread(target=self.logging_obj.success_handler, args=(model_response,)).start() + threading.Thread(target=self.logging_obj.success_handler, args=(model_response,)).start() return model_response elif response_obj is not None and response_obj.get("original_chunk", None) is not None: # function / tool calling branch - only set for openai/azure compatible endpoints # enter this branch when no content has been passed in response @@ -5560,8 +5573,7 @@ class CustomStreamWrapper: model_response.choices[0].delta["role"] = "assistant" self.sent_first_chunk = True # LOGGING - if in_async_func != True: - threading.Thread(target=self.logging_obj.success_handler, args=(model_response,)).start() # log response + threading.Thread(target=self.logging_obj.success_handler, args=(model_response,)).start() # log response return model_response else: return @@ -5607,7 +5619,7 @@ class CustomStreamWrapper: # chunk_creator() does logging/stream chunk building. We need to let it know its being called in_async_func, so we don't double add chunks. # __anext__ also calls async_success_handler, which does logging - processed_chunk = self.chunk_creator(chunk=chunk, in_async_func=True) + processed_chunk = self.chunk_creator(chunk=chunk) if processed_chunk is None: continue ## LOGGING From 341382cb97025c1d543910fb6f2d1e84c1de17fa Mon Sep 17 00:00:00 2001 From: Krish Dholakia Date: Sat, 9 Dec 2023 10:20:46 -0800 Subject: [PATCH 318/460] Updated config.yml --- .circleci/config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index 6caed4810..b2974191d 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -39,6 +39,7 @@ jobs: pip install openai pip install prisma pip install langfuse + pip install "pydantic>=2.5" - save_cache: paths: - ./venv From 4643a9ac18495f285847f3665eb438b7b81cd9f9 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Sat, 9 Dec 2023 10:22:37 -0800 Subject: [PATCH 319/460] (test) custom logger + stream + sync compl() --- litellm/tests/test_custom_logger.py | 43 ++++++++++++++++++++++++++++- litellm/utils.py | 1 + 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/litellm/tests/test_custom_logger.py b/litellm/tests/test_custom_logger.py index dcfd0e0e8..bc4d34567 100644 --- a/litellm/tests/test_custom_logger.py +++ b/litellm/tests/test_custom_logger.py @@ -26,6 +26,7 @@ class MyCustomHandler(CustomLogger): self.async_embedding_kwargs_fail = None # type: ignore self.stream_collected_response = None # type: ignore + self.sync_stream_collected_response = None # type: ignore def log_pre_api_call(self, model, messages, kwargs): print(f"Pre-API Call") @@ -39,6 +40,9 @@ class MyCustomHandler(CustomLogger): def log_success_event(self, kwargs, response_obj, start_time, end_time): print(f"On Success") self.success = True + if kwargs.get("stream") == True: + self.sync_stream_collected_response = response_obj + def log_failure_event(self, kwargs, response_obj, start_time, end_time): print(f"On Failure") @@ -163,7 +167,44 @@ def test_async_custom_handler_stream(): assert response_in_success_handler == complete_streaming_response except Exception as e: pytest.fail(f"Error occurred: {e}") -test_async_custom_handler_stream() +# test_async_custom_handler_stream() + + +def test_azure_completion_stream(): + # [PROD Test] - Do not DELETE + # test if completion() + sync custom logger get the same complete stream response + try: + # checks if the model response available in the async + stream callbacks is equal to the received response + customHandler2 = MyCustomHandler() + litellm.callbacks = [customHandler2] + litellm.set_verbose = False + messages = [ + {"role": "system", "content": "You are a helpful assistant."}, + { + "role": "user", + "content": "write 1 sentence about litellm being amazing", + }, + ] + complete_streaming_response = "" + + response = litellm.completion( + model="azure/chatgpt-v-2", + messages=messages, + stream=True + ) + for chunk in response: + complete_streaming_response += chunk["choices"][0]["delta"]["content"] or "" + print(complete_streaming_response) + + response_in_success_handler = customHandler2.sync_stream_collected_response + response_in_success_handler = response_in_success_handler["choices"][0]["message"]["content"] + print("\n\n") + print("response_in_success_handler: ", response_in_success_handler) + print("complete_streaming_response: ", complete_streaming_response) + assert response_in_success_handler == complete_streaming_response + except Exception as e: + pytest.fail(f"Error occurred: {e}") +# test_azure_completion_stream() def test_async_custom_handler(): try: diff --git a/litellm/utils.py b/litellm/utils.py index af7cbb659..4df06f52e 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -996,6 +996,7 @@ class Logging: else: if self.stream and complete_streaming_response: self.model_call_details["complete_response"] = self.model_call_details.pop("complete_streaming_response", complete_streaming_response) + result = self.model_call_details["complete_response"] callback.log_success_event( kwargs=self.model_call_details, response_obj=result, From c8eca35015ba8470a2f8d514395245200c71609e Mon Sep 17 00:00:00 2001 From: Krish Dholakia Date: Sat, 9 Dec 2023 10:23:36 -0800 Subject: [PATCH 320/460] Updated config.yml --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index b2974191d..97d609feb 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -39,7 +39,6 @@ jobs: pip install openai pip install prisma pip install langfuse - pip install "pydantic>=2.5" - save_cache: paths: - ./venv @@ -62,6 +61,7 @@ jobs: command: | pwd ls + pip show pydantic python -m pytest -vv litellm/tests/ -x --junitxml=test-results/junit.xml --durations=5 no_output_timeout: 120m From c482c399ff8017b7e1275e1b49ec7efb3b7a5492 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Sat, 9 Dec 2023 10:25:30 -0800 Subject: [PATCH 321/460] fix(proxy_server.py): add logging around /key/generate --- litellm/proxy/proxy_server.py | 4 +++- litellm/tests/test_proxy_server_keys.py | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 8a4e12c80..e63083c93 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -1128,7 +1128,9 @@ async def generate_key_fn(request: Request, data: GenerateKeyRequest, Authorizat - user_id: (str) Unique user id - used for tracking spend across multiple keys for same user id. """ # data = await request.json() - data_json = data.model_dump() # type: ignore + print(f"type of object: {type(data)}") + data_json = json.loads(data.model_dump_json()) # type: ignore + print(f"data_json: {data_json}") response = await generate_key_helper_fn(**data_json) return GenerateKeyResponse(key=response["token"], expires=response["expires"], user_id=response["user_id"]) diff --git a/litellm/tests/test_proxy_server_keys.py b/litellm/tests/test_proxy_server_keys.py index 5ffbfe3b0..c5984ba13 100644 --- a/litellm/tests/test_proxy_server_keys.py +++ b/litellm/tests/test_proxy_server_keys.py @@ -25,7 +25,7 @@ from fastapi.testclient import TestClient from fastapi import FastAPI from litellm.proxy.proxy_server import router, save_worker_config, startup_event # Replace with the actual module where your FastAPI router is defined filepath = os.path.dirname(os.path.abspath(__file__)) -config_fp = f"{filepath}/test_configs/test_config.yaml" +config_fp = f"{filepath}/test_configs/test_config_custom_auth.yaml" save_worker_config(config=config_fp, model=None, alias=None, api_base=None, api_version=None, debug=False, temperature=None, max_tokens=None, request_timeout=600, max_budget=None, telemetry=False, drop_params=True, add_function_to_prompt=False, headers=None, save=False, use_queue=False) app = FastAPI() app.include_router(router) # Include your router in the test app From 875b7d1c7f5e024e5d06f1fa1b33704561fb23f6 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Sat, 9 Dec 2023 10:42:41 -0800 Subject: [PATCH 322/460] (test) custom logger --- litellm/tests/test_custom_logger.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/litellm/tests/test_custom_logger.py b/litellm/tests/test_custom_logger.py index bc4d34567..4cdaaa084 100644 --- a/litellm/tests/test_custom_logger.py +++ b/litellm/tests/test_custom_logger.py @@ -177,7 +177,7 @@ def test_azure_completion_stream(): # checks if the model response available in the async + stream callbacks is equal to the received response customHandler2 = MyCustomHandler() litellm.callbacks = [customHandler2] - litellm.set_verbose = False + litellm.set_verbose = True messages = [ {"role": "system", "content": "You are a helpful assistant."}, { @@ -196,6 +196,7 @@ def test_azure_completion_stream(): complete_streaming_response += chunk["choices"][0]["delta"]["content"] or "" print(complete_streaming_response) + time.sleep(0.5) # wait 1/2 second before checking callbacks response_in_success_handler = customHandler2.sync_stream_collected_response response_in_success_handler = response_in_success_handler["choices"][0]["message"]["content"] print("\n\n") From 4d0615391bf968d6139ecbf124e6a9a29cb6b386 Mon Sep 17 00:00:00 2001 From: Krish Dholakia Date: Sat, 9 Dec 2023 11:00:40 -0800 Subject: [PATCH 323/460] Updated config.yml --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 97d609feb..b2974191d 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -39,6 +39,7 @@ jobs: pip install openai pip install prisma pip install langfuse + pip install "pydantic>=2.5" - save_cache: paths: - ./venv @@ -61,7 +62,6 @@ jobs: command: | pwd ls - pip show pydantic python -m pytest -vv litellm/tests/ -x --junitxml=test-results/junit.xml --durations=5 no_output_timeout: 120m From 9433c3c11be8f4eb0a6c4c664c4f037b58e6f10a Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Sat, 9 Dec 2023 11:03:06 -0800 Subject: [PATCH 324/460] test: trigger ci/cd build --- litellm/tests/test_completion.py | 8 ++++---- litellm/utils.py | 3 +++ requirements.txt | 1 + 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index 96ddee40a..3d8b9a1b2 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -26,7 +26,7 @@ def test_completion_custom_provider_model_name(): try: litellm.cache = None response = completion( - model="together_ai/togethercomputer/llama-2-70b-chat", + model="together_ai/mistralai/Mistral-7B-Instruct-v0.1", messages=messages, logger_fn=logger_fn, ) @@ -287,7 +287,7 @@ def hf_test_completion_tgi(): print(response) except Exception as e: pytest.fail(f"Error occurred: {e}") -# hf_test_completion_tgi() +hf_test_completion_tgi() # ################### Hugging Face Conversational models ######################## # def hf_test_completion_conv(): @@ -1023,7 +1023,7 @@ def test_customprompt_together_ai(): litellm.set_verbose = False litellm.num_retries = 0 response = completion( - model="together_ai/togethercomputer/llama-2-70b-chat", + model="together_ai/mistralai/Mistral-7B-Instruct-v0.1", messages=messages, roles={"system":{"pre_message":"<|im_start|>system\n", "post_message":"<|im_end|>"}, "assistant":{"pre_message":"<|im_start|>assistant\n","post_message":"<|im_end|>"}, "user":{"pre_message":"<|im_start|>user\n","post_message":"<|im_end|>"}} ) @@ -1599,7 +1599,7 @@ def test_completion_together_ai_stream(): messages = [{ "content": user_message,"role": "user"}] try: response = completion( - model="together_ai/togethercomputer/llama-2-70b-chat", + model="together_ai/mistralai/Mistral-7B-Instruct-v0.1", messages=messages, stream=True, max_tokens=5 ) diff --git a/litellm/utils.py b/litellm/utils.py index 4df06f52e..c6d855fd1 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -132,6 +132,9 @@ def map_finish_reason(finish_reason: str): # openai supports 5 stop sequences - return "content_filter" elif finish_reason == "ERROR": # openai currently doesn't support an 'error' finish reason return "stop" + # huggingface mapping https://huggingface.github.io/text-generation-inference/#/Text%20Generation%20Inference/generate_stream + elif finish_reason == "eos_token" or finish_reason == "stop_sequence": + return "stop" return finish_reason class FunctionCall(OpenAIObject): diff --git a/requirements.txt b/requirements.txt index b6a15fb7a..f3be861b8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,6 +3,7 @@ litellm openai fastapi tomli +pydantic>=2.5 appdirs tomli_w backoff From 7ed68da149a547ff0308673b428fbf84d446331e Mon Sep 17 00:00:00 2001 From: Krish Dholakia Date: Sat, 9 Dec 2023 11:09:18 -0800 Subject: [PATCH 325/460] Updated config.yml --- .circleci/config.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index b2974191d..6caed4810 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -39,7 +39,6 @@ jobs: pip install openai pip install prisma pip install langfuse - pip install "pydantic>=2.5" - save_cache: paths: - ./venv From c1c81af9d4c9e335f84c6484d47811636ef822ea Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Sat, 9 Dec 2023 11:12:52 -0800 Subject: [PATCH 326/460] fix(proxy_server.py): add custom json helper func to work across multiple pydantic versions --- litellm/proxy/_types.py | 5 ++++- litellm/proxy/proxy_server.py | 4 +--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/litellm/proxy/_types.py b/litellm/proxy/_types.py index 67cbb6063..b944df3a3 100644 --- a/litellm/proxy/_types.py +++ b/litellm/proxy/_types.py @@ -1,7 +1,7 @@ from pydantic import BaseModel, Extra, Field from typing import Optional, List, Union, Dict, Literal from datetime import datetime -import uuid +import uuid, json ######### Request Class Definition ###### class ProxyChatCompletionRequest(BaseModel): model: str @@ -84,6 +84,9 @@ class GenerateKeyRequest(BaseModel): user_id: Optional[str] = None max_parallel_requests: Optional[int] = None + def json(self, **kwargs) -> str: + return json.dumps(self.dict(), **kwargs) + class GenerateKeyResponse(BaseModel): key: str expires: datetime diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index e63083c93..b4bcbedb6 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -1128,9 +1128,7 @@ async def generate_key_fn(request: Request, data: GenerateKeyRequest, Authorizat - user_id: (str) Unique user id - used for tracking spend across multiple keys for same user id. """ # data = await request.json() - print(f"type of object: {type(data)}") - data_json = json.loads(data.model_dump_json()) # type: ignore - print(f"data_json: {data_json}") + data_json = json.loads(data.json()) # type: ignore response = await generate_key_helper_fn(**data_json) return GenerateKeyResponse(key=response["token"], expires=response["expires"], user_id=response["user_id"]) From 8cbd6010c82c75169c5ec3e57de95c9d6f79f695 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Sat, 9 Dec 2023 11:32:14 -0800 Subject: [PATCH 327/460] (test) redis caching init calbacks to be empty --- litellm/tests/test_caching.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/litellm/tests/test_caching.py b/litellm/tests/test_caching.py index 7653a0748..3b8149b47 100644 --- a/litellm/tests/test_caching.py +++ b/litellm/tests/test_caching.py @@ -195,6 +195,8 @@ def test_redis_cache_completion(): def test_redis_cache_completion_stream(): try: litellm.success_callback = [] + litellm._async_success_callback = [] + litellm.callbacks = [] litellm.set_verbose = True random_number = random.randint(1, 100000) # add a random number to ensure it's always adding / reading from cache messages = [{"role": "user", "content": f"write a one sentence poem about: {random_number}"}] From 0294e1119ecfda33682251aa6bec50ec0a5e61b2 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Sat, 9 Dec 2023 11:38:42 -0800 Subject: [PATCH 328/460] (fix) success_handler / logging --- litellm/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/utils.py b/litellm/utils.py index c6d855fd1..4a18fa852 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -824,7 +824,7 @@ class Logging: print_verbose(f"success callbacks: {litellm.success_callback}") ## BUILD COMPLETE STREAMED RESPONSE complete_streaming_response = None - if self.model_call_details.get("litellm_params", {}).get("acompletion", False) == True: + if self.stream == True and self.model_call_details.get("litellm_params", {}).get("acompletion", False) == True: # if it's acompletion == True, chunks are built/appended in async_success_handler if result.choices[0].finish_reason is not None: # if it's the last chunk complete_streaming_response = litellm.stream_chunk_builder(self.streaming_chunks, messages=self.model_call_details.get("messages", None)) From ed50522863bf1001000fffc1237dd1e50108393f Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Sat, 9 Dec 2023 12:09:49 -0800 Subject: [PATCH 329/460] fix(proxy_server.py): fix pydantic version errors --- .pre-commit-config.yaml | 2 +- litellm/proxy/_types.py | 8 ++++++-- litellm/proxy/custom_callbacks.py | 28 ++++++++++++++++------------ litellm/proxy/proxy_cli.py | 8 ++++---- litellm/proxy/proxy_server.py | 11 +++++++++-- 5 files changed, 36 insertions(+), 21 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 9fc7bb3d3..9352959fe 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -3,7 +3,7 @@ repos: rev: 3.8.4 # The version of flake8 to use hooks: - id: flake8 - exclude: ^litellm/tests/|^litellm/proxy/proxy_server.py|^litellm/integrations/ + exclude: ^litellm/tests/|^litellm/proxy/proxy_server.py|^litellm/proxy/proxy_cli.py|^litellm/integrations/ additional_dependencies: [flake8-print] files: litellm/.*\.py - repo: local diff --git a/litellm/proxy/_types.py b/litellm/proxy/_types.py index b944df3a3..628ea2379 100644 --- a/litellm/proxy/_types.py +++ b/litellm/proxy/_types.py @@ -84,8 +84,12 @@ class GenerateKeyRequest(BaseModel): user_id: Optional[str] = None max_parallel_requests: Optional[int] = None - def json(self, **kwargs) -> str: - return json.dumps(self.dict(), **kwargs) + def json(self, **kwargs): + try: + return self.model_dump() # noqa + except: + # if using pydantic v1 + return json.dumps(self.dict(), **kwargs) class GenerateKeyResponse(BaseModel): key: str diff --git a/litellm/proxy/custom_callbacks.py b/litellm/proxy/custom_callbacks.py index 08947a066..c04916344 100644 --- a/litellm/proxy/custom_callbacks.py +++ b/litellm/proxy/custom_callbacks.py @@ -4,44 +4,48 @@ import inspect # This file includes the custom callbacks for LiteLLM Proxy # Once defined, these can be passed in proxy_config.yaml +def print_verbose(print_statement): + if litellm.set_verbose: + print(print_statement) # noqa + class MyCustomHandler(CustomLogger): def __init__(self): blue_color_code = "\033[94m" reset_color_code = "\033[0m" - print(f"{blue_color_code}Initialized LiteLLM custom logger") + print_verbose(f"{blue_color_code}Initialized LiteLLM custom logger") try: - print(f"Logger Initialized with following methods:") + print_verbose(f"Logger Initialized with following methods:") methods = [method for method in dir(self) if inspect.ismethod(getattr(self, method))] - # Pretty print the methods + # Pretty print_verbose the methods for method in methods: - print(f" - {method}") - print(f"{reset_color_code}") + print_verbose(f" - {method}") + print_verbose(f"{reset_color_code}") except: pass def log_pre_api_call(self, model, messages, kwargs): - print(f"Pre-API Call") + print_verbose(f"Pre-API Call") def log_post_api_call(self, kwargs, response_obj, start_time, end_time): - print(f"Post-API Call") + print_verbose(f"Post-API Call") def log_stream_event(self, kwargs, response_obj, start_time, end_time): - print(f"On Stream") + print_verbose(f"On Stream") def log_success_event(self, kwargs, response_obj, start_time, end_time): - print("On Success!") + print_verbose("On Success!") async def async_log_success_event(self, kwargs, response_obj, start_time, end_time): - print(f"On Async Success!") + print_verbose(f"On Async Success!") return async def async_log_failure_event(self, kwargs, response_obj, start_time, end_time): try: - print(f"On Async Failure !") + print_verbose(f"On Async Failure !") except Exception as e: - print(f"Exception: {e}") + print_verbose(f"Exception: {e}") proxy_handler_instance = MyCustomHandler() diff --git a/litellm/proxy/proxy_cli.py b/litellm/proxy/proxy_cli.py index 7dca11dd4..57908e59a 100644 --- a/litellm/proxy/proxy_cli.py +++ b/litellm/proxy/proxy_cli.py @@ -26,7 +26,7 @@ def run_ollama_serve(): except Exception as e: print(f""" LiteLLM Warning: proxy started with `ollama` model\n`ollama serve` failed with Exception{e}. \nEnsure you run `ollama serve` - """) + """) # noqa def clone_subfolder(repo_url, subfolder, destination): # Clone the full repo @@ -109,9 +109,9 @@ def run_server(host, port, api_base, api_version, model, alias, add_key, headers # get n recent logs recent_logs = {k.strftime("%Y%m%d%H%M%S%f"): v for k, v in sorted_times[:logs]} - print(json.dumps(recent_logs, indent=4)) + print(json.dumps(recent_logs, indent=4)) # noqa except: - print("LiteLLM: No logs saved!") + raise Exception("LiteLLM: No logs saved!") return if model and "ollama" in model: run_ollama_serve() @@ -140,7 +140,7 @@ def run_server(host, port, api_base, api_version, model, alias, add_key, headers if status == "finished": llm_response = polling_response["result"] break - print(f"POLLING JOB{polling_url}\nSTATUS: {status}, \n Response {polling_response}") + print(f"POLLING JOB{polling_url}\nSTATUS: {status}, \n Response {polling_response}") # noqa time.sleep(0.5) except Exception as e: print("got exception in polling", e) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index b4bcbedb6..c15f7ae54 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -227,6 +227,13 @@ def _get_bearer_token(api_key: str): api_key = api_key.replace("Bearer ", "") # extract the token return api_key +def _get_pydantic_json_dict(pydantic_obj: BaseModel) -> dict: + try: + return pydantic_obj.model_dump() # noqa + except: + # if using pydantic v1 + return pydantic_obj.dict() + async def user_api_key_auth(request: Request, api_key: str = fastapi.Security(api_key_header)) -> UserAPIKeyAuth: global master_key, prisma_client, llm_model_list, user_custom_auth try: @@ -275,7 +282,7 @@ async def user_api_key_auth(request: Request, api_key: str = fastapi.Security(ap print("\n new llm router model list", llm_model_list) if len(valid_token.models) == 0: # assume an empty model list means all models are allowed to be called api_key = valid_token.token - valid_token_dict = valid_token.model_dump() + valid_token_dict = _get_pydantic_json_dict(valid_token) valid_token_dict.pop("token", None) return UserAPIKeyAuth(api_key=api_key, **valid_token_dict) else: @@ -286,7 +293,7 @@ async def user_api_key_auth(request: Request, api_key: str = fastapi.Security(ap if model and model not in valid_token.models: raise Exception(f"Token not allowed to access model") api_key = valid_token.token - valid_token_dict = valid_token.model_dump() + valid_token_dict = _get_pydantic_json_dict(valid_token) valid_token.pop("token", None) return UserAPIKeyAuth(api_key=api_key, **valid_token) else: From dd6caa8b555ecdfd825885356bb3464341643cd5 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Sat, 9 Dec 2023 12:17:33 -0800 Subject: [PATCH 330/460] fix(proxy_server.py): fix linting errors --- litellm/proxy/proxy_server.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index c15f7ae54..e3490c693 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -229,7 +229,7 @@ def _get_bearer_token(api_key: str): def _get_pydantic_json_dict(pydantic_obj: BaseModel) -> dict: try: - return pydantic_obj.model_dump() # noqa + return pydantic_obj.model_dump() # type: ignore except: # if using pydantic v1 return pydantic_obj.dict() From a25048940502f7021a1ddc2979ef27be98d8d008 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Sat, 9 Dec 2023 12:28:28 -0800 Subject: [PATCH 331/460] test(test_router.py): run as asyncio.run --- litellm/tests/test_router.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/litellm/tests/test_router.py b/litellm/tests/test_router.py index 6f43ed99f..cd65aaf56 100644 --- a/litellm/tests/test_router.py +++ b/litellm/tests/test_router.py @@ -226,12 +226,9 @@ def test_call_one_endpoint(): ) print("\n response", response) - tasks = [] - tasks.append(call_azure_completion()) - tasks.append(call_bedrock_claude()) - tasks.append(call_azure_embedding()) - - asyncio.gather(**tasks) + asyncio.run(call_azure_completion()) + asyncio.run(call_bedrock_claude()) + asyncio.run(call_azure_embedding() os.environ["AZURE_API_BASE"] = old_api_base os.environ["AZURE_API_KEY"] = old_api_key From b4aa9f0ae4bd53ed4410d1de0de153e478482c4a Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Sat, 9 Dec 2023 12:28:51 -0800 Subject: [PATCH 332/460] test(test_router.py): fix init issue --- litellm/tests/test_router.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/tests/test_router.py b/litellm/tests/test_router.py index cd65aaf56..40d95e757 100644 --- a/litellm/tests/test_router.py +++ b/litellm/tests/test_router.py @@ -228,7 +228,7 @@ def test_call_one_endpoint(): print("\n response", response) asyncio.run(call_azure_completion()) asyncio.run(call_bedrock_claude()) - asyncio.run(call_azure_embedding() + asyncio.run(call_azure_embedding()) os.environ["AZURE_API_BASE"] = old_api_base os.environ["AZURE_API_KEY"] = old_api_key From 0dcdf5f6ea3b2b5512345301c2242fdad063986a Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Sat, 9 Dec 2023 12:39:36 -0800 Subject: [PATCH 333/460] (fix) use cache + custom callbacks --- litellm/tests/test_custom_logger.py | 43 +++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/litellm/tests/test_custom_logger.py b/litellm/tests/test_custom_logger.py index 4cdaaa084..1a489ffdb 100644 --- a/litellm/tests/test_custom_logger.py +++ b/litellm/tests/test_custom_logger.py @@ -205,7 +205,7 @@ def test_azure_completion_stream(): assert response_in_success_handler == complete_streaming_response except Exception as e: pytest.fail(f"Error occurred: {e}") -# test_azure_completion_stream() +test_azure_completion_stream() def test_async_custom_handler(): try: @@ -286,4 +286,43 @@ def test_async_custom_handler(): except Exception as e: pytest.fail(f"Error occurred: {e}") -# test_async_custom_handler() \ No newline at end of file +# test_async_custom_handler() + +from litellm import Cache +def test_redis_cache_completion_stream(): + # Important Test - This tests if we can add to streaming cache, when custom callbacks are set + import random + try: + print("\nrunning test_redis_cache_completion_stream") + litellm.set_verbose = True + random_number = random.randint(1, 100000) # add a random number to ensure it's always adding / reading from cache + messages = [{"role": "user", "content": f"write a one sentence poem about: {random_number}"}] + litellm.cache = Cache(type="redis", host=os.environ['REDIS_HOST'], port=os.environ['REDIS_PORT'], password=os.environ['REDIS_PASSWORD']) + print("test for caching, streaming + completion") + response1 = completion(model="gpt-3.5-turbo", messages=messages, max_tokens=40, temperature=0.2, stream=True) + response_1_content = "" + for chunk in response1: + print(chunk) + response_1_content += chunk.choices[0].delta.content or "" + print(response_1_content) + + time.sleep(0.1) # sleep for 0.1 seconds allow set cache to occur + response2 = completion(model="gpt-3.5-turbo", messages=messages, max_tokens=40, temperature=0.2, stream=True) + response_2_content = "" + for chunk in response2: + print(chunk) + response_2_content += chunk.choices[0].delta.content or "" + print("\nresponse 1", response_1_content) + print("\nresponse 2", response_2_content) + assert response_1_content == response_2_content, f"Response 1 != Response 2. Same params, Response 1{response_1_content} != Response 2{response_2_content}" + litellm.success_callback = [] + litellm.cache = None + except Exception as e: + print(e) + litellm.success_callback = [] + raise e + """ + + 1 & 2 should be exactly the same + """ +test_redis_cache_completion_stream() \ No newline at end of file From 5e5ffc3d8a10a7dd180a601f8f9a1cab741a2af9 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Sat, 9 Dec 2023 12:41:19 -0800 Subject: [PATCH 334/460] (fix) use cache + custom logger --- litellm/utils.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/litellm/utils.py b/litellm/utils.py index 4a18fa852..982a4f2a8 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -805,8 +805,6 @@ class Logging: if isinstance(result, OpenAIObject): result = result.model_dump() - print_verbose(f"success callbacks: {litellm.success_callback}") - if litellm.max_budget and self.stream: time_diff = (end_time - start_time).total_seconds() float_diff = float(time_diff) @@ -831,9 +829,12 @@ class Logging: else: # this is a completion() call if self.stream: + print_verbose("success callback - assembling complete streaming response") if result.choices[0].finish_reason is not None: # if it's the last chunk + print_verbose(f"success callback - Got the very Last chunk. Assembling {self.streaming_chunks}") self.streaming_chunks.append(result) complete_streaming_response = litellm.stream_chunk_builder(self.streaming_chunks, messages=self.model_call_details.get("messages", None)) + print_verbose(f"success callback - complete streamign response{complete_streaming_response}") else: self.streaming_chunks.append(result) if complete_streaming_response: @@ -968,11 +969,14 @@ class Logging: ) if callback == "cache": # this only logs streaming once, complete_streaming_response exists i.e when stream ends + print_verbose("success_callback: reaches cache for logging!") kwargs = self.model_call_details if self.stream: if "complete_streaming_response" not in kwargs: + print_verbose(f"success_callback: reaches cache for logging, there is no complete_streaming_response. Kwargs={kwargs}\n\n") return else: + print_verbose("success_callback: reaches cache for logging, there is a complete_streaming_response. Adding to cache") result = kwargs["complete_streaming_response"] # only add to cache once we have a complete streaming response litellm.cache.add_cache(result, **kwargs) @@ -989,6 +993,7 @@ class Logging: print_verbose=print_verbose, ) if isinstance(callback, CustomLogger): # custom logger class + print_verbose(f"success callbacks: Running Custom Logger Class") if self.stream and complete_streaming_response is None: callback.log_stream_event( kwargs=self.model_call_details, @@ -998,7 +1003,7 @@ class Logging: ) else: if self.stream and complete_streaming_response: - self.model_call_details["complete_response"] = self.model_call_details.pop("complete_streaming_response", complete_streaming_response) + self.model_call_details["complete_response"] = self.model_call_details.get("complete_streaming_response", {}) result = self.model_call_details["complete_response"] callback.log_success_event( kwargs=self.model_call_details, @@ -1007,6 +1012,7 @@ class Logging: end_time=end_time, ) if callable(callback): # custom logger functions + print_verbose(f"success callbacks: Running Custom Callback Function") customLogger.log_event( kwargs=self.model_call_details, response_obj=result, @@ -1459,7 +1465,6 @@ def client(original_function): # [OPTIONAL] CHECK CACHE # remove this after deprecating litellm.caching - print_verbose(f"litellm.caching: {litellm.caching}; litellm.caching_with_models: {litellm.caching_with_models}; litellm.cache: {litellm.cache}") if (litellm.caching or litellm.caching_with_models) and litellm.cache is None: litellm.cache = Cache() From 6f8a35d539bd588dd4d0eeb76d51c2f5d14348c0 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Sat, 9 Dec 2023 13:56:53 -0800 Subject: [PATCH 335/460] (test) cache async + stream test --- litellm/tests/test_caching.py | 79 +++++++++++++++++++---------------- 1 file changed, 43 insertions(+), 36 deletions(-) diff --git a/litellm/tests/test_caching.py b/litellm/tests/test_caching.py index 3b8149b47..a53d10d2b 100644 --- a/litellm/tests/test_caching.py +++ b/litellm/tests/test_caching.py @@ -19,6 +19,13 @@ import random messages = [{"role": "user", "content": "who is ishaan Github? "}] # comment +import random +import string + +def generate_random_word(length=4): + letters = string.ascii_lowercase + return ''.join(random.choice(letters) for _ in range(length)) + messages = [{"role": "user", "content": "who is ishaan 5222"}] def test_caching_v2(): # test in memory cache try: @@ -227,46 +234,46 @@ def test_redis_cache_completion_stream(): 1 & 2 should be exactly the same """ -test_redis_cache_completion_stream() +# test_redis_cache_completion_stream() -# def test_redis_cache_acompletion_stream(): -# import asyncio -# try: -# litellm.set_verbose = False -# random_number = random.randint(1, 100000) # add a random number to ensure it's always adding / reading from cache -# messages = [{"role": "user", "content": f"write a one sentence poem about: {random_number}"}] -# litellm.cache = Cache(type="redis", host=os.environ['REDIS_HOST'], port=os.environ['REDIS_PORT'], password=os.environ['REDIS_PASSWORD']) -# print("test for caching, streaming + completion") -# response_1_content = "" -# response_2_content = "" +def test_redis_cache_acompletion_stream(): + import asyncio + try: + litellm.set_verbose = True + random_word = generate_random_word() + messages = [{"role": "user", "content": f"write a one sentence poem about: {random_word}"}] + litellm.cache = Cache(type="redis", host=os.environ['REDIS_HOST'], port=os.environ['REDIS_PORT'], password=os.environ['REDIS_PASSWORD']) + print("test for caching, streaming + completion") + response_1_content = "" + response_2_content = "" -# async def call1(): -# nonlocal response_1_content -# response1 = await litellm.acompletion(model="gpt-3.5-turbo", messages=messages, max_tokens=40, temperature=0.2, stream=True) -# async for chunk in response1: -# print(chunk) -# response_1_content += chunk.choices[0].delta.content or "" -# print(response_1_content) -# asyncio.run(call1()) -# time.sleep(0.5) -# print("\n\n Response 1 content: ", response_1_content, "\n\n") + async def call1(): + nonlocal response_1_content + response1 = await litellm.acompletion(model="gpt-3.5-turbo", messages=messages, max_tokens=40, temperature=1, stream=True) + async for chunk in response1: + print(chunk) + response_1_content += chunk.choices[0].delta.content or "" + print(response_1_content) + asyncio.run(call1()) + time.sleep(0.5) + print("\n\n Response 1 content: ", response_1_content, "\n\n") -# async def call2(): -# nonlocal response_2_content -# response2 = await litellm.acompletion(model="gpt-3.5-turbo", messages=messages, max_tokens=40, temperature=0.2, stream=True) -# async for chunk in response2: -# print(chunk) -# response_2_content += chunk.choices[0].delta.content or "" -# print(response_2_content) -# asyncio.run(call2()) -# print("\nresponse 1", response_1_content) -# print("\nresponse 2", response_2_content) -# assert response_1_content == response_2_content, f"Response 1 != Response 2. Same params, Response 1{response_1_content} != Response 2{response_2_content}" -# litellm.cache = None -# except Exception as e: -# print(e) -# raise e + async def call2(): + nonlocal response_2_content + response2 = await litellm.acompletion(model="gpt-3.5-turbo", messages=messages, max_tokens=40, temperature=1, stream=True) + async for chunk in response2: + print(chunk) + response_2_content += chunk.choices[0].delta.content or "" + print(response_2_content) + asyncio.run(call2()) + print("\nresponse 1", response_1_content) + print("\nresponse 2", response_2_content) + assert response_1_content == response_2_content, f"Response 1 != Response 2. Same params, Response 1{response_1_content} != Response 2{response_2_content}" + litellm.cache = None + except Exception as e: + print(e) + raise e # test_redis_cache_acompletion_stream() # redis cache with custom keys From 67c730e264bb634d606619f66e6ff0f922e83b6c Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Sat, 9 Dec 2023 13:59:01 -0800 Subject: [PATCH 336/460] (feat) async + stream cache --- litellm/caching.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/litellm/caching.py b/litellm/caching.py index bbad49716..edee83b0e 100644 --- a/litellm/caching.py +++ b/litellm/caching.py @@ -208,6 +208,8 @@ class Cache: litellm.input_callback.append("cache") if "cache" not in litellm.success_callback: litellm.success_callback.append("cache") + if "cache" not in litellm._async_success_callback: + litellm._async_success_callback.append("cache") def get_cache_key(self, *args, **kwargs): """ From d18d5a31331b55b9b43683decf702b13c44d5d39 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Sat, 9 Dec 2023 14:15:18 -0800 Subject: [PATCH 337/460] (feat) async completion caching --- litellm/utils.py | 83 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 82 insertions(+), 1 deletion(-) diff --git a/litellm/utils.py b/litellm/utils.py index 982a4f2a8..2b23d6a78 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -1056,6 +1056,19 @@ class Logging: start_time, end_time, result = self._success_handler_helper_fn(start_time=start_time, end_time=end_time, result=result) for callback in litellm._async_success_callback: try: + if callback == "cache": + # set_cache once complete streaming response is built + print_verbose("async success_callback: reaches cache for logging!") + kwargs = self.model_call_details + if self.stream: + if "complete_streaming_response" not in kwargs: + print_verbose(f"async success_callback: reaches cache for logging, there is no complete_streaming_response. Kwargs={kwargs}\n\n") + return + else: + print_verbose("async success_callback: reaches cache for logging, there is a complete_streaming_response. Adding to cache") + result = kwargs["complete_streaming_response"] + # only add to cache once we have a complete streaming response + litellm.cache.add_cache(result, **kwargs) if isinstance(callback, CustomLogger): # custom logger class print_verbose(f"Async success callbacks: CustomLogger") if self.stream: @@ -1599,7 +1612,12 @@ def client(original_function): print_verbose(f"Cache Hit!") call_type = original_function.__name__ if call_type == CallTypes.acompletion.value and isinstance(cached_result, dict): - return convert_to_model_response_object(response_object=cached_result, model_response_object=ModelResponse()) + if kwargs.get("stream", False) == True: + return convert_to_streaming_response_async( + response_object=cached_result, + ) + else: + return convert_to_model_response_object(response_object=cached_result, model_response_object=ModelResponse()) else: return cached_result # MODEL CALL @@ -3494,6 +3512,69 @@ def handle_failure(exception, traceback_exception, start_time, end_time, args, k exception_logging(logger_fn=user_logger_fn, exception=e) pass +async def convert_to_streaming_response_async(response_object: Optional[dict]=None): + """ + Asynchronously converts a response object to a streaming response. + + Args: + response_object (Optional[dict]): The response object to be converted. Defaults to None. + + Raises: + Exception: If the response object is None. + + Yields: + ModelResponse: The converted streaming response object. + + Returns: + None + """ + if response_object is None: + raise Exception("Error in response object format") + + model_response_object = ModelResponse(stream=True) + + if model_response_object is None: + raise Exception("Error in response creating model response object") + + choice_list = [] + + for idx, choice in enumerate(response_object["choices"]): + delta = Delta( + content=choice["message"].get("content", None), + role=choice["message"]["role"], + function_call=choice["message"].get("function_call", None), + tool_calls=choice["message"].get("tool_calls", None) + ) + finish_reason = choice.get("finish_reason", None) + + if finish_reason is None: + finish_reason = choice.get("finish_details") + + choice = StreamingChoices(finish_reason=finish_reason, index=idx, delta=delta) + choice_list.append(choice) + + model_response_object.choices = choice_list + + if "usage" in response_object and response_object["usage"] is not None: + model_response_object.usage = Usage( + completion_tokens=response_object["usage"].get("completion_tokens", 0), + prompt_tokens=response_object["usage"].get("prompt_tokens", 0), + total_tokens=response_object["usage"].get("total_tokens", 0) + ) + + + if "id" in response_object: + model_response_object.id = response_object["id"] + + if "system_fingerprint" in response_object: + model_response_object.system_fingerprint = response_object["system_fingerprint"] + + if "model" in response_object: + model_response_object.model = response_object["model"] + + yield model_response_object + await asyncio.sleep(0) + def convert_to_streaming_response(response_object: Optional[dict]=None): # used for yielding Cache hits when stream == True if response_object is None: From a9f103995d76b679df0fc76db4d95e9248eeb189 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Sat, 9 Dec 2023 14:25:38 -0800 Subject: [PATCH 338/460] (test) async completion + caching on router --- litellm/tests/test_router.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/litellm/tests/test_router.py b/litellm/tests/test_router.py index 40d95e757..164ed7615 100644 --- a/litellm/tests/test_router.py +++ b/litellm/tests/test_router.py @@ -372,6 +372,7 @@ def test_function_calling(): print(response) def test_acompletion_on_router(): + # tests acompletion + caching on router try: litellm.set_verbose = False model_list = [ @@ -409,9 +410,10 @@ def test_acompletion_on_router(): timeout=30, routing_strategy="simple-shuffle") async def get_response(): - response1 = await router.acompletion(model="gpt-3.5-turbo", messages=messages) + print("Testing acompletion + caching on router") + response1 = await router.acompletion(model="gpt-3.5-turbo", messages=messages, temperature=1) print(f"response1: {response1}") - response2 = await router.acompletion(model="gpt-3.5-turbo", messages=messages) + response2 = await router.acompletion(model="gpt-3.5-turbo", messages=messages, temperature=1) print(f"response2: {response2}") assert response1.id == response2.id assert len(response1.choices[0].message.content) > 0 @@ -675,7 +677,7 @@ def test_openai_completion_on_router(): except Exception as e: traceback.print_exc() pytest.fail(f"Error occurred: {e}") -test_openai_completion_on_router() +# test_openai_completion_on_router() def test_reading_keys_os_environ(): From 0b7f8265d64ddbb8fec4de9574013ad5ea8bf235 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Sat, 9 Dec 2023 15:20:08 -0800 Subject: [PATCH 339/460] (fix) router - only init cache when its none --- litellm/router.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/litellm/router.py b/litellm/router.py index 5a0cf8a37..1721a381b 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -131,7 +131,9 @@ class Router: cache_config.update(cache_kwargs) redis_cache = RedisCache(**cache_config) if cache_responses: - litellm.cache = litellm.Cache(type=cache_type, **cache_config) + if litellm.cache is None: + # the cache can be initialized on the proxy server. We should not overwrite it + litellm.cache = litellm.Cache(type=cache_type, **cache_config) self.cache_responses = cache_responses self.cache = DualCache(redis_cache=redis_cache, in_memory_cache=InMemoryCache()) # use a dual cache (Redis+In-Memory) for tracking cooldowns, usage, etc. ### ROUTING SETUP ### From 994c204e450ed59f534910e18b3821e39977591d Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Sat, 9 Dec 2023 15:21:04 -0800 Subject: [PATCH 340/460] (fix) proxy - show logging when Cache created --- litellm/proxy/proxy_server.py | 1 + 1 file changed, 1 insertion(+) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index e3490c693..257f4a083 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -516,6 +516,7 @@ def load_router_config(router: Optional[litellm.Router], config_file_path: str): port=cache_port, password=cache_password ) + print(f"{blue_color_code}Set Cache on LiteLLM Proxy: {litellm.cache.cache}{reset_color_code} {cache_password}") elif key == "callbacks": litellm.callbacks = [get_instance_fn(value=value, config_file_path=config_file_path)] print_verbose(f"{blue_color_code} Initialized Callbacks - {litellm.callbacks} {reset_color_code}") From 60bf552fe81d45a8c1b1e3c985db44f8d2214d1b Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Sat, 9 Dec 2023 15:40:22 -0800 Subject: [PATCH 341/460] (fix) caching + proxy - use model group --- litellm/caching.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/litellm/caching.py b/litellm/caching.py index edee83b0e..cbaa3bb20 100644 --- a/litellm/caching.py +++ b/litellm/caching.py @@ -229,8 +229,10 @@ class Cache: # ignore litellm params here if param in kwargs: # check if param == model and model_group is passed in, then override model with model_group - if param == "model" and kwargs.get("metadata", None) is not None and kwargs["metadata"].get("model_group", None) is not None: - param_value = kwargs["metadata"].get("model_group", None) # for litellm.Router use model_group for caching over `model` + if param == "model": + # for litellm.Router use model_group for caching over `model` + model_group = kwargs.get("metadata", {}).get("model_group", None) or kwargs.get("litellm_params", {}).get("metadata", {}).get("model_group", None) + param_value = model_group or kwargs[param] # use model_group if it exists, else use kwargs["model"] else: if kwargs[param] is None: continue # ignore None params From da08be1f43d857daa6388f1c736a15baab4a781c Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Sat, 9 Dec 2023 15:41:36 -0800 Subject: [PATCH 342/460] (test) router + caching --- litellm/tests/test_router.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/litellm/tests/test_router.py b/litellm/tests/test_router.py index 164ed7615..4ec91ec0d 100644 --- a/litellm/tests/test_router.py +++ b/litellm/tests/test_router.py @@ -374,7 +374,7 @@ def test_function_calling(): def test_acompletion_on_router(): # tests acompletion + caching on router try: - litellm.set_verbose = False + litellm.set_verbose = True model_list = [ { "model_name": "gpt-3.5-turbo", @@ -428,7 +428,7 @@ def test_acompletion_on_router(): traceback.print_exc() pytest.fail(f"Error occurred: {e}") -# test_acompletion_on_router() +test_acompletion_on_router() def test_function_calling_on_router(): try: From 1f1f749ad9b92575df9790efc673947cf491e5f6 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Sat, 9 Dec 2023 15:55:38 -0800 Subject: [PATCH 343/460] (feat) proxy - cache allow bool --- litellm/proxy/proxy_server.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 257f4a083..14d487f9e 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -496,7 +496,10 @@ def load_router_config(router: Optional[litellm.Router], config_file_path: str): if key == "cache": print(f"{blue_color_code}\nSetting Cache on Proxy") from litellm.caching import Cache - cache_type = value["type"] + if isinstance(value, dict): + cache_type = value.get("type", "redis") + else: + cache_type = "redis" # default to using redis on cache cache_responses = True cache_host = litellm.get_secret("REDIS_HOST", None) cache_port = litellm.get_secret("REDIS_PORT", None) From adbdb31b9dfee35d9f60498dd640d8b58fa559d9 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Sat, 9 Dec 2023 15:56:57 -0800 Subject: [PATCH 344/460] (docs) proxy caching --- docs/my-website/docs/proxy/caching.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/my-website/docs/proxy/caching.md b/docs/my-website/docs/proxy/caching.md index 56e4b4c1c..37d3658e7 100644 --- a/docs/my-website/docs/proxy/caching.md +++ b/docs/my-website/docs/proxy/caching.md @@ -11,8 +11,7 @@ model_list: litellm_settings: set_verbose: True - cache: # init cache - type: redis # tell litellm to use redis caching (Also: `pip install redis`) + cache: True # set cache responses to True, litellm defaults to using a redis cache ``` #### Step 2: Add Redis Credentials to .env From 0c8b8200b840f4f7913baadc907511d22c36dbd4 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Sat, 9 Dec 2023 16:02:02 -0800 Subject: [PATCH 345/460] (ci/cd) run tests again --- litellm/tests/test_custom_logger.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/tests/test_custom_logger.py b/litellm/tests/test_custom_logger.py index 1a489ffdb..871cf308c 100644 --- a/litellm/tests/test_custom_logger.py +++ b/litellm/tests/test_custom_logger.py @@ -6,7 +6,7 @@ sys.path.insert(0, os.path.abspath('../..')) from litellm import completion, embedding import litellm from litellm.integrations.custom_logger import CustomLogger - + async_success = False complete_streaming_response_in_callback = "" class MyCustomHandler(CustomLogger): From 6ef0e8485e0e720c0efa6f3075ce8119f2f62eea Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Sat, 9 Dec 2023 16:22:53 -0800 Subject: [PATCH 346/460] fix(proxy_server.py): support for streaming --- .../proxy/hooks/parallel_request_limiter.py | 85 +++++++--- litellm/proxy/proxy_server.py | 89 +++++++---- litellm/proxy/utils.py | 151 ++++++++---------- litellm/tests/test_proxy_server_keys.py | 36 ++++- 4 files changed, 219 insertions(+), 142 deletions(-) diff --git a/litellm/proxy/hooks/parallel_request_limiter.py b/litellm/proxy/hooks/parallel_request_limiter.py index 14f4c330c..4a321d009 100644 --- a/litellm/proxy/hooks/parallel_request_limiter.py +++ b/litellm/proxy/hooks/parallel_request_limiter.py @@ -1,33 +1,70 @@ from typing import Optional +import litellm from litellm.caching import DualCache +from litellm.integrations.custom_logger import CustomLogger from fastapi import HTTPException -async def max_parallel_request_allow_request(max_parallel_requests: Optional[int], api_key: Optional[str], user_api_key_cache: DualCache): - if api_key is None: - return +class MaxParallelRequestsHandler(CustomLogger): + # Class variables or attributes + def __init__(self): + pass + + def print_verbose(self, print_statement): + if litellm.set_verbose is True: + print(print_statement) # noqa - if max_parallel_requests is None: - return - # CHECK IF REQUEST ALLOWED - request_count_api_key = f"{api_key}_request_count" - current = user_api_key_cache.get_cache(key=request_count_api_key) - if current is None: - user_api_key_cache.set_cache(request_count_api_key, 1) - elif int(current) < max_parallel_requests: - # Increase count for this token - user_api_key_cache.set_cache(request_count_api_key, int(current) + 1) - else: - raise HTTPException(status_code=429, detail="Max parallel request limit reached.") + async def max_parallel_request_allow_request(self, max_parallel_requests: Optional[int], api_key: Optional[str], user_api_key_cache: DualCache): + if api_key is None: + return + + if max_parallel_requests is None: + return + + self.user_api_key_cache = user_api_key_cache # save the api key cache for updating the value + + # CHECK IF REQUEST ALLOWED + request_count_api_key = f"{api_key}_request_count" + current = user_api_key_cache.get_cache(key=request_count_api_key) + self.print_verbose(f"current: {current}") + if current is None: + user_api_key_cache.set_cache(request_count_api_key, 1) + elif int(current) < max_parallel_requests: + # Increase count for this token + user_api_key_cache.set_cache(request_count_api_key, int(current) + 1) + else: + raise HTTPException(status_code=429, detail="Max parallel request limit reached.") -async def max_parallel_request_update_count(api_key: Optional[str], user_api_key_cache: DualCache): - if api_key is None: - return - - request_count_api_key = f"{api_key}_request_count" - # Decrease count for this token - current = user_api_key_cache.get_cache(key=request_count_api_key) or 1 - user_api_key_cache.set_cache(request_count_api_key, int(current) - 1) + async def async_log_success_event(self, kwargs, response_obj, start_time, end_time): + try: + self.print_verbose(f"INSIDE ASYNC SUCCESS LOGGING") + user_api_key = kwargs["litellm_params"]["metadata"]["user_api_key"] + if user_api_key is None: + return + + request_count_api_key = f"{user_api_key}_request_count" + # check if it has collected an entire stream response + self.print_verbose(f"'complete_streaming_response' is in kwargs: {'complete_streaming_response' in kwargs}") + if "complete_streaming_response" in kwargs or kwargs["stream"] != True: + # Decrease count for this token + current = self.user_api_key_cache.get_cache(key=request_count_api_key) or 1 + new_val = current - 1 + self.print_verbose(f"updated_value in success call: {new_val}") + self.user_api_key_cache.set_cache(request_count_api_key, new_val) + except Exception as e: + self.print_verbose(e) # noqa - return \ No newline at end of file + async def async_log_failure_call(self, api_key, user_api_key_cache): + try: + if api_key is None: + return + + request_count_api_key = f"{api_key}_request_count" + # Decrease count for this token + current = self.user_api_key_cache.get_cache(key=request_count_api_key) or 1 + new_val = current - 1 + self.print_verbose(f"updated_value in failure call: {new_val}") + self.user_api_key_cache.set_cache(request_count_api_key, new_val) + except Exception as e: + self.print_verbose(f"An exception occurred - {str(e)}") # noqa \ No newline at end of file diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 14d487f9e..47630163a 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -1,4 +1,4 @@ -import sys, os, platform, time, copy, re, asyncio +import sys, os, platform, time, copy, re, asyncio, inspect import threading, ast import shutil, random, traceback, requests from datetime import datetime, timedelta @@ -94,7 +94,6 @@ import litellm from litellm.proxy.utils import ( PrismaClient, get_instance_fn, - CallHooks, ProxyLogging ) import pydantic @@ -198,8 +197,8 @@ user_custom_auth = None use_background_health_checks = None health_check_interval = None health_check_results = {} -call_hooks = CallHooks(user_api_key_cache=user_api_key_cache) -proxy_logging_obj: Optional[ProxyLogging] = None +### INITIALIZE GLOBAL LOGGING OBJECT ### +proxy_logging_obj = ProxyLogging(user_api_key_cache=user_api_key_cache) ### REDIS QUEUE ### async_result = None celery_app_conn = None @@ -309,10 +308,9 @@ async def user_api_key_auth(request: Request, api_key: str = fastapi.Security(ap ) def prisma_setup(database_url: Optional[str]): - global prisma_client, proxy_logging_obj - ### INITIALIZE GLOBAL LOGGING OBJECT ### - proxy_logging_obj = ProxyLogging() + global prisma_client, proxy_logging_obj, user_api_key_cache + proxy_logging_obj._init_litellm_callbacks() if database_url is not None: try: prisma_client = PrismaClient(database_url=database_url, proxy_logging_obj=proxy_logging_obj) @@ -390,6 +388,10 @@ async def track_cost_callback( completion=output_text ) print("streaming response_cost", response_cost) + user_api_key = kwargs["litellm_params"]["metadata"].get("user_api_key", None) + print(f"user_api_key - {user_api_key}; prisma_client - {prisma_client}") + if user_api_key and prisma_client: + await update_prisma_database(token=user_api_key, response_cost=response_cost) elif kwargs["stream"] == False: # for non streaming responses input_text = kwargs.get("messages", "") print(f"type of input_text: {type(input_text)}") @@ -400,10 +402,10 @@ async def track_cost_callback( print(f"received completion response: {completion_response}") print(f"regular response_cost: {response_cost}") - user_api_key = kwargs["litellm_params"]["metadata"].get("user_api_key", None) - print(f"user_api_key - {user_api_key}; prisma_client - {prisma_client}") - if user_api_key and prisma_client: - await update_prisma_database(token=user_api_key, response_cost=response_cost) + user_api_key = kwargs["litellm_params"]["metadata"].get("user_api_key", None) + print(f"user_api_key - {user_api_key}; prisma_client - {prisma_client}") + if user_api_key and prisma_client: + await update_prisma_database(token=user_api_key, response_cost=response_cost) except Exception as e: print(f"error in tracking cost callback - {str(e)}") @@ -475,9 +477,6 @@ def load_router_config(router: Optional[litellm.Router], config_file_path: str): print_verbose(f"Loaded config YAML (api_key and environment_variables are not shown):\n{json.dumps(printed_yaml, indent=2)}") - ## ROUTER CONFIG - cache_responses = False - ## ENVIRONMENT VARIABLES environment_variables = config.get('environment_variables', None) if environment_variables: @@ -554,6 +553,8 @@ def load_router_config(router: Optional[litellm.Router], config_file_path: str): else: setattr(litellm, key, value) + + ## GENERAL SERVER SETTINGS (e.g. master key,..) # do this after initializing litellm, to ensure sentry logging works for proxylogging general_settings = config.get("general_settings", {}) if general_settings is None: @@ -589,18 +590,41 @@ def load_router_config(router: Optional[litellm.Router], config_file_path: str): use_background_health_checks = general_settings.get("background_health_checks", False) health_check_interval = general_settings.get("health_check_interval", 300) + router_params: dict = { + "num_retries": 3, + "cache_responses": litellm.cache != None # cache if user passed in cache values + } ## MODEL LIST model_list = config.get('model_list', None) if model_list: - router = litellm.Router(model_list=model_list, num_retries=3, cache_responses=cache_responses) + router_params["model_list"] = model_list print(f"\033[32mLiteLLM: Proxy initialized with Config, Set models:\033[0m") for model in model_list: print(f"\033[32m {model.get('model_name', '')}\033[0m") litellm_model_name = model["litellm_params"]["model"] - if "ollama" in litellm_model_name: + litellm_model_api_base = model["litellm_params"].get("api_base", None) + if "ollama" in litellm_model_name and litellm_model_api_base is None: run_ollama_serve() - call_hooks.update_router_config(litellm_settings=litellm_settings, model_list=model_list, general_settings=general_settings) + ## ROUTER SETTINGS (e.g. routing_strategy, ...) + router_settings = config.get("router_settings", None) + if router_settings and isinstance(router_settings, dict): + arg_spec = inspect.getfullargspec(litellm.Router) + # model list already set + exclude_args = { + "self", + "model_list", + } + + available_args = [ + x for x in arg_spec.args if x not in exclude_args + ] + + for k, v in router_settings.items(): + if k in available_args: + router_params[k] = v + + router = litellm.Router(**router_params) # type:ignore return router, model_list, general_settings async def generate_key_helper_fn(duration: Optional[str], models: list, aliases: dict, config: dict, spend: float, token: Optional[str]=None, user_id: Optional[str]=None, max_parallel_requests: Optional[int]=None): @@ -772,10 +796,13 @@ def data_generator(response): yield f"data: {json.dumps(chunk)}\n\n" async def async_data_generator(response, user_api_key_dict): - global call_hooks - print_verbose("inside generator") async for chunk in response: + # try: + # await proxy_logging_obj.pre_call_hook(user_api_key_dict=user_api_key_dict, data=None, call_type="completion") + # except Exception as e: + # print(f"An exception occurred - {str(e)}") + print_verbose(f"returned chunk: {chunk}") try: yield f"data: {json.dumps(chunk.dict())}\n\n" @@ -946,7 +973,7 @@ async def completion(request: Request, model: Optional[str] = None, user_api_key @router.post("/chat/completions", dependencies=[Depends(user_api_key_auth)], tags=["chat/completions"]) @router.post("/openai/deployments/{model:path}/chat/completions", dependencies=[Depends(user_api_key_auth)], tags=["chat/completions"]) # azure compatible endpoint async def chat_completion(request: Request, model: Optional[str] = None, user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), background_tasks: BackgroundTasks = BackgroundTasks()): - global general_settings, user_debug, call_hooks + global general_settings, user_debug, proxy_logging_obj try: data = {} data = await request.json() # type: ignore @@ -992,7 +1019,7 @@ async def chat_completion(request: Request, model: Optional[str] = None, user_ap data["api_base"] = user_api_base ### CALL HOOKS ### - modify incoming data before calling the model - data = await call_hooks.pre_call(user_api_key_dict=user_api_key_dict, data=data, call_type="completion") + data = await proxy_logging_obj.pre_call_hook(user_api_key_dict=user_api_key_dict, data=data, call_type="completion") ### ROUTE THE REQUEST ### router_model_names = [m["model_name"] for m in llm_model_list] if llm_model_list is not None else [] @@ -1009,15 +1036,10 @@ async def chat_completion(request: Request, model: Optional[str] = None, user_ap if 'stream' in data and data['stream'] == True: # use generate_responses to stream responses return StreamingResponse(async_data_generator(user_api_key_dict=user_api_key_dict, response=response), media_type='text/event-stream') - ### CALL HOOKS ### - modify outgoing response - response = await call_hooks.post_call_success(user_api_key_dict=user_api_key_dict, response=response, call_type="completion") - background_tasks.add_task(log_input_output, request, response) # background task for logging to OTEL return response except Exception as e: - print(f"Exception received: {str(e)}") - raise e - await call_hooks.post_call_failure(original_exception=e, user_api_key_dict=user_api_key_dict) + await proxy_logging_obj.post_call_failure_hook(user_api_key_dict=user_api_key_dict, original_exception=e) print(f"\033[1;31mAn error occurred: {e}\n\n Debug this by setting `--debug`, e.g. `litellm --model gpt-3.5-turbo --debug`") router_model_names = [m["model_name"] for m in llm_model_list] if llm_model_list is not None else [] if llm_router is not None and data.get("model", "") in router_model_names: @@ -1052,7 +1074,7 @@ async def chat_completion(request: Request, model: Optional[str] = None, user_ap @router.post("/v1/embeddings", dependencies=[Depends(user_api_key_auth)], response_class=ORJSONResponse) @router.post("/embeddings", dependencies=[Depends(user_api_key_auth)], response_class=ORJSONResponse) async def embeddings(request: Request, user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), background_tasks: BackgroundTasks = BackgroundTasks()): - global call_hooks + global proxy_logging_obj try: # Use orjson to parse JSON data, orjson speeds up requests significantly body = await request.body() @@ -1095,8 +1117,8 @@ async def embeddings(request: Request, user_api_key_dict: UserAPIKeyAuth = Depen data["input"] = input_list break - ### CALL HOOKS ### - modify incoming data before calling the model - data = await call_hooks.pre_call(user_api_key_dict=user_api_key_dict, data=data, call_type="embeddings") + ### CALL HOOKS ### - modify incoming data / reject request before calling the model + data = await proxy_logging_obj.pre_call_hook(user_api_key_dict=user_api_key_dict, data=data, call_type="embeddings") ## ROUTE TO CORRECT ENDPOINT ## if llm_router is not None and data["model"] in router_model_names: # model in router model list @@ -1107,12 +1129,9 @@ async def embeddings(request: Request, user_api_key_dict: UserAPIKeyAuth = Depen response = await litellm.aembedding(**data) background_tasks.add_task(log_input_output, request, response) # background task for logging to OTEL - ### CALL HOOKS ### - modify outgoing response - data = call_hooks.post_call_success(user_api_key_dict=user_api_key_dict, response=response, call_type="embeddings") - return response except Exception as e: - await call_hooks.post_call_failure(user_api_key_dict=user_api_key_dict, original_exception=e) + await proxy_logging_obj.post_call_failure_hook(user_api_key_dict=user_api_key_dict, original_exception=e) traceback.print_exc() raise e @@ -1139,7 +1158,7 @@ async def generate_key_fn(request: Request, data: GenerateKeyRequest, Authorizat - user_id: (str) Unique user id - used for tracking spend across multiple keys for same user id. """ # data = await request.json() - data_json = json.loads(data.json()) # type: ignore + data_json = data.json() # type: ignore response = await generate_key_helper_fn(**data_json) return GenerateKeyResponse(key=response["token"], expires=response["expires"], user_id=response["user_id"]) diff --git a/litellm/proxy/utils.py b/litellm/proxy/utils.py index 688820e83..e972eff4d 100644 --- a/litellm/proxy/utils.py +++ b/litellm/proxy/utils.py @@ -3,7 +3,7 @@ import os, subprocess, hashlib, importlib, asyncio import litellm, backoff from litellm.proxy._types import UserAPIKeyAuth from litellm.caching import DualCache -from litellm.proxy.hooks.parallel_request_limiter import max_parallel_request_allow_request, max_parallel_request_update_count +from litellm.proxy.hooks.parallel_request_limiter import MaxParallelRequestsHandler def print_verbose(print_statement): if litellm.set_verbose: @@ -11,32 +11,35 @@ def print_verbose(print_statement): ### LOGGING ### class ProxyLogging: """ - Logging for proxy. + Logging/Custom Handlers for proxy. - Implemented mainly to log successful/failed db read/writes. - - Currently just logs this to a provided sentry integration. + Implemented mainly to: + - log successful/failed db read/writes + - support the max parallel request integration """ - def __init__(self,): + def __init__(self, user_api_key_cache: DualCache): ## INITIALIZE LITELLM CALLBACKS ## - self._init_litellm_callbacks() + self.call_details: dict = {} + self.call_details["user_api_key_cache"] = user_api_key_cache + self.max_parallel_request_limiter = MaxParallelRequestsHandler() pass - def _init_litellm_callbacks(self): - if len(litellm.callbacks) > 0: - for callback in litellm.callbacks: - if callback not in litellm.input_callback: - litellm.input_callback.append(callback) - if callback not in litellm.success_callback: - litellm.success_callback.append(callback) - if callback not in litellm.failure_callback: - litellm.failure_callback.append(callback) - if callback not in litellm._async_success_callback: - litellm._async_success_callback.append(callback) - if callback not in litellm._async_failure_callback: - litellm._async_failure_callback.append(callback) + def _init_litellm_callbacks(self): + litellm.callbacks.append(self.max_parallel_request_limiter) + for callback in litellm.callbacks: + if callback not in litellm.input_callback: + litellm.input_callback.append(callback) + if callback not in litellm.success_callback: + litellm.success_callback.append(callback) + if callback not in litellm.failure_callback: + litellm.failure_callback.append(callback) + if callback not in litellm._async_success_callback: + litellm._async_success_callback.append(callback) + if callback not in litellm._async_failure_callback: + litellm._async_failure_callback.append(callback) + if ( len(litellm.input_callback) > 0 or len(litellm.success_callback) > 0 @@ -53,6 +56,30 @@ class ProxyLogging: callback_list=callback_list ) + async def pre_call_hook(self, user_api_key_dict: UserAPIKeyAuth, data: dict, call_type: Literal["completion", "embeddings"]): + """ + Allows users to modify/reject the incoming request to the proxy, without having to deal with parsing Request body. + + Covers: + 1. /chat/completions + 2. /embeddings + """ + try: + self.call_details["data"] = data + self.call_details["call_type"] = call_type + + ## check if max parallel requests set + if user_api_key_dict.max_parallel_requests is not None: + ## if set, check if request allowed + await self.max_parallel_request_limiter.max_parallel_request_allow_request( + max_parallel_requests=user_api_key_dict.max_parallel_requests, + api_key=user_api_key_dict.api_key, + user_api_key_cache=self.call_details["user_api_key_cache"]) + + return data + except Exception as e: + raise e + async def success_handler(self, *args, **kwargs): """ Log successful db read/writes @@ -67,6 +94,27 @@ class ProxyLogging: """ if litellm.utils.capture_exception: litellm.utils.capture_exception(error=original_exception) + + async def post_call_failure_hook(self, original_exception: Exception, user_api_key_dict: UserAPIKeyAuth): + """ + Allows users to raise custom exceptions/log when a call fails, without having to deal with parsing Request body. + + Covers: + 1. /chat/completions + 2. /embeddings + """ + # check if max parallel requests set + if user_api_key_dict.max_parallel_requests is not None: + ## decrement call count if call failed + if (hasattr(original_exception, "status_code") + and original_exception.status_code == 429 + and "Max parallel request limit reached" in str(original_exception)): + pass # ignore failed calls due to max limit being reached + else: + await self.max_parallel_request_limiter.async_log_failure_call( + api_key=user_api_key_dict.api_key, + user_api_key_cache=self.call_details["user_api_key_cache"]) + return ### DB CONNECTOR ### @@ -290,65 +338,4 @@ def get_instance_fn(value: str, config_file_path: Optional[str] = None) -> Any: except Exception as e: raise e -### CALL HOOKS ### -class CallHooks: - """ - Allows users to modify the incoming request / output to the proxy, without having to deal with parsing Request body. - - Covers: - 1. /chat/completions - 2. /embeddings - """ - - def __init__(self, user_api_key_cache: DualCache): - self.call_details: dict = {} - self.call_details["user_api_key_cache"] = user_api_key_cache - - def update_router_config(self, litellm_settings: dict, general_settings: dict, model_list: list): - self.call_details["litellm_settings"] = litellm_settings - self.call_details["general_settings"] = general_settings - self.call_details["model_list"] = model_list - - async def pre_call(self, user_api_key_dict: UserAPIKeyAuth, data: dict, call_type: Literal["completion", "embeddings"]): - try: - self.call_details["data"] = data - self.call_details["call_type"] = call_type - - ## check if max parallel requests set - if user_api_key_dict.max_parallel_requests is not None: - ## if set, check if request allowed - await max_parallel_request_allow_request( - max_parallel_requests=user_api_key_dict.max_parallel_requests, - api_key=user_api_key_dict.api_key, - user_api_key_cache=self.call_details["user_api_key_cache"]) - - return data - except Exception as e: - raise e - - async def post_call_success(self, user_api_key_dict: UserAPIKeyAuth, response: Optional[Any]=None, call_type: Optional[Literal["completion", "embeddings"]]=None, chunk: Optional[Any]=None): - try: - # check if max parallel requests set - if user_api_key_dict.max_parallel_requests is not None: - ## decrement call, once complete - await max_parallel_request_update_count( - api_key=user_api_key_dict.api_key, - user_api_key_cache=self.call_details["user_api_key_cache"]) - - return response - except Exception as e: - raise e - - async def post_call_failure(self, original_exception: Exception, user_api_key_dict: UserAPIKeyAuth): - # check if max parallel requests set - if user_api_key_dict.max_parallel_requests is not None: - ## decrement call count if call failed - if (hasattr(original_exception, "status_code") - and original_exception.status_code == 429 - and "Max parallel request limit reached" in str(original_exception)): - pass # ignore failed calls due to max limit being reached - else: - await max_parallel_request_update_count( - api_key=user_api_key_dict.api_key, - user_api_key_cache=self.call_details["user_api_key_cache"]) - return \ No newline at end of file + \ No newline at end of file diff --git a/litellm/tests/test_proxy_server_keys.py b/litellm/tests/test_proxy_server_keys.py index c5984ba13..239442b2c 100644 --- a/litellm/tests/test_proxy_server_keys.py +++ b/litellm/tests/test_proxy_server_keys.py @@ -25,7 +25,7 @@ from fastapi.testclient import TestClient from fastapi import FastAPI from litellm.proxy.proxy_server import router, save_worker_config, startup_event # Replace with the actual module where your FastAPI router is defined filepath = os.path.dirname(os.path.abspath(__file__)) -config_fp = f"{filepath}/test_configs/test_config_custom_auth.yaml" +config_fp = f"{filepath}/test_configs/test_config.yaml" save_worker_config(config=config_fp, model=None, alias=None, api_base=None, api_version=None, debug=False, temperature=None, max_tokens=None, request_timeout=600, max_budget=None, telemetry=False, drop_params=True, add_function_to_prompt=False, headers=None, save=False, use_queue=False) app = FastAPI() app.include_router(router) # Include your router in the test app @@ -100,3 +100,37 @@ def test_add_new_key_max_parallel_limit(client): _run_in_parallel() except Exception as e: pytest.fail(f"LiteLLM Proxy test failed. Exception: {str(e)}") + +def test_add_new_key_max_parallel_limit_streaming(client): + try: + # Your test data + test_data = {"duration": "20m", "max_parallel_requests": 1} + # Your bearer token + token = os.getenv('PROXY_MASTER_KEY') + + headers = { + "Authorization": f"Bearer {token}" + } + response = client.post("/key/generate", json=test_data, headers=headers) + print(f"response: {response.text}") + assert response.status_code == 200 + result = response.json() + def _post_data(): + json_data = {'model': 'azure-model', "messages": [{"role": "user", "content": f"this is a test request, write a short poem {time.time()}"}], "stream": True} + response = client.post("/chat/completions", json=json_data, headers={"Authorization": f"Bearer {result['key']}"}) + return response + def _run_in_parallel(): + with ThreadPoolExecutor(max_workers=2) as executor: + future1 = executor.submit(_post_data) + future2 = executor.submit(_post_data) + + # Obtain the results from the futures + response1 = future1.result() + response2 = future2.result() + if response1.status_code == 429 or response2.status_code == 429: + pass + else: + raise Exception() + _run_in_parallel() + except Exception as e: + pytest.fail(f"LiteLLM Proxy test failed. Exception: {str(e)}") \ No newline at end of file From 149c1b35573bd16e9a83d4a3f696dd172f13ed13 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Sat, 9 Dec 2023 16:31:31 -0800 Subject: [PATCH 347/460] docs(configs.md): added docs on how to configure routing strategy on proxy --- docs/my-website/docs/proxy/configs.md | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/docs/my-website/docs/proxy/configs.md b/docs/my-website/docs/proxy/configs.md index 9977b3dc9..eea8e7681 100644 --- a/docs/my-website/docs/proxy/configs.md +++ b/docs/my-website/docs/proxy/configs.md @@ -8,7 +8,8 @@ Set model list, `api_base`, `api_key`, `temperature` & proxy server settings (`m | Param Name | Description | |----------------------|---------------------------------------------------------------| | `model_list` | List of supported models on the server, with model-specific configs | -| `litellm_settings` | litellm Module settings, example `litellm.drop_params=True`, `litellm.set_verbose=True`, `litellm.api_base`, `litellm.cache` | +| `router_settings` | litellm Router settings, example `routing_strategy="least-busy"` [**see all**](https://github.com/BerriAI/litellm/blob/6ef0e8485e0e720c0efa6f3075ce8119f2f62eea/litellm/router.py#L64)| +| `litellm_settings` | litellm Module settings, example `litellm.drop_params=True`, `litellm.set_verbose=True`, `litellm.api_base`, `litellm.cache` [**see all**](https://github.com/BerriAI/litellm/blob/main/litellm/__init__.py)| | `general_settings` | Server settings, example setting `master_key: sk-my_special_key` | | `environment_variables` | Environment Variables example, `REDIS_HOST`, `REDIS_PORT` | @@ -306,6 +307,29 @@ model_list: $ litellm --config /path/to/config.yaml ``` +## Router Settings + +Use this to configure things like routing strategy. + +```yaml +router_settings: + routing_strategy: "least-busy" + +model_list: # will route requests to the least busy ollama model + - model_name: ollama-models + litellm_params: + model: "ollama/mistral" + api_base: "http://127.0.0.1:8001" + - model_name: ollama-models + litellm_params: + model: "ollama/codellama" + api_base: "http://127.0.0.1:8002" + - model_name: ollama-models + litellm_params: + model: "ollama/llama2" + api_base: "http://127.0.0.1:8003" +``` + ## Max Parallel Requests To rate limit a user based on the number of parallel requests, e.g.: From 2879b366363bdf563de9d00c32b74f42f30077ba Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Sat, 9 Dec 2023 16:42:37 -0800 Subject: [PATCH 348/460] (fix) setting cache keys --- litellm/caching.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/litellm/caching.py b/litellm/caching.py index cbaa3bb20..1d993927b 100644 --- a/litellm/caching.py +++ b/litellm/caching.py @@ -230,8 +230,15 @@ class Cache: if param in kwargs: # check if param == model and model_group is passed in, then override model with model_group if param == "model": - # for litellm.Router use model_group for caching over `model` - model_group = kwargs.get("metadata", {}).get("model_group", None) or kwargs.get("litellm_params", {}).get("metadata", {}).get("model_group", None) + model_group = None + metadata = kwargs.get("metadata", None) + litellm_params = kwargs.get("litellm_params", {}) + if metadata is not None: + model_group = metadata.get("model_group") + if litellm_params is not None: + metadata = litellm_params.get("metadata", None) + if metadata is not None: + model_group = metadata.get("model_group", None) param_value = model_group or kwargs[param] # use model_group if it exists, else use kwargs["model"] else: if kwargs[param] is None: From 8a52e173001ca104384c8325ecb5299a64a15c33 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Sat, 9 Dec 2023 16:42:54 -0800 Subject: [PATCH 349/460] (test) caching - get cache key --- litellm/tests/test_caching.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/litellm/tests/test_caching.py b/litellm/tests/test_caching.py index a53d10d2b..e58f76afe 100644 --- a/litellm/tests/test_caching.py +++ b/litellm/tests/test_caching.py @@ -336,6 +336,20 @@ def test_custom_redis_cache_params(): except Exception as e: pytest.fail(f"Error occurred:", e) + +def test_get_cache_key(): + from litellm.caching import Cache + try: + cache_instance = Cache() + cache_key = cache_instance.get_cache_key(**{'model': 'gpt-3.5-turbo', 'messages': [{'role': 'user', 'content': 'write a one sentence poem about: 7510'}], 'max_tokens': 40, 'temperature': 0.2, 'stream': True, 'litellm_call_id': 'ffe75e7e-8a07-431f-9a74-71a5b9f35f0b', 'litellm_logging_obj': {}} + ) + assert cache_key == "model: gpt-3.5-turbomessages: [{'role': 'user', 'content': 'write a one sentence poem about: 7510'}]temperature: 0.2max_tokens: 40" + except Exception as e: + traceback.print_exc() + pytest.fail(f"Error occurred:", e) + +test_get_cache_key() + # test_custom_redis_cache_params() # def test_redis_cache_with_ttl(): From bf1044444cf16efc51bb8515c900c5a4d656853f Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Sat, 9 Dec 2023 16:58:56 -0800 Subject: [PATCH 350/460] (test) caching --- litellm/tests/test_caching.py | 2 +- litellm/tests/test_custom_logger.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/litellm/tests/test_caching.py b/litellm/tests/test_caching.py index e58f76afe..cce923b6c 100644 --- a/litellm/tests/test_caching.py +++ b/litellm/tests/test_caching.py @@ -348,7 +348,7 @@ def test_get_cache_key(): traceback.print_exc() pytest.fail(f"Error occurred:", e) -test_get_cache_key() +# test_get_cache_key() # test_custom_redis_cache_params() diff --git a/litellm/tests/test_custom_logger.py b/litellm/tests/test_custom_logger.py index 871cf308c..2df5e0f76 100644 --- a/litellm/tests/test_custom_logger.py +++ b/litellm/tests/test_custom_logger.py @@ -103,7 +103,7 @@ def test_async_chat_openai_stream(): except Exception as e: print(e) pytest.fail(f"An error occurred - {str(e)}") -# test_async_chat_openai_stream() +test_async_chat_openai_stream() def test_completion_azure_stream_moderation_failure(): try: @@ -325,4 +325,4 @@ def test_redis_cache_completion_stream(): 1 & 2 should be exactly the same """ -test_redis_cache_completion_stream() \ No newline at end of file +# test_redis_cache_completion_stream() \ No newline at end of file From 82484691cba913108964b2b9cb1dece991468223 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Sat, 9 Dec 2023 21:24:52 -0800 Subject: [PATCH 351/460] fix: minor bug fixes --- litellm/proxy/_types.py | 2 +- litellm/proxy/proxy_server.py | 2 +- pyproject.toml | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/litellm/proxy/_types.py b/litellm/proxy/_types.py index 628ea2379..38bb894dd 100644 --- a/litellm/proxy/_types.py +++ b/litellm/proxy/_types.py @@ -89,7 +89,7 @@ class GenerateKeyRequest(BaseModel): return self.model_dump() # noqa except: # if using pydantic v1 - return json.dumps(self.dict(), **kwargs) + return self.dict() class GenerateKeyResponse(BaseModel): key: str diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 47630163a..5037a3719 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -293,7 +293,7 @@ async def user_api_key_auth(request: Request, api_key: str = fastapi.Security(ap raise Exception(f"Token not allowed to access model") api_key = valid_token.token valid_token_dict = _get_pydantic_json_dict(valid_token) - valid_token.pop("token", None) + valid_token_dict.pop("token", None) return UserAPIKeyAuth(api_key=api_key, **valid_token) else: raise Exception(f"Invalid token") diff --git a/pyproject.toml b/pyproject.toml index 765428f4f..aa45cfb1d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "litellm" -version = "1.12.1" +version = "1.12.2" description = "Library to easily interface with LLM API providers" authors = ["BerriAI"] license = "MIT License" @@ -55,7 +55,7 @@ requires = ["poetry-core", "wheel"] build-backend = "poetry.core.masonry.api" [tool.commitizen] -version = "1.12.1" +version = "1.12.2" version_files = [ "pyproject.toml:^version" ] From f10bb708c07485739d8ef764078846fabaa51922 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Sat, 9 Dec 2023 21:31:46 -0800 Subject: [PATCH 352/460] fix: fix run_ollama_serve to only run if api base is none --- litellm/proxy/proxy_cli.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/proxy/proxy_cli.py b/litellm/proxy/proxy_cli.py index 57908e59a..9a03bca52 100644 --- a/litellm/proxy/proxy_cli.py +++ b/litellm/proxy/proxy_cli.py @@ -113,7 +113,7 @@ def run_server(host, port, api_base, api_version, model, alias, add_key, headers except: raise Exception("LiteLLM: No logs saved!") return - if model and "ollama" in model: + if model and "ollama" in model and api_base is None: run_ollama_serve() if test_async is True: import requests, concurrent, time From 07b4c72a98fb38bf0a072bf9824af0f917e87403 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Sat, 9 Dec 2023 22:04:59 -0800 Subject: [PATCH 353/460] fix(proxy_server.py): fix key gen error --- litellm/proxy/_types.py | 25 +++++++++++++++++++++++-- litellm/proxy/proxy_server.py | 3 ++- litellm/tests/test_proxy_server_keys.py | 7 ++++++- 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/litellm/proxy/_types.py b/litellm/proxy/_types.py index 38bb894dd..68709f34d 100644 --- a/litellm/proxy/_types.py +++ b/litellm/proxy/_types.py @@ -1,4 +1,4 @@ -from pydantic import BaseModel, Extra, Field +from pydantic import BaseModel, Extra, Field, root_validator from typing import Optional, List, Union, Dict, Literal from datetime import datetime import uuid, json @@ -65,15 +65,36 @@ class ModelInfo(BaseModel): class Config: extra = Extra.allow # Allow extra fields protected_namespaces = () + + # @root_validator(pre=True) + # def set_model_info(cls, values): + # if values.get("id") is None: + # values.update({"id": str(uuid.uuid4())}) + # if values.get("mode") is None: + # values.update({"mode": str(uuid.uuid4())}) + # return values + class ModelParams(BaseModel): model_name: str litellm_params: dict model_info: Optional[ModelInfo]=None - + + # def __init__(self, model_name: str, litellm_params: dict, model_info: Optional[ModelInfo] = None): + # self.model_name = model_name + # self.litellm_params = litellm_params + # self.model_info = model_info if model_info else ModelInfo() + # super.__init__(model_name=self.model_name, litellm_params=self.litellm_params, model_info=self.model_info) + class Config: protected_namespaces = () + + # @root_validator(pre=True) + # def set_model_info(cls, values): + # if values.get("model_info") is None: + # values.update({"model_info": ModelInfo()}) + # return values class GenerateKeyRequest(BaseModel): duration: Optional[str] = "1h" diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 5037a3719..a82723051 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -294,7 +294,7 @@ async def user_api_key_auth(request: Request, api_key: str = fastapi.Security(ap api_key = valid_token.token valid_token_dict = _get_pydantic_json_dict(valid_token) valid_token_dict.pop("token", None) - return UserAPIKeyAuth(api_key=api_key, **valid_token) + return UserAPIKeyAuth(api_key=api_key, **valid_token_dict) else: raise Exception(f"Invalid token") except Exception as e: @@ -1224,6 +1224,7 @@ async def add_new_model(model_params: ModelParams): return {"message": "Model added successfully"} except Exception as e: + traceback.print_exc() raise HTTPException(status_code=500, detail=f"Internal Server Error: {str(e)}") #### [BETA] - This is a beta endpoint, format might change based on user feedback https://github.com/BerriAI/litellm/issues/933. If you need a stable endpoint use /model/info diff --git a/litellm/tests/test_proxy_server_keys.py b/litellm/tests/test_proxy_server_keys.py index 239442b2c..db083c30c 100644 --- a/litellm/tests/test_proxy_server_keys.py +++ b/litellm/tests/test_proxy_server_keys.py @@ -44,7 +44,7 @@ def test_add_new_key(client): try: # Your test data test_data = { - "models": ["gpt-3.5-turbo", "gpt-4", "claude-2"], + "models": ["gpt-3.5-turbo", "gpt-4", "claude-2", "azure-model"], "aliases": {"mistral-7b": "gpt-3.5-turbo"}, "duration": "20m" } @@ -60,6 +60,11 @@ def test_add_new_key(client): assert response.status_code == 200 result = response.json() assert result["key"].startswith("sk-") + def _post_data(): + json_data = {'model': 'azure-model', "messages": [{"role": "user", "content": f"this is a test request, write a short poem {time.time()}"}]} + response = client.post("/chat/completions", json=json_data, headers={"Authorization": f"Bearer {result['key']}"}) + return response + _post_data() print(f"Received response: {result}") except Exception as e: pytest.fail(f"LiteLLM Proxy test failed. Exception: {str(e)}") From 45d59ba64fe9367802121ea9958333ac24d53a3e Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Sat, 9 Dec 2023 22:05:20 -0800 Subject: [PATCH 354/460] =?UTF-8?q?bump:=20version=201.12.2=20=E2=86=92=20?= =?UTF-8?q?1.12.3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index aa45cfb1d..62ca2f5a0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "litellm" -version = "1.12.2" +version = "1.12.3" description = "Library to easily interface with LLM API providers" authors = ["BerriAI"] license = "MIT License" @@ -55,7 +55,7 @@ requires = ["poetry-core", "wheel"] build-backend = "poetry.core.masonry.api" [tool.commitizen] -version = "1.12.2" +version = "1.12.3" version_files = [ "pyproject.toml:^version" ] From 3acd393c5eea3382a66a3b9a688623344c093a53 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Sat, 9 Dec 2023 22:25:53 -0800 Subject: [PATCH 355/460] (feat) langfuse - print traceback.exec() --- litellm/integrations/langfuse.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/integrations/langfuse.py b/litellm/integrations/langfuse.py index ea5276db2..721ad2bc7 100644 --- a/litellm/integrations/langfuse.py +++ b/litellm/integrations/langfuse.py @@ -70,6 +70,6 @@ class LangFuseLogger: f"Langfuse Layer Logging - final response object: {response_obj}" ) except: - # traceback.print_exc() + traceback.print_exc() print_verbose(f"Langfuse Layer Error - {traceback.format_exc()}") pass From b4c5bacea983aa2a424b0d6582a73588da0835c7 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Sat, 9 Dec 2023 22:26:52 -0800 Subject: [PATCH 356/460] (test) langfuse - read ddebug logs to find status 200 --- litellm/tests/langfuse.log | Bin 0 -> 15600 bytes litellm/tests/test_langfuse.py | 90 ++++++++++++++++++++++++++++++--- 2 files changed, 83 insertions(+), 7 deletions(-) create mode 100644 litellm/tests/langfuse.log diff --git a/litellm/tests/langfuse.log b/litellm/tests/langfuse.log new file mode 100644 index 0000000000000000000000000000000000000000..79a18140f260503397014d6b0f77bc83fdd19f53 GIT binary patch literal 15600 zcmeHO>yFzt7Vd991$X`^16Z;o%h!zyq{(a&Y?29Tr&u5e3`#n(HKSWeYC4l3Pq4rG z1bxLmLJz5n?-)%|Y_o;thesB9$iu^P`9y!33(7>8tVjaCkQa-^+d1*lBmqx^X+j=Z z=Tj1e0-`9^qja^xo<^E5NPJ+1m&Q}a>38P$k3qB0pov(sGz-02a4kf}r@h{NGmx{l zm-7Ybl^Q5LdzN9H5!*CLf80Tpc^(5JaEr?NMyDG2=)Bc%H&zdqkVPP1Z^$=k0-Yzm zFAXCozb2kD8BohJ^%0Cgcl-g>UDLC5$MHs{J05xfF8L)CYmzbW!2`}yM$|C1ZXqWu zPZDWD!{{s;4@-R?d?Hfva}GId)*7W~%w)Brr#m(Q`Y_RL2OQn8Y+I+MH_}JWcw&u5 z!5|ooPU!g-m6PjDBb*GC zUM?N_0S2yR3d^|EyH10k^OONqp&=OcfPB(IUz-xGi7RMbqA`eoazGL326!W(vHYf0 z-d_41#+mk6dPEs_OW|b(mm!5_S*KjgG%reX--u|k3UUrId^D1!Ow2I)NR)asTH+2c zbh??Gi-<6WG#9g>NqFjAgIK1SjOU_xXQDa)7>JxD%NrWyFncWH$4eO)OKA-ZcW&^z z#53mjF&Aifu)>yP}gZ+_oVnlD9!0_7SwkCwPL0k>lI7{3_v`KzbJ z_uWCvQ6K2gGruPs*bT6yT)ni~aSLo#xi#sZxt>0%(&4!HB?I(BE|zPcnD{nJEAP)9 z|5$V&?_Eu%D(%Aw!AiZ|VcpcftIgGTOeIwhSVj`6$}`+)c#y6qg{$Goj(a?EHCZZT z3Pw-I9NZ& zIEYy;0)1SHJ(JT*E$4aCC6-B^fro3d`@|ehZD%^L$n)2Wvh#(YE7kdoeGFrV-^SP1 zBk!zioh!Fh?LPtYAgb;Q7J5QoFq+`zFrm*eNwHAesjih(hJAB{wlqtjpC~KZFIk9n zx4iow{WTS6UtfPqOAGX{$n^>n_f)Flb>Bh@UG0dP>-Ed|e82UjubOy}TGMI3D1NT( zcsB5-zI9BsAksREw z1ysMfTk)-KY+gHjnLAYxM-B2wkkH4>)1dNeD&wM>aW<3QEHjf)T|AP$gpOrP=jxIn z28`1s0}C%Fa=W`kd<>Hy-AGFDkEn~03-25ujR2Nlibri!b}usGkt%{gs!C4L4HGCw z&o91U*Bo(= z#CWiW7!Tufd;n3P9G!Q$wOloQoca(+I6!kB^f1A8EC-fhYeY3IQ9lF>7%_bINfQuf za{qFsfR~Bg5QkyDU5XSz4aa{=jzJr#X3Nw*BYeln#q9n2Pa0M)bzjDglv5Zc5eVVV zUWDZL-+uis(MhPqq|oN<^M?;xs^jz<0gb%CN2v54RDEU*x?8hVcgL7bQh~{$SfJXo^S=YQ3~cy1aA|pV0OM~4 zTn4t=g3IdR`k)ZK|^4FYOAz7zc4LChxLfEK!@#B-l%gZ+!ISm}Q%4`KD z?!&JIs%U~=n;?NbWUP?Dy~y~l#0dp@`cjy%1C_QxS&76p;9~;@b`Z$@fTDsj6%w!p z$Kb*)TEJ)C0{%U|+~B)c5(yj6F8=l8-Kzy2UzJxHp3*!BA3gw}AAiu`xhKz6gFK4v zh&mv|12XEO$%sYp*f-`z=kQ_VDh<`KCW5izh!_u{@f2tC98(<`?{y$j5d6+}?O$tw z)&i{sS_`xmXf4oMptZm^Z-M#!goNt&yd^cXq=pkTiI&u`%WqL<)Geu@AZE0rh7B8{ z{;73`E7ADZ;6tf;z=I!(A40%5DO?TTk{SxuMN4XENezc|#+KCZg=EN<)ZlJ@t!PON zEvZ40UN^sEw4{cbG24kew=Anh?;o@Y>2H{jis<^npebXxmaaKb)w`y9qc@>s?TH*RwDvljB5dt-t5vJ` NTc_F!zE?%(`U6dOD#ic+ literal 0 HcmV?d00001 diff --git a/litellm/tests/test_langfuse.py b/litellm/tests/test_langfuse.py index 017d7e1e2..a5df49624 100644 --- a/litellm/tests/test_langfuse.py +++ b/litellm/tests/test_langfuse.py @@ -9,33 +9,105 @@ from litellm import completion import litellm litellm.num_retries = 3 litellm.success_callback = ["langfuse"] -# litellm.set_verbose = True +os.environ["LANGFUSE_DEBUG"] = "True" import time import pytest +def search_logs(log_file_path): + """ + Searches the given log file for logs containing the "/api/public" string. + + Parameters: + - log_file_path (str): The path to the log file to be searched. + + Returns: + - None + + Raises: + - Exception: If there are any bad logs found in the log file. + """ + import re + print("\n searching logs") + bad_logs = [] + good_logs = [] + all_logs = [] + try: + with open(log_file_path, 'r') as log_file: + lines = log_file.readlines() + for line in lines: + all_logs.append(line.strip()) + if "/api/public" in line: + print("Found log with /api/public:") + print(line.strip()) + print("\n\n") + match = re.search(r'receive_response_headers.complete return_value=\(b\'HTTP/1.1\', (\d+),', line) + if match: + status_code = int(match.group(1)) + if status_code != 200 and status_code != 201: + print("got a BAD log") + bad_logs.append(line.strip()) + else: + + good_logs.append(line.strip()) + print("\nBad Logs") + print(bad_logs) + if len(bad_logs)>0: + raise Exception(f"bad logs, Bad logs = {bad_logs}") + + print("\nGood Logs") + print(good_logs) + if len(good_logs) <= 0: + raise Exception(f"There were no Good Logs from Langfuse. No logs with /api/public status 200. \nAll logs:{all_logs}") + + except Exception as e: + raise e + +def pre_langfuse_setup(): + """ + Set up the logging for the 'pre_langfuse_setup' function. + """ + # sends logs to langfuse.log + import logging + # Configure the logging to write to a file + logging.basicConfig(filename="langfuse.log", level=logging.DEBUG) + logger = logging.getLogger() + + # Add a FileHandler to the logger + file_handler = logging.FileHandler("langfuse.log", mode='w') + file_handler.setLevel(logging.DEBUG) + logger.addHandler(file_handler) + return + + def test_langfuse_logging_async(): try: + pre_langfuse_setup() litellm.set_verbose = True async def _test_langfuse(): return await litellm.acompletion( model="gpt-3.5-turbo", messages=[{"role": "user", "content":"This is a test"}], - max_tokens=1000, + max_tokens=100, temperature=0.7, timeout=5, ) response = asyncio.run(_test_langfuse()) print(f"response: {response}") + + time.sleep(2) + # check langfuse.log to see if there was a failed response + search_logs("langfuse.log") except litellm.Timeout as e: pass except Exception as e: pytest.fail(f"An exception occurred - {e}") -# test_langfuse_logging_async() +test_langfuse_logging_async() def test_langfuse_logging(): try: - # litellm.set_verbose = True + pre_langfuse_setup() + litellm.set_verbose = True response = completion(model="claude-instant-1.2", messages=[{ "role": "user", @@ -43,19 +115,23 @@ def test_langfuse_logging(): }], max_tokens=10, temperature=0.2, - metadata={"langfuse/key": "foo"} ) print(response) + time.sleep(2) + # check langfuse.log to see if there was a failed response + search_logs("langfuse.log") + except litellm.Timeout as e: pass except Exception as e: - print(e) + pytest.fail(f"An exception occurred - {e}") test_langfuse_logging() def test_langfuse_logging_stream(): try: + pre_langfuse_setup() litellm.set_verbose=True response = completion(model="anyscale/meta-llama/Llama-2-7b-chat-hf", messages=[{ @@ -99,7 +175,7 @@ def test_langfuse_logging_custom_generation_name(): pytest.fail(f"An exception occurred - {e}") print(e) -test_langfuse_logging_custom_generation_name() +# test_langfuse_logging_custom_generation_name() def test_langfuse_logging_function_calling(): function1 = [ From 9909e4917137c6beb8f82d6787a7b6836dcfd905 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Sat, 9 Dec 2023 22:27:04 -0800 Subject: [PATCH 357/460] (test) langfuse --- litellm/tests/test_langfuse.py | 1 - 1 file changed, 1 deletion(-) diff --git a/litellm/tests/test_langfuse.py b/litellm/tests/test_langfuse.py index a5df49624..5563f94dd 100644 --- a/litellm/tests/test_langfuse.py +++ b/litellm/tests/test_langfuse.py @@ -131,7 +131,6 @@ test_langfuse_logging() def test_langfuse_logging_stream(): try: - pre_langfuse_setup() litellm.set_verbose=True response = completion(model="anyscale/meta-llama/Llama-2-7b-chat-hf", messages=[{ From d46a52b8f4c3b3c78c939a63c4e896d0588a86c4 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Sat, 9 Dec 2023 22:33:41 -0800 Subject: [PATCH 358/460] (test) langfuse --- litellm/tests/langfuse.log | Bin 15600 -> 15582 bytes litellm/tests/test_langfuse.py | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/litellm/tests/langfuse.log b/litellm/tests/langfuse.log index 79a18140f260503397014d6b0f77bc83fdd19f53..f1c2195dfd93b63220185ab7adb151326d7de43b 100644 GIT binary patch literal 15582 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 NTc_F!zE?%(`U6dOD#ic+ diff --git a/litellm/tests/test_langfuse.py b/litellm/tests/test_langfuse.py index 5563f94dd..07db7553e 100644 --- a/litellm/tests/test_langfuse.py +++ b/litellm/tests/test_langfuse.py @@ -94,7 +94,7 @@ def test_langfuse_logging_async(): response = asyncio.run(_test_langfuse()) print(f"response: {response}") - time.sleep(2) + time.sleep(5) # check langfuse.log to see if there was a failed response search_logs("langfuse.log") except litellm.Timeout as e: @@ -117,7 +117,7 @@ def test_langfuse_logging(): temperature=0.2, ) print(response) - time.sleep(2) + time.sleep(5) # check langfuse.log to see if there was a failed response search_logs("langfuse.log") From 127f25703a6c08778ca9940bd6539d6ad4327313 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Sat, 9 Dec 2023 22:35:09 -0800 Subject: [PATCH 359/460] (fix) proxy /model/info --- litellm/proxy/proxy_server.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index a82723051..259bf23f2 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -1227,8 +1227,8 @@ async def add_new_model(model_params: ModelParams): traceback.print_exc() raise HTTPException(status_code=500, detail=f"Internal Server Error: {str(e)}") -#### [BETA] - This is a beta endpoint, format might change based on user feedback https://github.com/BerriAI/litellm/issues/933. If you need a stable endpoint use /model/info -@router.get("/v1/model/info", description="Provides more info about each model in /models, including config.yaml descriptions (except api key and api base)", tags=["model management"], dependencies=[Depends(user_api_key_auth)]) +#### [BETA] - This is a beta endpoint, format might change based on user feedback https://github.com/BerriAI/litellm/issues/933. If you need a stable endpoint use v1/model/info +@router.get("/model/info", description="Provides more info about each model in /models, including config.yaml descriptions (except api key and api base)", tags=["model management"], dependencies=[Depends(user_api_key_auth)]) async def model_info_v1(request: Request): global llm_model_list, general_settings, user_config_file_path # Load existing config @@ -1256,7 +1256,7 @@ async def model_info_v1(request: Request): #### [BETA] - This is a beta endpoint, format might change based on user feedback. - https://github.com/BerriAI/litellm/issues/933 -@router.get("/model/info", description="Provides more info about each model in /models, including config.yaml descriptions (except api key and api base)", tags=["model management"], dependencies=[Depends(user_api_key_auth)]) +@router.get("v1/model/info", description="Provides more info about each model in /models, including config.yaml descriptions (except api key and api base)", tags=["model management"], dependencies=[Depends(user_api_key_auth)]) async def model_info(request: Request): global llm_model_list, general_settings, user_config_file_path # Load existing config From 3c8603f148977c83302809bf031e590d1d067aa3 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Sat, 9 Dec 2023 22:44:02 -0800 Subject: [PATCH 360/460] (test) langfuse --- litellm/tests/test_langfuse.py | 3 ++- litellm/utils.py | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/litellm/tests/test_langfuse.py b/litellm/tests/test_langfuse.py index 07db7553e..01e411fb4 100644 --- a/litellm/tests/test_langfuse.py +++ b/litellm/tests/test_langfuse.py @@ -34,6 +34,7 @@ def search_logs(log_file_path): try: with open(log_file_path, 'r') as log_file: lines = log_file.readlines() + print(f"searching logslines: {lines}") for line in lines: all_logs.append(line.strip()) if "/api/public" in line: @@ -94,7 +95,7 @@ def test_langfuse_logging_async(): response = asyncio.run(_test_langfuse()) print(f"response: {response}") - time.sleep(5) + time.sleep(2) # check langfuse.log to see if there was a failed response search_logs("langfuse.log") except litellm.Timeout as e: diff --git a/litellm/utils.py b/litellm/utils.py index 2b23d6a78..6a9669db8 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -959,7 +959,8 @@ class Logging: else: print_verbose("reaches langfuse for streaming logging!") result = kwargs["complete_streaming_response"] - + if langFuseLogger is None: + langFuseLogger = LangFuseLogger() langFuseLogger.log_event( kwargs=kwargs, response_obj=result, From 22f04e3b3361748bfde0c4c58bc2b5c2740583cd Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Sat, 9 Dec 2023 22:38:06 -0800 Subject: [PATCH 361/460] fix(proxy_server.py): fix /model/new adding new model issue --- litellm/proxy/_types.py | 89 +++++++++++++++++++---------------- litellm/proxy/proxy_server.py | 8 ++-- 2 files changed, 54 insertions(+), 43 deletions(-) diff --git a/litellm/proxy/_types.py b/litellm/proxy/_types.py index 68709f34d..7ab0d5fe5 100644 --- a/litellm/proxy/_types.py +++ b/litellm/proxy/_types.py @@ -2,8 +2,21 @@ from pydantic import BaseModel, Extra, Field, root_validator from typing import Optional, List, Union, Dict, Literal from datetime import datetime import uuid, json + +class LiteLLMBase(BaseModel): + """ + Implements default functions, all pydantic objects should have. + """ + def json(self, **kwargs): + try: + return self.model_dump() # noqa + except: + # if using pydantic v1 + return self.dict() + + ######### Request Class Definition ###### -class ProxyChatCompletionRequest(BaseModel): +class ProxyChatCompletionRequest(LiteLLMBase): model: str messages: List[Dict[str, str]] temperature: Optional[float] = None @@ -38,16 +51,16 @@ class ProxyChatCompletionRequest(BaseModel): class Config: extra='allow' # allow params not defined here, these fall in litellm.completion(**kwargs) -class ModelInfoDelete(BaseModel): +class ModelInfoDelete(LiteLLMBase): id: Optional[str] -class ModelInfo(BaseModel): +class ModelInfo(LiteLLMBase): id: Optional[str] mode: Optional[Literal['embedding', 'chat', 'completion']] - input_cost_per_token: Optional[float] - output_cost_per_token: Optional[float] - max_tokens: Optional[int] + input_cost_per_token: Optional[float] = 0.0 + output_cost_per_token: Optional[float] = 0.0 + max_tokens: Optional[int] = 2048 # assume 2048 if not set # for azure models we need users to specify the base model, one azure you can call deployments - azure/my-random-model # we look up the base model in model_prices_and_context_window.json @@ -65,38 +78,41 @@ class ModelInfo(BaseModel): class Config: extra = Extra.allow # Allow extra fields protected_namespaces = () + - # @root_validator(pre=True) - # def set_model_info(cls, values): - # if values.get("id") is None: - # values.update({"id": str(uuid.uuid4())}) - # if values.get("mode") is None: - # values.update({"mode": str(uuid.uuid4())}) - # return values + @root_validator(pre=True) + def set_model_info(cls, values): + if values.get("id") is None: + values.update({"id": str(uuid.uuid4())}) + if values.get("mode") is None: + values.update({"mode": None}) + if values.get("input_cost_per_token") is None: + values.update({"input_cost_per_token": None}) + if values.get("output_cost_per_token") is None: + values.update({"output_cost_per_token": None}) + if values.get("max_tokens") is None: + values.update({"max_tokens": None}) + if values.get("base_model") is None: + values.update({"base_model": None}) + return values -class ModelParams(BaseModel): +class ModelParams(LiteLLMBase): model_name: str litellm_params: dict - model_info: Optional[ModelInfo]=None + model_info: ModelInfo - # def __init__(self, model_name: str, litellm_params: dict, model_info: Optional[ModelInfo] = None): - # self.model_name = model_name - # self.litellm_params = litellm_params - # self.model_info = model_info if model_info else ModelInfo() - # super.__init__(model_name=self.model_name, litellm_params=self.litellm_params, model_info=self.model_info) - class Config: protected_namespaces = () - # @root_validator(pre=True) - # def set_model_info(cls, values): - # if values.get("model_info") is None: - # values.update({"model_info": ModelInfo()}) - # return values + @root_validator(pre=True) + def set_model_info(cls, values): + if values.get("model_info") is None: + values.update({"model_info": ModelInfo()}) + return values -class GenerateKeyRequest(BaseModel): +class GenerateKeyRequest(LiteLLMBase): duration: Optional[str] = "1h" models: Optional[list] = [] aliases: Optional[dict] = {} @@ -105,26 +121,19 @@ class GenerateKeyRequest(BaseModel): user_id: Optional[str] = None max_parallel_requests: Optional[int] = None - def json(self, **kwargs): - try: - return self.model_dump() # noqa - except: - # if using pydantic v1 - return self.dict() - -class GenerateKeyResponse(BaseModel): +class GenerateKeyResponse(LiteLLMBase): key: str expires: datetime user_id: str -class _DeleteKeyObject(BaseModel): +class _DeleteKeyObject(LiteLLMBase): key: str -class DeleteKeyRequest(BaseModel): +class DeleteKeyRequest(LiteLLMBase): keys: List[_DeleteKeyObject] -class UserAPIKeyAuth(BaseModel): # the expected response object for user api key auth +class UserAPIKeyAuth(LiteLLMBase): # the expected response object for user api key auth """ Return the row in the db """ @@ -137,7 +146,7 @@ class UserAPIKeyAuth(BaseModel): # the expected response object for user api key max_parallel_requests: Optional[int] = None duration: str = "1h" -class ConfigGeneralSettings(BaseModel): +class ConfigGeneralSettings(LiteLLMBase): """ Documents all the fields supported by `general_settings` in config.yaml """ @@ -153,7 +162,7 @@ class ConfigGeneralSettings(BaseModel): health_check_interval: int = Field(300, description="background health check interval in seconds") -class ConfigYAML(BaseModel): +class ConfigYAML(LiteLLMBase): """ Documents all the fields supported by the config.yaml """ diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 259bf23f2..259ead7c9 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -1207,10 +1207,12 @@ async def add_new_model(model_params: ModelParams): print_verbose(f"Loaded config: {config}") # Add the new model to the config + model_info = model_params.model_info.json() + model_info = {k: v for k, v in model_info.items() if v is not None} config['model_list'].append({ 'model_name': model_params.model_name, 'litellm_params': model_params.litellm_params, - 'model_info': model_params.model_info + 'model_info': model_info }) # Save the updated config @@ -1227,7 +1229,7 @@ async def add_new_model(model_params: ModelParams): traceback.print_exc() raise HTTPException(status_code=500, detail=f"Internal Server Error: {str(e)}") -#### [BETA] - This is a beta endpoint, format might change based on user feedback https://github.com/BerriAI/litellm/issues/933. If you need a stable endpoint use v1/model/info +#### [BETA] - This is a beta endpoint, format might change based on user feedback https://github.com/BerriAI/litellm/issues/933. If you need a stable endpoint use /model/info @router.get("/model/info", description="Provides more info about each model in /models, including config.yaml descriptions (except api key and api base)", tags=["model management"], dependencies=[Depends(user_api_key_auth)]) async def model_info_v1(request: Request): global llm_model_list, general_settings, user_config_file_path @@ -1256,7 +1258,7 @@ async def model_info_v1(request: Request): #### [BETA] - This is a beta endpoint, format might change based on user feedback. - https://github.com/BerriAI/litellm/issues/933 -@router.get("v1/model/info", description="Provides more info about each model in /models, including config.yaml descriptions (except api key and api base)", tags=["model management"], dependencies=[Depends(user_api_key_auth)]) +@router.get("/v1/model/info", description="Provides more info about each model in /models, including config.yaml descriptions (except api key and api base)", tags=["model management"], dependencies=[Depends(user_api_key_auth)]) async def model_info(request: Request): global llm_model_list, general_settings, user_config_file_path # Load existing config From 1ef9bfa125348c0287edc11f13aee900f2121164 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Sat, 9 Dec 2023 22:43:27 -0800 Subject: [PATCH 362/460] test(test_proxy_server.py): add testing for /model/new endpoint --- litellm/tests/test_proxy_server.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/litellm/tests/test_proxy_server.py b/litellm/tests/test_proxy_server.py index bc22c384f..e3094237b 100644 --- a/litellm/tests/test_proxy_server.py +++ b/litellm/tests/test_proxy_server.py @@ -122,7 +122,7 @@ def test_embedding(client): # Run the test # test_embedding() -@pytest.mark.skip(reason="hitting yaml load issues on circle-ci") +# @pytest.mark.skip(reason="hitting yaml load issues on circle-ci") def test_add_new_model(client): global headers try: @@ -142,8 +142,8 @@ def test_add_new_model(client): print(f"response: {result}") model_info = None for m in result["data"]: - if m["id"]["model_name"] == "test_openai_models": - model_info = m["id"]["model_info"] + if m["model_name"] == "test_openai_models": + model_info = m["model_info"] assert model_info["description"] == "this is a test openai model" except Exception as e: pytest.fail(f"LiteLLM Proxy test failed. Exception {str(e)}") From ee53139ce2c3cfa162b625ce858d33b7f00b502a Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Sat, 9 Dec 2023 22:47:42 -0800 Subject: [PATCH 363/460] (fix) langfuse test --- litellm/utils.py | 1 + 1 file changed, 1 insertion(+) diff --git a/litellm/utils.py b/litellm/utils.py index 6a9669db8..1779e0575 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -947,6 +947,7 @@ class Logging: print_verbose=print_verbose, ) if callback == "langfuse": + global langFuseLogger print_verbose("reaches langfuse for logging!") kwargs = {} for k, v in self.model_call_details.items(): From f6a8ade91abc9b3efa076d7daeae52a43ee87221 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Sat, 9 Dec 2023 22:52:02 -0800 Subject: [PATCH 364/460] (test) langfuse --- litellm/tests/test_langfuse.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/litellm/tests/test_langfuse.py b/litellm/tests/test_langfuse.py index 01e411fb4..ebbc003c2 100644 --- a/litellm/tests/test_langfuse.py +++ b/litellm/tests/test_langfuse.py @@ -79,7 +79,7 @@ def pre_langfuse_setup(): logger.addHandler(file_handler) return - +@pytest.mark.skip(reason="beta test - checking langfuse output") def test_langfuse_logging_async(): try: pre_langfuse_setup() @@ -105,6 +105,7 @@ def test_langfuse_logging_async(): test_langfuse_logging_async() +@pytest.mark.skip(reason="beta test - checking langfuse output") def test_langfuse_logging(): try: pre_langfuse_setup() @@ -129,7 +130,7 @@ def test_langfuse_logging(): test_langfuse_logging() - +@pytest.mark.skip(reason="beta test - checking langfuse output") def test_langfuse_logging_stream(): try: litellm.set_verbose=True @@ -153,6 +154,7 @@ def test_langfuse_logging_stream(): # test_langfuse_logging_stream() +@pytest.mark.skip(reason="beta test - checking langfuse output") def test_langfuse_logging_custom_generation_name(): try: litellm.set_verbose=True @@ -176,7 +178,7 @@ def test_langfuse_logging_custom_generation_name(): print(e) # test_langfuse_logging_custom_generation_name() - +@pytest.mark.skip(reason="beta test - checking langfuse output") def test_langfuse_logging_function_calling(): function1 = [ { From 7977f92bd2cae7b39576be34246e60a50d6d67d1 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Sat, 9 Dec 2023 22:58:23 -0800 Subject: [PATCH 365/460] (test) langfuse --- litellm/tests/test_langfuse.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/litellm/tests/test_langfuse.py b/litellm/tests/test_langfuse.py index ebbc003c2..02abbf656 100644 --- a/litellm/tests/test_langfuse.py +++ b/litellm/tests/test_langfuse.py @@ -95,9 +95,9 @@ def test_langfuse_logging_async(): response = asyncio.run(_test_langfuse()) print(f"response: {response}") - time.sleep(2) - # check langfuse.log to see if there was a failed response - search_logs("langfuse.log") + # time.sleep(2) + # # check langfuse.log to see if there was a failed response + # search_logs("langfuse.log") except litellm.Timeout as e: pass except Exception as e: @@ -119,9 +119,9 @@ def test_langfuse_logging(): temperature=0.2, ) print(response) - time.sleep(5) - # check langfuse.log to see if there was a failed response - search_logs("langfuse.log") + # time.sleep(5) + # # check langfuse.log to see if there was a failed response + # search_logs("langfuse.log") except litellm.Timeout as e: pass From 80821f62d19fa0e4b092fd52c27aef3db11c851d Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Sat, 9 Dec 2023 23:03:40 -0800 Subject: [PATCH 366/460] docs(logging.md): add sentry logging to proxy docs --- docs/my-website/docs/proxy/logging.md | 41 ++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/docs/my-website/docs/proxy/logging.md b/docs/my-website/docs/proxy/logging.md index c70c8680f..253c299f6 100644 --- a/docs/my-website/docs/proxy/logging.md +++ b/docs/my-website/docs/proxy/logging.md @@ -1,4 +1,5 @@ -# Logging - Custom Callbacks, OpenTelemetry, Langfuse +# Logging - Custom Callbacks, OpenTelemetry, Langfuse, Sentry + Log Proxy Input, Output, Exceptions using Custom Callbacks, Langfuse, OpenTelemetry ## Custom Callback Class [Async] @@ -486,3 +487,41 @@ litellm --test Expected output on Langfuse + +## Logging Proxy Input/Output - Sentry + +If api calls fail (llm/database) you can log those to Sentry: + +**Step 1** Install Sentry +```shell +pip install --upgrade sentry-sdk +``` + +**Step 2**: Save your Sentry_DSN and add `litellm_settings`: `failure_callback` +```shell +export SENTRY_DSN="your-sentry-dsn" +``` + +```yaml +model_list: + - model_name: gpt-3.5-turbo + litellm_params: + model: gpt-3.5-turbo +litellm_settings: + # other settings + failure_callback: ["sentry"] +general_settings: + database_url: "my-bad-url" # set a fake url to trigger a sentry exception +``` + +**Step 3**: Start the proxy, make a test request + +Start proxy +```shell +litellm --config config.yaml --debug +``` + +Test Request +``` +litellm --test +``` From c5ce11541b1313f34a9fc56f64c1ad5add19e40f Mon Sep 17 00:00:00 2001 From: chabala98 Date: Mon, 11 Dec 2023 14:42:05 +0100 Subject: [PATCH 367/460] adfix: ded **optional_params in input data when system prompt is available (allows to papass other optional params apart from sys prompt) --- litellm/llms/replicate.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/litellm/llms/replicate.py b/litellm/llms/replicate.py index 874b31bd6..b3cd182a9 100644 --- a/litellm/llms/replicate.py +++ b/litellm/llms/replicate.py @@ -232,7 +232,8 @@ def completion( if system_prompt is not None: input_data = { "prompt": prompt, - "system_prompt": system_prompt + "system_prompt": system_prompt, + **optional_params } # Otherwise, use the prompt as is else: From 112881cbb2177fa4f18962c987932770c59da6cb Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Mon, 11 Dec 2023 07:58:49 -0800 Subject: [PATCH 368/460] test(test_completion.py): assert completion cost > 0.0 --- litellm/tests/test_completion.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index 3d8b9a1b2..473e08599 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -696,11 +696,12 @@ def test_completion_azure(): print(response) cost = completion_cost(completion_response=response) + assert cost > 0.0 print("Cost for azure completion request", cost) except Exception as e: pytest.fail(f"Error occurred: {e}") -# test_completion_azure() +test_completion_azure() def test_azure_openai_ad_token(): # this tests if the azure ad token is set in the request header @@ -1013,6 +1014,7 @@ def test_completion_together_ai(): # Add any assertions here to check the response print(response) cost = completion_cost(completion_response=response) + assert cost > 0.0 print("Cost for completion call together-computer/llama-2-70b: ", f"${float(cost):.10f}") except Exception as e: pytest.fail(f"Error occurred: {e}") From 9796877f9597c645be5f337db1e5e3fad234ecb1 Mon Sep 17 00:00:00 2001 From: Krish Dholakia Date: Mon, 11 Dec 2023 08:30:55 -0800 Subject: [PATCH 369/460] Update README.md --- README.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/README.md b/README.md index cc5c1a3a5..82cdceed5 100644 --- a/README.md +++ b/README.md @@ -62,6 +62,22 @@ response = completion(model="command-nightly", messages=messages) print(response) ``` +## Async ([Docs](https://docs.litellm.ai/docs/completion/stream#async-completion)) + +```python +from litellm import acompletion +import asyncio + +async def test_get_response(): + user_message = "Hello, how are you?" + messages = [{"content": user_message, "role": "user"}] + response = await acompletion(model="gpt-3.5-turbo", messages=messages) + return response + +response = asyncio.run(test_get_response()) +print(response) +``` + ## Streaming ([Docs](https://docs.litellm.ai/docs/completion/stream)) liteLLM supports streaming the model response back, pass `stream=True` to get a streaming iterator in response. Streaming is supported for all models (Bedrock, Huggingface, TogetherAI, Azure, OpenAI, etc.) From 8cc23b72ec55e4bd38d1998940e01fe57f825f6f Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 08:32:29 -0800 Subject: [PATCH 370/460] (feat) caching - bedrock --- litellm/utils.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/litellm/utils.py b/litellm/utils.py index 1779e0575..5494b00c7 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -1489,6 +1489,8 @@ def client(original_function): # checking cache if (litellm.cache != None or litellm.caching or litellm.caching_with_models): print_verbose(f"Checking Cache") + preset_cache_key = litellm.cache.get_cache_key(*args, **kwargs) + kwargs["preset_cache_key"] = preset_cache_key # for streaming calls, we need to pass the preset_cache_key cached_result = litellm.cache.get_cache(*args, **kwargs) if cached_result != None: if "detail" in cached_result: @@ -2076,6 +2078,7 @@ def get_litellm_params( model_info=None, proxy_server_request=None, acompletion=None, + preset_cache_key = None ): litellm_params = { "acompletion": acompletion, @@ -2092,6 +2095,7 @@ def get_litellm_params( "metadata": metadata, "model_info": model_info, "proxy_server_request": proxy_server_request, + "preset_cache_key": preset_cache_key, "stream_response": {} # litellm_call_id: ModelResponse Dict } @@ -5719,7 +5723,10 @@ class CustomStreamWrapper: return processed_chunk raise StopAsyncIteration else: # temporary patch for non-aiohttp async calls - return next(self) + # example - boto3 bedrock llms + processed_chunk = next(self) + asyncio.create_task(self.logging_obj.async_success_handler(processed_chunk,)) + return processed_chunk except Exception as e: # Handle any exceptions that might occur during streaming raise StopAsyncIteration From 4b26c550c51274b47664f1b7d3abbec86f579cc2 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 08:43:00 -0800 Subject: [PATCH 371/460] (test) bedrock caching + stream --- litellm/tests/test_caching.py | 38 +++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/litellm/tests/test_caching.py b/litellm/tests/test_caching.py index cce923b6c..b8c302806 100644 --- a/litellm/tests/test_caching.py +++ b/litellm/tests/test_caching.py @@ -276,6 +276,44 @@ def test_redis_cache_acompletion_stream(): raise e # test_redis_cache_acompletion_stream() +def test_redis_cache_acompletion_stream_bedrock(): + import asyncio + try: + litellm.set_verbose = True + random_word = generate_random_word() + messages = [{"role": "user", "content": f"write a one sentence poem about: {random_word}"}] + litellm.cache = Cache(type="redis", host=os.environ['REDIS_HOST'], port=os.environ['REDIS_PORT'], password=os.environ['REDIS_PASSWORD']) + print("test for caching, streaming + completion") + response_1_content = "" + response_2_content = "" + + async def call1(): + nonlocal response_1_content + response1 = await litellm.acompletion(model="bedrock/anthropic.claude-v1", messages=messages, max_tokens=40, temperature=1, stream=True) + async for chunk in response1: + print(chunk) + response_1_content += chunk.choices[0].delta.content or "" + print(response_1_content) + asyncio.run(call1()) + time.sleep(0.5) + print("\n\n Response 1 content: ", response_1_content, "\n\n") + + async def call2(): + nonlocal response_2_content + response2 = await litellm.acompletion(model="bedrock/anthropic.claude-v1", messages=messages, max_tokens=40, temperature=1, stream=True) + async for chunk in response2: + print(chunk) + response_2_content += chunk.choices[0].delta.content or "" + print(response_2_content) + asyncio.run(call2()) + print("\nresponse 1", response_1_content) + print("\nresponse 2", response_2_content) + assert response_1_content == response_2_content, f"Response 1 != Response 2. Same params, Response 1{response_1_content} != Response 2{response_2_content}" + litellm.cache = None + except Exception as e: + print(e) + raise e +# test_redis_cache_acompletion_stream_bedrock() # redis cache with custom keys def custom_get_cache_key(*args, **kwargs): # return key to use for your cache: From ee3c9d19a25453bd207863c49dbd2b2afe35de30 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 08:43:34 -0800 Subject: [PATCH 372/460] (feat) caching + stream - bedrock --- litellm/caching.py | 10 +++++++++- litellm/main.py | 8 +++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/litellm/caching.py b/litellm/caching.py index 1d993927b..556ab4fb5 100644 --- a/litellm/caching.py +++ b/litellm/caching.py @@ -222,7 +222,14 @@ class Cache: Returns: str: The cache key generated from the arguments, or None if no cache key could be generated. """ - cache_key ="" + cache_key = "" + print_verbose(f"\nGetting Cache key. Kwargs: {kwargs}") + + # for streaming, we use preset_cache_key. It's created in wrapper(), we do this because optional params like max_tokens, get transformed for bedrock -> max_new_tokens + if kwargs.get("litellm_params", {}).get("preset_cache_key", None) is not None: + print_verbose(f"\nReturning preset cache key: {cache_key}") + return kwargs.get("litellm_params", {}).get("preset_cache_key", None) + # sort kwargs by keys, since model: [gpt-4, temperature: 0.2, max_tokens: 200] == [temperature: 0.2, max_tokens: 200, model: gpt-4] completion_kwargs = ["model", "messages", "temperature", "top_p", "n", "stop", "max_tokens", "presence_penalty", "frequency_penalty", "logit_bias", "user", "response_format", "seed", "tools", "tool_choice"] for param in completion_kwargs: @@ -245,6 +252,7 @@ class Cache: continue # ignore None params param_value = kwargs[param] cache_key+= f"{str(param)}: {str(param_value)}" + print_verbose(f"\nCreated cache key: {cache_key}") return cache_key def generate_streaming_content(self, content): diff --git a/litellm/main.py b/litellm/main.py index f97659a32..e6642d1d1 100644 --- a/litellm/main.py +++ b/litellm/main.py @@ -344,13 +344,14 @@ def completion( final_prompt_value = kwargs.get("final_prompt_value", None) bos_token = kwargs.get("bos_token", None) eos_token = kwargs.get("eos_token", None) + preset_cache_key = kwargs.get("preset_cache_key", None) hf_model_name = kwargs.get("hf_model_name", None) ### ASYNC CALLS ### acompletion = kwargs.get("acompletion", False) client = kwargs.get("client", None) ######## end of unpacking kwargs ########### openai_params = ["functions", "function_call", "temperature", "temperature", "top_p", "n", "stream", "stop", "max_tokens", "presence_penalty", "frequency_penalty", "logit_bias", "user", "request_timeout", "api_base", "api_version", "api_key", "deployment_id", "organization", "base_url", "default_headers", "timeout", "response_format", "seed", "tools", "tool_choice", "max_retries"] - litellm_params = ["metadata", "acompletion", "caching", "return_async", "mock_response", "api_key", "api_version", "api_base", "force_timeout", "logger_fn", "verbose", "custom_llm_provider", "litellm_logging_obj", "litellm_call_id", "use_client", "id", "fallbacks", "azure", "headers", "model_list", "num_retries", "context_window_fallback_dict", "roles", "final_prompt_value", "bos_token", "eos_token", "request_timeout", "complete_response", "self", "client", "rpm", "tpm", "input_cost_per_token", "output_cost_per_token", "hf_model_name", "model_info", "proxy_server_request"] + litellm_params = ["metadata", "acompletion", "caching", "return_async", "mock_response", "api_key", "api_version", "api_base", "force_timeout", "logger_fn", "verbose", "custom_llm_provider", "litellm_logging_obj", "litellm_call_id", "use_client", "id", "fallbacks", "azure", "headers", "model_list", "num_retries", "context_window_fallback_dict", "roles", "final_prompt_value", "bos_token", "eos_token", "request_timeout", "complete_response", "self", "client", "rpm", "tpm", "input_cost_per_token", "output_cost_per_token", "hf_model_name", "model_info", "proxy_server_request", "preset_cache_key"] default_params = openai_params + litellm_params non_default_params = {k: v for k,v in kwargs.items() if k not in default_params} # model-specific params - pass them straight to the model/provider if mock_response: @@ -460,7 +461,8 @@ def completion( completion_call_id=id, metadata=metadata, model_info=model_info, - proxy_server_request=proxy_server_request + proxy_server_request=proxy_server_request, + preset_cache_key=preset_cache_key ) logging.update_environment_variables(model=model, user=user, optional_params=optional_params, litellm_params=litellm_params) if custom_llm_provider == "azure": @@ -1784,7 +1786,7 @@ def embedding( proxy_server_request = kwargs.get("proxy_server_request", None) aembedding = kwargs.pop("aembedding", None) openai_params = ["functions", "function_call", "temperature", "temperature", "top_p", "n", "stream", "stop", "max_tokens", "presence_penalty", "frequency_penalty", "logit_bias", "user", "request_timeout", "api_base", "api_version", "api_key", "deployment_id", "organization", "base_url", "default_headers", "timeout", "response_format", "seed", "tools", "tool_choice", "max_retries", "encoding_format"] - litellm_params = ["metadata", "acompletion", "caching", "return_async", "mock_response", "api_key", "api_version", "api_base", "force_timeout", "logger_fn", "verbose", "custom_llm_provider", "litellm_logging_obj", "litellm_call_id", "use_client", "id", "fallbacks", "azure", "headers", "model_list", "num_retries", "context_window_fallback_dict", "roles", "final_prompt_value", "bos_token", "eos_token", "request_timeout", "complete_response", "self", "client", "rpm", "tpm", "input_cost_per_token", "output_cost_per_token", "hf_model_name", "proxy_server_request", "model_info"] + litellm_params = ["metadata", "acompletion", "caching", "return_async", "mock_response", "api_key", "api_version", "api_base", "force_timeout", "logger_fn", "verbose", "custom_llm_provider", "litellm_logging_obj", "litellm_call_id", "use_client", "id", "fallbacks", "azure", "headers", "model_list", "num_retries", "context_window_fallback_dict", "roles", "final_prompt_value", "bos_token", "eos_token", "request_timeout", "complete_response", "self", "client", "rpm", "tpm", "input_cost_per_token", "output_cost_per_token", "hf_model_name", "proxy_server_request", "model_info", "preset_cache_key"] default_params = openai_params + litellm_params non_default_params = {k: v for k,v in kwargs.items() if k not in default_params} # model-specific params - pass them straight to the model/provider optional_params = {} From 43b0da3ebcc63dfa080ad6ad13b132ee041a9c97 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 09:06:27 -0800 Subject: [PATCH 373/460] (docs) - proxy_config.yaml --- litellm/proxy/proxy_config.yaml | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/litellm/proxy/proxy_config.yaml b/litellm/proxy/proxy_config.yaml index 1c096aac7..0180d232e 100644 --- a/litellm/proxy/proxy_config.yaml +++ b/litellm/proxy/proxy_config.yaml @@ -11,8 +11,10 @@ model_list: output_cost_per_token: 0.00003 max_tokens: 4096 base_model: gpt-3.5-turbo - - - model_name: openai-gpt-3.5 + - model_name: BEDROCK_GROUP + litellm_params: + model: bedrock/cohere.command-text-v14 + - model_name: Azure OpenAI GPT-4 Canada-East (External) litellm_params: model: gpt-3.5-turbo api_key: os.environ/OPENAI_API_KEY @@ -41,11 +43,12 @@ model_list: mode: completion litellm_settings: + # cache: True # setting callback class # callbacks: custom_callbacks.proxy_handler_instance # sets litellm.callbacks = [proxy_handler_instance] - model_group_alias_map: {"gpt-4": "openai-gpt-3.5"} # all requests with gpt-4 model_name, get sent to openai-gpt-3.5 - general_settings: + +environment_variables: # otel: True # OpenTelemetry Logger # master_key: sk-1234 # [OPTIONAL] Only use this if you to require all calls to contain this key (Authorization: Bearer sk-1234) From 070ca682cfa1a81bde02b8910ad930efe665c1ca Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 09:19:07 -0800 Subject: [PATCH 374/460] =?UTF-8?q?bump:=20version=201.12.3=20=E2=86=92=20?= =?UTF-8?q?1.12.4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- litellm/tests/test_caching.py | 2 +- pyproject.toml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/litellm/tests/test_caching.py b/litellm/tests/test_caching.py index b8c302806..16ff4a6dc 100644 --- a/litellm/tests/test_caching.py +++ b/litellm/tests/test_caching.py @@ -274,7 +274,7 @@ def test_redis_cache_acompletion_stream(): except Exception as e: print(e) raise e -# test_redis_cache_acompletion_stream() +test_redis_cache_acompletion_stream() def test_redis_cache_acompletion_stream_bedrock(): import asyncio diff --git a/pyproject.toml b/pyproject.toml index 62ca2f5a0..ea09088af 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "litellm" -version = "1.12.3" +version = "1.12.4" description = "Library to easily interface with LLM API providers" authors = ["BerriAI"] license = "MIT License" @@ -55,7 +55,7 @@ requires = ["poetry-core", "wheel"] build-backend = "poetry.core.masonry.api" [tool.commitizen] -version = "1.12.3" +version = "1.12.4" version_files = [ "pyproject.toml:^version" ] From 91f09365e84122cba3b85b53af2abfb2777d6af7 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 09:39:25 -0800 Subject: [PATCH 375/460] (feat) access metadata in embedding kwargs() --- litellm/main.py | 3 ++- litellm/tests/test_amazing_proxy_custom_logger.py | 7 ++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/litellm/main.py b/litellm/main.py index e6642d1d1..d4b799116 100644 --- a/litellm/main.py +++ b/litellm/main.py @@ -1783,6 +1783,7 @@ def embedding( rpm = kwargs.pop("rpm", None) tpm = kwargs.pop("tpm", None) model_info = kwargs.get("model_info", None) + metadata = kwargs.get("metadata", None) proxy_server_request = kwargs.get("proxy_server_request", None) aembedding = kwargs.pop("aembedding", None) openai_params = ["functions", "function_call", "temperature", "temperature", "top_p", "n", "stream", "stop", "max_tokens", "presence_penalty", "frequency_penalty", "logit_bias", "user", "request_timeout", "api_base", "api_version", "api_key", "deployment_id", "organization", "base_url", "default_headers", "timeout", "response_format", "seed", "tools", "tool_choice", "max_retries", "encoding_format"] @@ -1798,7 +1799,7 @@ def embedding( try: response = None logging = litellm_logging_obj - logging.update_environment_variables(model=model, user="", optional_params=optional_params, litellm_params={"timeout": timeout, "azure": azure, "litellm_call_id": litellm_call_id, "logger_fn": logger_fn, "proxy_server_request": proxy_server_request, "model_info": model_info}) + logging.update_environment_variables(model=model, user="", optional_params=optional_params, litellm_params={"timeout": timeout, "azure": azure, "litellm_call_id": litellm_call_id, "logger_fn": logger_fn, "proxy_server_request": proxy_server_request, "model_info": model_info, "metadata": metadata}) if azure == True or custom_llm_provider == "azure": # azure configs api_type = get_secret("AZURE_API_TYPE") or "azure" diff --git a/litellm/tests/test_amazing_proxy_custom_logger.py b/litellm/tests/test_amazing_proxy_custom_logger.py index 0c4463cc7..14db8e2af 100644 --- a/litellm/tests/test_amazing_proxy_custom_logger.py +++ b/litellm/tests/test_amazing_proxy_custom_logger.py @@ -73,8 +73,10 @@ def test_chat_completion(client): assert my_custom_logger.async_success == True # checks if the status of async_success is True, only the async_log_success_event can set this to true assert my_custom_logger.async_completion_kwargs["model"] == "chatgpt-v-2" # checks if kwargs passed to async_log_success_event are correct print("\n\n Custom Logger Async Completion args", my_custom_logger.async_completion_kwargs) - litellm_params = my_custom_logger.async_completion_kwargs.get("litellm_params") + metadata = litellm_params.get("metadata", None) + print("\n\n Metadata in custom logger kwargs", litellm_params.get("metadata")) + assert metadata is not None config_model_info = litellm_params.get("model_info") proxy_server_request_object = litellm_params.get("proxy_server_request") @@ -174,6 +176,9 @@ def test_embedding(client): kwargs = my_custom_logger.async_embedding_kwargs litellm_params = kwargs.get("litellm_params") + metadata = litellm_params.get("metadata", None) + print("\n\n Metadata in custom logger kwargs", litellm_params.get("metadata")) + assert metadata is not None proxy_server_request = litellm_params.get("proxy_server_request") model_info = litellm_params.get("model_info") assert proxy_server_request == {'url': 'http://testserver/embeddings', 'method': 'POST', 'headers': {'host': 'testserver', 'accept': '*/*', 'accept-encoding': 'gzip, deflate', 'connection': 'keep-alive', 'user-agent': 'testclient', 'authorization': 'Bearer sk-1234', 'content-length': '54', 'content-type': 'application/json'}, 'body': {'model': 'azure-embedding-model', 'input': ['hello']}} From 71eee5087d4bff283206df2f7452f24deb4773ba Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 09:47:38 -0800 Subject: [PATCH 376/460] (test) assert metadata in callbacks --- litellm/proxy/proxy_server.py | 2 ++ litellm/tests/test_amazing_proxy_custom_logger.py | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 259ead7c9..6bab8dc8d 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -1098,8 +1098,10 @@ async def embeddings(request: Request, user_api_key_dict: UserAPIKeyAuth = Depen data["model"] = user_model if "metadata" in data: data["metadata"]["user_api_key"] = user_api_key_dict.api_key + data["metadata"]["headers"] = dict(request.headers) else: data["metadata"] = {"user_api_key": user_api_key_dict.api_key} + data["metadata"]["headers"] = dict(request.headers) router_model_names = [m["model_name"] for m in llm_model_list] if llm_model_list is not None else [] print(f"received data: {data['input']}") if "input" in data and isinstance(data['input'], list) and isinstance(data['input'][0], list) and isinstance(data['input'][0][0], int): # check if array of tokens passed in diff --git a/litellm/tests/test_amazing_proxy_custom_logger.py b/litellm/tests/test_amazing_proxy_custom_logger.py index 14db8e2af..3b0506cae 100644 --- a/litellm/tests/test_amazing_proxy_custom_logger.py +++ b/litellm/tests/test_amazing_proxy_custom_logger.py @@ -77,6 +77,8 @@ def test_chat_completion(client): metadata = litellm_params.get("metadata", None) print("\n\n Metadata in custom logger kwargs", litellm_params.get("metadata")) assert metadata is not None + assert "user_api_key" in metadata + assert "headers" in metadata config_model_info = litellm_params.get("model_info") proxy_server_request_object = litellm_params.get("proxy_server_request") @@ -179,6 +181,8 @@ def test_embedding(client): metadata = litellm_params.get("metadata", None) print("\n\n Metadata in custom logger kwargs", litellm_params.get("metadata")) assert metadata is not None + assert "user_api_key" in metadata + assert "headers" in metadata proxy_server_request = litellm_params.get("proxy_server_request") model_info = litellm_params.get("model_info") assert proxy_server_request == {'url': 'http://testserver/embeddings', 'method': 'POST', 'headers': {'host': 'testserver', 'accept': '*/*', 'accept-encoding': 'gzip, deflate', 'connection': 'keep-alive', 'user-agent': 'testclient', 'authorization': 'Bearer sk-1234', 'content-length': '54', 'content-type': 'application/json'}, 'body': {'model': 'azure-embedding-model', 'input': ['hello']}} From 485c40b9aebc43f52450eec60fb4aefd680dcd3f Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 10:12:01 -0800 Subject: [PATCH 377/460] (test) proxy --- litellm/tests/test_amazing_proxy_custom_logger.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/litellm/tests/test_amazing_proxy_custom_logger.py b/litellm/tests/test_amazing_proxy_custom_logger.py index 3b0506cae..18eea0b52 100644 --- a/litellm/tests/test_amazing_proxy_custom_logger.py +++ b/litellm/tests/test_amazing_proxy_custom_logger.py @@ -16,6 +16,11 @@ from litellm import embedding, completion, completion_cost, Timeout from litellm import RateLimitError import importlib, inspect +# init callbacks to be empty +litellm.success_callback = [] +litellm.callbacks = [] +litellm.failure_callback = [] + # test /chat/completion request to the proxy from fastapi.testclient import TestClient from fastapi import FastAPI From 6aa2f4bc1d69ec900b755f4adee1f3208f88a28b Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 10:24:37 -0800 Subject: [PATCH 378/460] (test) custom logger embedding --- litellm/tests/test_configs/custom_callbacks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/tests/test_configs/custom_callbacks.py b/litellm/tests/test_configs/custom_callbacks.py index 94b89e589..6d3e71ce2 100644 --- a/litellm/tests/test_configs/custom_callbacks.py +++ b/litellm/tests/test_configs/custom_callbacks.py @@ -55,7 +55,7 @@ class MyCustomHandler(CustomLogger): self.async_success = True print("Value of async success: ", self.async_success) print("\n kwargs: ", kwargs) - if kwargs.get("model") == "azure-embedding-model": + if kwargs.get("model") == "azure-embedding-model" or kwargs.get("model") == "ada": self.async_success_embedding = True self.async_embedding_kwargs = kwargs self.async_embedding_response = response_obj From 426c741b4069486c6fc4d9a8091939d05e42188d Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 10:27:43 -0800 Subject: [PATCH 379/460] (test) hf text completion --- litellm/tests/test_text_completion.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/tests/test_text_completion.py b/litellm/tests/test_text_completion.py index 660367651..11c6d0e5b 100644 --- a/litellm/tests/test_text_completion.py +++ b/litellm/tests/test_text_completion.py @@ -142,7 +142,7 @@ def test_completion_hf_prompt_array(): prompt=token_prompt, # token prompt is a 2d list, max_tokens=0, temperature=0.0, - echo=True, + # echo=True, # hugging face inference api is currently raising errors for this, looks like they have a regression on their side ) print("\n\n response") From 38fe80266f680e3b00a3817d8b1e2375aa863d61 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 10:40:01 -0800 Subject: [PATCH 380/460] (test) debug proxy logger test --- litellm/tests/test_configs/custom_callbacks.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/litellm/tests/test_configs/custom_callbacks.py b/litellm/tests/test_configs/custom_callbacks.py index 6d3e71ce2..71f74bbc2 100644 --- a/litellm/tests/test_configs/custom_callbacks.py +++ b/litellm/tests/test_configs/custom_callbacks.py @@ -56,7 +56,10 @@ class MyCustomHandler(CustomLogger): print("Value of async success: ", self.async_success) print("\n kwargs: ", kwargs) if kwargs.get("model") == "azure-embedding-model" or kwargs.get("model") == "ada": + print("Got an embedding model", kwargs.get("model")) + print("Setting embedding success to True") self.async_success_embedding = True + print("Value of async success embedding: ", self.async_success_embedding) self.async_embedding_kwargs = kwargs self.async_embedding_response = response_obj if kwargs.get("stream") == True: From 04f6b976e965e9e4f237064fad9c702dd034f6eb Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 10:49:53 -0800 Subject: [PATCH 381/460] (test) proxy callbacks --- litellm/tests/test_amazing_proxy_custom_logger.py | 1 + 1 file changed, 1 insertion(+) diff --git a/litellm/tests/test_amazing_proxy_custom_logger.py b/litellm/tests/test_amazing_proxy_custom_logger.py index 18eea0b52..363a44995 100644 --- a/litellm/tests/test_amazing_proxy_custom_logger.py +++ b/litellm/tests/test_amazing_proxy_custom_logger.py @@ -20,6 +20,7 @@ import importlib, inspect litellm.success_callback = [] litellm.callbacks = [] litellm.failure_callback = [] +litellm._async_success_callback = [] # test /chat/completion request to the proxy from fastapi.testclient import TestClient From 0522ffc4b76027e7c98fdbd58537b29fd908f5ea Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 10:56:01 -0800 Subject: [PATCH 382/460] (fix) update back model prices with latest llms --- ...odel_prices_and_context_window_backup.json | 363 +++++++++++++++++- 1 file changed, 344 insertions(+), 19 deletions(-) diff --git a/litellm/model_prices_and_context_window_backup.json b/litellm/model_prices_and_context_window_backup.json index 2c49dc02d..454b2504a 100644 --- a/litellm/model_prices_and_context_window_backup.json +++ b/litellm/model_prices_and_context_window_backup.json @@ -41,6 +41,20 @@ "litellm_provider": "openai", "mode": "chat" }, + "gpt-4-1106-preview": { + "max_tokens": 128000, + "input_cost_per_token": 0.00001, + "output_cost_per_token": 0.00003, + "litellm_provider": "openai", + "mode": "chat" + }, + "gpt-4-vision-preview": { + "max_tokens": 128000, + "input_cost_per_token": 0.00001, + "output_cost_per_token": 0.00003, + "litellm_provider": "openai", + "mode": "chat" + }, "gpt-3.5-turbo": { "max_tokens": 4097, "input_cost_per_token": 0.0000015, @@ -62,6 +76,13 @@ "litellm_provider": "openai", "mode": "chat" }, + "gpt-3.5-turbo-1106": { + "max_tokens": 16385, + "input_cost_per_token": 0.0000010, + "output_cost_per_token": 0.0000020, + "litellm_provider": "openai", + "mode": "chat" + }, "gpt-3.5-turbo-16k": { "max_tokens": 16385, "input_cost_per_token": 0.000003, @@ -76,6 +97,62 @@ "litellm_provider": "openai", "mode": "chat" }, + "ft:gpt-3.5-turbo": { + "max_tokens": 4097, + "input_cost_per_token": 0.000012, + "output_cost_per_token": 0.000016, + "litellm_provider": "openai", + "mode": "chat" + }, + "text-embedding-ada-002": { + "max_tokens": 8191, + "input_cost_per_token": 0.0000001, + "output_cost_per_token": 0.000000, + "litellm_provider": "openai", + "mode": "embedding" + }, + "azure/gpt-4-1106-preview": { + "max_tokens": 128000, + "input_cost_per_token": 0.00001, + "output_cost_per_token": 0.00003, + "litellm_provider": "azure", + "mode": "chat" + }, + "azure/gpt-4-32k": { + "max_tokens": 8192, + "input_cost_per_token": 0.00006, + "output_cost_per_token": 0.00012, + "litellm_provider": "azure", + "mode": "chat" + }, + "azure/gpt-4": { + "max_tokens": 16385, + "input_cost_per_token": 0.00003, + "output_cost_per_token": 0.00006, + "litellm_provider": "azure", + "mode": "chat" + }, + "azure/gpt-3.5-turbo-16k": { + "max_tokens": 16385, + "input_cost_per_token": 0.000003, + "output_cost_per_token": 0.000004, + "litellm_provider": "azure", + "mode": "chat" + }, + "azure/gpt-3.5-turbo": { + "max_tokens": 4097, + "input_cost_per_token": 0.0000015, + "output_cost_per_token": 0.000002, + "litellm_provider": "azure", + "mode": "chat" + }, + "azure/text-embedding-ada-002": { + "max_tokens": 8191, + "input_cost_per_token": 0.0000001, + "output_cost_per_token": 0.000000, + "litellm_provider": "azure", + "mode": "embedding" + }, "text-davinci-003": { "max_tokens": 4097, "input_cost_per_token": 0.000002, @@ -127,6 +204,7 @@ }, "claude-instant-1": { "max_tokens": 100000, + "max_output_tokens": 8191, "input_cost_per_token": 0.00000163, "output_cost_per_token": 0.00000551, "litellm_provider": "anthropic", @@ -134,15 +212,25 @@ }, "claude-instant-1.2": { "max_tokens": 100000, - "input_cost_per_token": 0.00000163, - "output_cost_per_token": 0.00000551, + "max_output_tokens": 8191, + "input_cost_per_token": 0.000000163, + "output_cost_per_token": 0.000000551, "litellm_provider": "anthropic", "mode": "chat" }, "claude-2": { "max_tokens": 100000, - "input_cost_per_token": 0.00001102, - "output_cost_per_token": 0.00003268, + "max_output_tokens": 8191, + "input_cost_per_token": 0.000008, + "output_cost_per_token": 0.000024, + "litellm_provider": "anthropic", + "mode": "chat" + }, + "claude-2.1": { + "max_tokens": 200000, + "max_output_tokens": 8191, + "input_cost_per_token": 0.000008, + "output_cost_per_token": 0.000024, "litellm_provider": "anthropic", "mode": "chat" }, @@ -227,9 +315,51 @@ "max_tokens": 32000, "input_cost_per_token": 0.000000125, "output_cost_per_token": 0.000000125, - "litellm_provider": "vertex_ai-chat-models", + "litellm_provider": "vertex_ai-code-chat-models", "mode": "chat" }, + "palm/chat-bison": { + "max_tokens": 4096, + "input_cost_per_token": 0.000000125, + "output_cost_per_token": 0.000000125, + "litellm_provider": "palm", + "mode": "chat" + }, + "palm/chat-bison-001": { + "max_tokens": 4096, + "input_cost_per_token": 0.000000125, + "output_cost_per_token": 0.000000125, + "litellm_provider": "palm", + "mode": "chat" + }, + "palm/text-bison": { + "max_tokens": 8196, + "input_cost_per_token": 0.000000125, + "output_cost_per_token": 0.000000125, + "litellm_provider": "palm", + "mode": "completion" + }, + "palm/text-bison-001": { + "max_tokens": 8196, + "input_cost_per_token": 0.000000125, + "output_cost_per_token": 0.000000125, + "litellm_provider": "palm", + "mode": "completion" + }, + "palm/text-bison-safety-off": { + "max_tokens": 8196, + "input_cost_per_token": 0.000000125, + "output_cost_per_token": 0.000000125, + "litellm_provider": "palm", + "mode": "completion" + }, + "palm/text-bison-safety-recitation-off": { + "max_tokens": 8196, + "input_cost_per_token": 0.000000125, + "output_cost_per_token": 0.000000125, + "litellm_provider": "palm", + "mode": "completion" + }, "command-nightly": { "max_tokens": 4096, "input_cost_per_token": 0.000015, @@ -267,6 +397,8 @@ }, "replicate/llama-2-70b-chat:2c1608e18606fad2812020dc541930f2d0495ce32eee50074220b87300bc16e1": { "max_tokens": 4096, + "input_cost_per_token": 0.0000, + "output_cost_per_token": 0.0000, "litellm_provider": "replicate", "mode": "chat" }, @@ -293,6 +425,7 @@ }, "openrouter/anthropic/claude-instant-v1": { "max_tokens": 100000, + "max_output_tokens": 8191, "input_cost_per_token": 0.00000163, "output_cost_per_token": 0.00000551, "litellm_provider": "openrouter", @@ -300,6 +433,7 @@ }, "openrouter/anthropic/claude-2": { "max_tokens": 100000, + "max_output_tokens": 8191, "input_cost_per_token": 0.00001102, "output_cost_per_token": 0.00003268, "litellm_provider": "openrouter", @@ -496,20 +630,31 @@ }, "anthropic.claude-v1": { "max_tokens": 100000, - "input_cost_per_token": 0.00001102, - "output_cost_per_token": 0.00003268, + "max_output_tokens": 8191, + "input_cost_per_token": 0.000008, + "output_cost_per_token": 0.000024, "litellm_provider": "bedrock", "mode": "chat" }, "anthropic.claude-v2": { "max_tokens": 100000, - "input_cost_per_token": 0.00001102, - "output_cost_per_token": 0.00003268, + "max_output_tokens": 8191, + "input_cost_per_token": 0.000008, + "output_cost_per_token": 0.000024, + "litellm_provider": "bedrock", + "mode": "chat" + }, + "anthropic.claude-v2:1": { + "max_tokens": 200000, + "max_output_tokens": 8191, + "input_cost_per_token": 0.000008, + "output_cost_per_token": 0.000024, "litellm_provider": "bedrock", "mode": "chat" }, "anthropic.claude-instant-v1": { "max_tokens": 100000, + "max_output_tokens": 8191, "input_cost_per_token": 0.00000163, "output_cost_per_token": 0.00000551, "litellm_provider": "bedrock", @@ -529,26 +674,80 @@ "litellm_provider": "bedrock", "mode": "chat" }, + "meta.llama2-70b-chat-v1": { + "max_tokens": 4096, + "input_cost_per_token": 0.00000195, + "output_cost_per_token": 0.00000256, + "litellm_provider": "bedrock", + "mode": "chat" + }, + "sagemaker/meta-textgeneration-llama-2-7b": { + "max_tokens": 4096, + "input_cost_per_token": 0.000, + "output_cost_per_token": 0.000, + "litellm_provider": "sagemaker", + "mode": "completion" + }, + "sagemaker/meta-textgeneration-llama-2-7b-f": { + "max_tokens": 4096, + "input_cost_per_token": 0.000, + "output_cost_per_token": 0.000, + "litellm_provider": "sagemaker", + "mode": "chat" + }, + "sagemaker/meta-textgeneration-llama-2-13b": { + "max_tokens": 4096, + "input_cost_per_token": 0.000, + "output_cost_per_token": 0.000, + "litellm_provider": "sagemaker", + "mode": "completion" + }, + "sagemaker/meta-textgeneration-llama-2-13b-f": { + "max_tokens": 4096, + "input_cost_per_token": 0.000, + "output_cost_per_token": 0.000, + "litellm_provider": "sagemaker", + "mode": "chat" + }, + "sagemaker/meta-textgeneration-llama-2-70b": { + "max_tokens": 4096, + "input_cost_per_token": 0.000, + "output_cost_per_token": 0.000, + "litellm_provider": "sagemaker", + "mode": "completion" + }, + "sagemaker/meta-textgeneration-llama-2-70b-b-f": { + "max_tokens": 4096, + "input_cost_per_token": 0.000, + "output_cost_per_token": 0.000, + "litellm_provider": "sagemaker", + "mode": "chat" + }, "together-ai-up-to-3b": { "input_cost_per_token": 0.0000001, - "output_cost_per_token": 0.0000001 + "output_cost_per_token": 0.0000001, + "litellm_provider": "together_ai" }, "together-ai-3.1b-7b": { "input_cost_per_token": 0.0000002, - "output_cost_per_token": 0.0000002 + "output_cost_per_token": 0.0000002, + "litellm_provider": "together_ai" }, "together-ai-7.1b-20b": { "max_tokens": 1000, "input_cost_per_token": 0.0000004, - "output_cost_per_token": 0.0000004 + "output_cost_per_token": 0.0000004, + "litellm_provider": "together_ai" }, "together-ai-20.1b-40b": { - "input_cost_per_token": 0.000001, - "output_cost_per_token": 0.000001 + "input_cost_per_token": 0.0000008, + "output_cost_per_token": 0.0000008, + "litellm_provider": "together_ai" }, "together-ai-40.1b-70b": { - "input_cost_per_token": 0.000003, - "output_cost_per_token": 0.000003 + "input_cost_per_token": 0.0000009, + "output_cost_per_token": 0.0000009, + "litellm_provider": "together_ai" }, "ollama/llama2": { "max_tokens": 4096, @@ -578,10 +777,38 @@ "litellm_provider": "ollama", "mode": "completion" }, + "ollama/mistral": { + "max_tokens": 8192, + "input_cost_per_token": 0.0, + "output_cost_per_token": 0.0, + "litellm_provider": "ollama", + "mode": "completion" + }, + "ollama/codellama": { + "max_tokens": 4096, + "input_cost_per_token": 0.0, + "output_cost_per_token": 0.0, + "litellm_provider": "ollama", + "mode": "completion" + }, + "ollama/orca-mini": { + "max_tokens": 4096, + "input_cost_per_token": 0.0, + "output_cost_per_token": 0.0, + "litellm_provider": "ollama", + "mode": "completion" + }, + "ollama/vicuna": { + "max_tokens": 2048, + "input_cost_per_token": 0.0, + "output_cost_per_token": 0.0, + "litellm_provider": "ollama", + "mode": "completion" + }, "deepinfra/meta-llama/Llama-2-70b-chat-hf": { - "max_tokens": 6144, - "input_cost_per_token": 0.000001875, - "output_cost_per_token": 0.000001875, + "max_tokens": 4096, + "input_cost_per_token": 0.000000700, + "output_cost_per_token": 0.000000950, "litellm_provider": "deepinfra", "mode": "chat" }, @@ -619,5 +846,103 @@ "output_cost_per_token": 0.00000095, "litellm_provider": "deepinfra", "mode": "chat" + }, + "perplexity/pplx-7b-chat": { + "max_tokens": 8192, + "input_cost_per_token": 0.0000000, + "output_cost_per_token": 0.000000, + "litellm_provider": "perplexity", + "mode": "chat" + }, + "perplexity/pplx-70b-chat": { + "max_tokens": 4096, + "input_cost_per_token": 0.0000000, + "output_cost_per_token": 0.000000, + "litellm_provider": "perplexity", + "mode": "chat" + }, + "perplexity/pplx-7b-online": { + "max_tokens": 4096, + "input_cost_per_token": 0.0000000, + "output_cost_per_token": 0.0005, + "litellm_provider": "perplexity", + "mode": "chat" + }, + "perplexity/pplx-70b-online": { + "max_tokens": 4096, + "input_cost_per_token": 0.0000000, + "output_cost_per_token": 0.0005, + "litellm_provider": "perplexity", + "mode": "chat" + }, + "perplexity/llama-2-13b-chat": { + "max_tokens": 4096, + "input_cost_per_token": 0.0000000, + "output_cost_per_token": 0.000000, + "litellm_provider": "perplexity", + "mode": "chat" + }, + "perplexity/llama-2-70b-chat": { + "max_tokens": 4096, + "input_cost_per_token": 0.0000000, + "output_cost_per_token": 0.000000, + "litellm_provider": "perplexity", + "mode": "chat" + }, + "perplexity/mistral-7b-instruct": { + "max_tokens": 4096, + "input_cost_per_token": 0.0000000, + "output_cost_per_token": 0.000000, + "litellm_provider": "perplexity", + "mode": "chat" + }, + "perplexity/replit-code-v1.5-3b": { + "max_tokens": 4096, + "input_cost_per_token": 0.0000000, + "output_cost_per_token": 0.000000, + "litellm_provider": "perplexity", + "mode": "chat" + }, + "anyscale/mistralai/Mistral-7B-Instruct-v0.1": { + "max_tokens": 16384, + "input_cost_per_token": 0.00000015, + "output_cost_per_token": 0.00000015, + "litellm_provider": "anyscale", + "mode": "chat" + }, + "anyscale/HuggingFaceH4/zephyr-7b-beta": { + "max_tokens": 16384, + "input_cost_per_token": 0.00000015, + "output_cost_per_token": 0.00000015, + "litellm_provider": "anyscale", + "mode": "chat" + }, + "anyscale/meta-llama/Llama-2-7b-chat-hf": { + "max_tokens": 4096, + "input_cost_per_token": 0.00000015, + "output_cost_per_token": 0.00000015, + "litellm_provider": "anyscale", + "mode": "chat" + }, + "anyscale/meta-llama/Llama-2-13b-chat-hf": { + "max_tokens": 4096, + "input_cost_per_token": 0.00000025, + "output_cost_per_token": 0.00000025, + "litellm_provider": "anyscale", + "mode": "chat" + }, + "anyscale/meta-llama/Llama-2-70b-chat-hf": { + "max_tokens": 4096, + "input_cost_per_token": 0.000001, + "output_cost_per_token": 0.000001, + "litellm_provider": "anyscale", + "mode": "chat" + }, + "anyscale/codellama/CodeLlama-34b-Instruct-hf": { + "max_tokens": 16384, + "input_cost_per_token": 0.000001, + "output_cost_per_token": 0.000001, + "litellm_provider": "anyscale", + "mode": "chat" } } From c5322243080110ea11f5b28d3c05e11930bdeb1e Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 11:11:44 -0800 Subject: [PATCH 383/460] (test) custom logger proxy --- litellm/tests/test_amazing_proxy_custom_logger.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/litellm/tests/test_amazing_proxy_custom_logger.py b/litellm/tests/test_amazing_proxy_custom_logger.py index 363a44995..15857324e 100644 --- a/litellm/tests/test_amazing_proxy_custom_logger.py +++ b/litellm/tests/test_amazing_proxy_custom_logger.py @@ -50,7 +50,7 @@ headers = { "Authorization": f"Bearer {token}" } - +@pytest.mark.no_parallel def test_chat_completion(client): try: # Your test data @@ -96,7 +96,7 @@ def test_chat_completion(client): except Exception as e: pytest.fail("LiteLLM Proxy test failed. Exception", e) - +@pytest.mark.no_parallel def test_chat_completion_stream(client): try: # Your test data @@ -161,7 +161,7 @@ def test_chat_completion_stream(client): pytest.fail("LiteLLM Proxy test failed. Exception", e) - +@pytest.mark.no_parallel def test_embedding(client): try: # Your test data From 05a469177b32bfc3adf238bbc0f67b9c369a6313 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 11:21:46 -0800 Subject: [PATCH 384/460] (test) proxy custom logger --- .../tests/test_amazing_proxy_custom_logger.py | 76 +++++++++---------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/litellm/tests/test_amazing_proxy_custom_logger.py b/litellm/tests/test_amazing_proxy_custom_logger.py index 15857324e..14752167f 100644 --- a/litellm/tests/test_amazing_proxy_custom_logger.py +++ b/litellm/tests/test_amazing_proxy_custom_logger.py @@ -50,6 +50,44 @@ headers = { "Authorization": f"Bearer {token}" } + +@pytest.mark.no_parallel +def test_embedding(client): + try: + # Your test data + print("initialized proxy") + # import the initialized custom logger + print(litellm.callbacks) + + assert len(litellm.callbacks) == 1 # assert litellm is initialized with 1 callback + my_custom_logger = litellm.callbacks[0] + assert my_custom_logger.async_success_embedding == False + + test_data = { + "model": "azure-embedding-model", + "input": ["hello"] + } + response = client.post("/embeddings", json=test_data, headers=headers) + print("made request", response.status_code, response.text) + assert my_custom_logger.async_success_embedding == True # checks if the status of async_success is True, only the async_log_success_event can set this to true + assert my_custom_logger.async_embedding_kwargs["model"] == "azure-embedding-model" # checks if kwargs passed to async_log_success_event are correct + + kwargs = my_custom_logger.async_embedding_kwargs + litellm_params = kwargs.get("litellm_params") + metadata = litellm_params.get("metadata", None) + print("\n\n Metadata in custom logger kwargs", litellm_params.get("metadata")) + assert metadata is not None + assert "user_api_key" in metadata + assert "headers" in metadata + proxy_server_request = litellm_params.get("proxy_server_request") + model_info = litellm_params.get("model_info") + assert proxy_server_request == {'url': 'http://testserver/embeddings', 'method': 'POST', 'headers': {'host': 'testserver', 'accept': '*/*', 'accept-encoding': 'gzip, deflate', 'connection': 'keep-alive', 'user-agent': 'testclient', 'authorization': 'Bearer sk-1234', 'content-length': '54', 'content-type': 'application/json'}, 'body': {'model': 'azure-embedding-model', 'input': ['hello']}} + assert model_info == {'input_cost_per_token': 0.002, 'mode': 'embedding', 'id': 'hello'} + result = response.json() + print(f"Received response: {result}") + except Exception as e: + pytest.fail("LiteLLM Proxy test failed. Exception", e) + @pytest.mark.no_parallel def test_chat_completion(client): try: @@ -159,41 +197,3 @@ def test_chat_completion_stream(client): except Exception as e: pytest.fail("LiteLLM Proxy test failed. Exception", e) - - -@pytest.mark.no_parallel -def test_embedding(client): - try: - # Your test data - print("initialized proxy") - # import the initialized custom logger - print(litellm.callbacks) - - assert len(litellm.callbacks) == 1 # assert litellm is initialized with 1 callback - my_custom_logger = litellm.callbacks[0] - assert my_custom_logger.async_success_embedding == False - - test_data = { - "model": "azure-embedding-model", - "input": ["hello"] - } - response = client.post("/embeddings", json=test_data, headers=headers) - print("made request", response.status_code, response.text) - assert my_custom_logger.async_success_embedding == True # checks if the status of async_success is True, only the async_log_success_event can set this to true - assert my_custom_logger.async_embedding_kwargs["model"] == "azure-embedding-model" # checks if kwargs passed to async_log_success_event are correct - - kwargs = my_custom_logger.async_embedding_kwargs - litellm_params = kwargs.get("litellm_params") - metadata = litellm_params.get("metadata", None) - print("\n\n Metadata in custom logger kwargs", litellm_params.get("metadata")) - assert metadata is not None - assert "user_api_key" in metadata - assert "headers" in metadata - proxy_server_request = litellm_params.get("proxy_server_request") - model_info = litellm_params.get("model_info") - assert proxy_server_request == {'url': 'http://testserver/embeddings', 'method': 'POST', 'headers': {'host': 'testserver', 'accept': '*/*', 'accept-encoding': 'gzip, deflate', 'connection': 'keep-alive', 'user-agent': 'testclient', 'authorization': 'Bearer sk-1234', 'content-length': '54', 'content-type': 'application/json'}, 'body': {'model': 'azure-embedding-model', 'input': ['hello']}} - assert model_info == {'input_cost_per_token': 0.002, 'mode': 'embedding', 'id': 'hello'} - result = response.json() - print(f"Received response: {result}") - except Exception as e: - pytest.fail("LiteLLM Proxy test failed. Exception", e) \ No newline at end of file From fe394df8fcaee4bdcd45635a79982b2f44a28e69 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 11:27:51 -0800 Subject: [PATCH 385/460] (ci/cd) update model_prices_and_context_window_backup --- .circleci/config.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index 6caed4810..8b92a2671 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -78,6 +78,11 @@ jobs: steps: - checkout + + - run: + name: Copy model_prices_and_context_window File to model_prices_and_context_window_backup + command: | + cp model_prices_and_context_window.json litellm/model_prices_and_context_window_backup.json - run: name: Check if litellm dir was updated or if pyproject.toml was modified From 1d2f5ce97544277bcc233573b19f6d1c34bb13bd Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 11:33:21 -0800 Subject: [PATCH 386/460] (test) proxy - share session config --- .../tests/test_amazing_proxy_custom_logger.py | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/litellm/tests/test_amazing_proxy_custom_logger.py b/litellm/tests/test_amazing_proxy_custom_logger.py index 14752167f..bd008a0f8 100644 --- a/litellm/tests/test_amazing_proxy_custom_logger.py +++ b/litellm/tests/test_amazing_proxy_custom_logger.py @@ -30,16 +30,20 @@ filepath = os.path.dirname(os.path.abspath(__file__)) config_fp = f"{filepath}/test_configs/test_custom_logger.yaml" python_file_path = f"{filepath}/test_configs/custom_callbacks.py" save_worker_config(config=config_fp, model=None, alias=None, api_base=None, api_version=None, debug=False, temperature=None, max_tokens=None, request_timeout=600, max_budget=None, telemetry=False, drop_params=True, add_function_to_prompt=False, headers=None, save=False, use_queue=False) -app = FastAPI() -app.include_router(router) # Include your router in the test app -@app.on_event("startup") -async def wrapper_startup_event(): + +@pytest.fixture(scope="session") +def app(): + app = FastAPI() + app.include_router(router) + + # Perform the startup initialization only once initialize(config=config_fp, model=None, alias=None, api_base=None, api_version=None, debug=True, temperature=None, max_tokens=None, request_timeout=600, max_budget=None, telemetry=False, drop_params=True, add_function_to_prompt=False, headers=None, save=False, use_queue=False) -# Here you create a fixture that will be used by your tests -# Make sure the fixture returns TestClient(app) -@pytest.fixture(autouse=True) -def client(): + return app + +# Use the app fixture in your client fixture +@pytest.fixture +def client(app): with TestClient(app) as client: yield client From ea89a8a9386faacbc9c946149b23d3376997c79a Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Mon, 11 Dec 2023 11:38:28 -0800 Subject: [PATCH 387/460] test(test_custom_callback_unit.py): adding unit tests for custom callbacks + fixing related bugs --- litellm/llms/azure.py | 15 +- litellm/llms/openai.py | 7 +- litellm/main.py | 44 +-- litellm/proxy/custom_callbacks.py | 3 + litellm/proxy/proxy_server.py | 77 ++-- litellm/proxy/utils.py | 2 +- litellm/tests/test_custom_callback_input.py | 386 ++++++++++++++++++++ litellm/utils.py | 89 ++--- 8 files changed, 501 insertions(+), 122 deletions(-) create mode 100644 litellm/tests/test_custom_callback_input.py diff --git a/litellm/llms/azure.py b/litellm/llms/azure.py index f760e9fce..2677d12c5 100644 --- a/litellm/llms/azure.py +++ b/litellm/llms/azure.py @@ -196,8 +196,19 @@ class AzureChatCompletion(BaseLLM): else: azure_client = client response = azure_client.chat.completions.create(**data) # type: ignore - response.model = "azure/" + str(response.model) - return convert_to_model_response_object(response_object=json.loads(response.model_dump_json()), model_response_object=model_response) + stringified_response = response.model_dump_json() + ## LOGGING + logging_obj.post_call( + input=messages, + api_key=api_key, + original_response=stringified_response, + additional_args={ + "headers": headers, + "api_version": api_version, + "api_base": api_base, + }, + ) + return convert_to_model_response_object(response_object=json.loads(stringified_response), model_response_object=model_response) except AzureOpenAIError as e: exception_mapping_worked = True raise e diff --git a/litellm/llms/openai.py b/litellm/llms/openai.py index 29934d130..9c16708e2 100644 --- a/litellm/llms/openai.py +++ b/litellm/llms/openai.py @@ -219,13 +219,14 @@ class OpenAIChatCompletion(BaseLLM): else: openai_client = client response = openai_client.chat.completions.create(**data) # type: ignore + stringified_response = response.model_dump_json() logging_obj.post_call( - input=None, + input=messages, api_key=api_key, - original_response=response, + original_response=stringified_response, additional_args={"complete_input_dict": data}, ) - return convert_to_model_response_object(response_object=json.loads(response.model_dump_json()), model_response_object=model_response) + return convert_to_model_response_object(response_object=json.loads(stringified_response), model_response_object=model_response) except Exception as e: if "Conversation roles must alternate user/assistant" in str(e) or "user and assistant roles should be alternating" in str(e): # reformat messages to ensure user/assistant are alternating, if there's either 2 consecutive 'user' messages or 2 consecutive 'assistant' message, add a blank 'user' or 'assistant' message to ensure compatibility diff --git a/litellm/main.py b/litellm/main.py index d4b799116..e92e5e746 100644 --- a/litellm/main.py +++ b/litellm/main.py @@ -319,7 +319,6 @@ def completion( ######### unpacking kwargs ##################### args = locals() api_base = kwargs.get('api_base', None) - return_async = kwargs.get('return_async', False) mock_response = kwargs.get('mock_response', None) force_timeout= kwargs.get('force_timeout', 600) ## deprecated logger_fn = kwargs.get('logger_fn', None) @@ -351,7 +350,7 @@ def completion( client = kwargs.get("client", None) ######## end of unpacking kwargs ########### openai_params = ["functions", "function_call", "temperature", "temperature", "top_p", "n", "stream", "stop", "max_tokens", "presence_penalty", "frequency_penalty", "logit_bias", "user", "request_timeout", "api_base", "api_version", "api_key", "deployment_id", "organization", "base_url", "default_headers", "timeout", "response_format", "seed", "tools", "tool_choice", "max_retries"] - litellm_params = ["metadata", "acompletion", "caching", "return_async", "mock_response", "api_key", "api_version", "api_base", "force_timeout", "logger_fn", "verbose", "custom_llm_provider", "litellm_logging_obj", "litellm_call_id", "use_client", "id", "fallbacks", "azure", "headers", "model_list", "num_retries", "context_window_fallback_dict", "roles", "final_prompt_value", "bos_token", "eos_token", "request_timeout", "complete_response", "self", "client", "rpm", "tpm", "input_cost_per_token", "output_cost_per_token", "hf_model_name", "model_info", "proxy_server_request", "preset_cache_key"] + litellm_params = ["metadata", "acompletion", "caching", "mock_response", "api_key", "api_version", "api_base", "force_timeout", "logger_fn", "verbose", "custom_llm_provider", "litellm_logging_obj", "litellm_call_id", "use_client", "id", "fallbacks", "azure", "headers", "model_list", "num_retries", "context_window_fallback_dict", "roles", "final_prompt_value", "bos_token", "eos_token", "request_timeout", "complete_response", "self", "client", "rpm", "tpm", "input_cost_per_token", "output_cost_per_token", "hf_model_name", "model_info", "proxy_server_request", "preset_cache_key"] default_params = openai_params + litellm_params non_default_params = {k: v for k,v in kwargs.items() if k not in default_params} # model-specific params - pass them straight to the model/provider if mock_response: @@ -449,7 +448,6 @@ def completion( # For logging - save the values of the litellm-specific params passed in litellm_params = get_litellm_params( acompletion=acompletion, - return_async=return_async, api_key=api_key, force_timeout=force_timeout, logger_fn=logger_fn, @@ -526,17 +524,18 @@ def completion( client=client # pass AsyncAzureOpenAI, AzureOpenAI client ) - ## LOGGING - logging.post_call( - input=messages, - api_key=api_key, - original_response=response, - additional_args={ - "headers": headers, - "api_version": api_version, - "api_base": api_base, - }, - ) + if optional_params.get("stream", False) or acompletion == True: + ## LOGGING + logging.post_call( + input=messages, + api_key=api_key, + original_response=response, + additional_args={ + "headers": headers, + "api_version": api_version, + "api_base": api_base, + }, + ) elif ( model in litellm.open_ai_chat_completion_models or custom_llm_provider == "custom_openai" @@ -606,13 +605,14 @@ def completion( ) raise e - ## LOGGING - logging.post_call( - input=messages, - api_key=api_key, - original_response=response, - additional_args={"headers": headers}, - ) + if optional_params.get("stream", False) or acompletion == True: + ## LOGGING + logging.post_call( + input=messages, + api_key=api_key, + original_response=response, + additional_args={"headers": headers}, + ) elif ( custom_llm_provider == "text-completion-openai" or "ft:babbage-002" in model @@ -1787,7 +1787,7 @@ def embedding( proxy_server_request = kwargs.get("proxy_server_request", None) aembedding = kwargs.pop("aembedding", None) openai_params = ["functions", "function_call", "temperature", "temperature", "top_p", "n", "stream", "stop", "max_tokens", "presence_penalty", "frequency_penalty", "logit_bias", "user", "request_timeout", "api_base", "api_version", "api_key", "deployment_id", "organization", "base_url", "default_headers", "timeout", "response_format", "seed", "tools", "tool_choice", "max_retries", "encoding_format"] - litellm_params = ["metadata", "acompletion", "caching", "return_async", "mock_response", "api_key", "api_version", "api_base", "force_timeout", "logger_fn", "verbose", "custom_llm_provider", "litellm_logging_obj", "litellm_call_id", "use_client", "id", "fallbacks", "azure", "headers", "model_list", "num_retries", "context_window_fallback_dict", "roles", "final_prompt_value", "bos_token", "eos_token", "request_timeout", "complete_response", "self", "client", "rpm", "tpm", "input_cost_per_token", "output_cost_per_token", "hf_model_name", "proxy_server_request", "model_info", "preset_cache_key"] + litellm_params = ["metadata", "acompletion", "caching", "mock_response", "api_key", "api_version", "api_base", "force_timeout", "logger_fn", "verbose", "custom_llm_provider", "litellm_logging_obj", "litellm_call_id", "use_client", "id", "fallbacks", "azure", "headers", "model_list", "num_retries", "context_window_fallback_dict", "roles", "final_prompt_value", "bos_token", "eos_token", "request_timeout", "complete_response", "self", "client", "rpm", "tpm", "input_cost_per_token", "output_cost_per_token", "hf_model_name", "proxy_server_request", "model_info", "preset_cache_key"] default_params = openai_params + litellm_params non_default_params = {k: v for k,v in kwargs.items() if k not in default_params} # model-specific params - pass them straight to the model/provider optional_params = {} diff --git a/litellm/proxy/custom_callbacks.py b/litellm/proxy/custom_callbacks.py index c04916344..c30368ebb 100644 --- a/litellm/proxy/custom_callbacks.py +++ b/litellm/proxy/custom_callbacks.py @@ -36,9 +36,12 @@ class MyCustomHandler(CustomLogger): def log_success_event(self, kwargs, response_obj, start_time, end_time): print_verbose("On Success!") + async def async_log_success_event(self, kwargs, response_obj, start_time, end_time): print_verbose(f"On Async Success!") + response_cost = litellm.completion_cost(completion_response=response_obj) + assert response_cost > 0.0 return async def async_log_failure_event(self, kwargs, response_obj, start_time, end_time): diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 6bab8dc8d..2368994cb 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -262,41 +262,43 @@ async def user_api_key_auth(request: Request, api_key: str = fastapi.Security(ap if (route == "/key/generate" or route == "/key/delete" or route == "/key/info") and not is_master_key_valid: raise Exception(f"If master key is set, only master key can be used to generate, delete or get info for new keys") - if prisma_client: - ## check for cache hit (In-Memory Cache) - valid_token = user_api_key_cache.get_cache(key=api_key) - print(f"valid_token from cache: {valid_token}") - if valid_token is None: - ## check db - valid_token = await prisma_client.get_data(token=api_key, expires=datetime.utcnow()) - user_api_key_cache.set_cache(key=api_key, value=valid_token, ttl=60) - elif valid_token is not None: - print(f"API Key Cache Hit!") - if valid_token: - litellm.model_alias_map = valid_token.aliases - config = valid_token.config - if config != {}: - model_list = config.get("model_list", []) - llm_model_list = model_list - print("\n new llm router model list", llm_model_list) - if len(valid_token.models) == 0: # assume an empty model list means all models are allowed to be called - api_key = valid_token.token - valid_token_dict = _get_pydantic_json_dict(valid_token) - valid_token_dict.pop("token", None) - return UserAPIKeyAuth(api_key=api_key, **valid_token_dict) - else: - data = await request.json() - model = data.get("model", None) - if model in litellm.model_alias_map: - model = litellm.model_alias_map[model] - if model and model not in valid_token.models: - raise Exception(f"Token not allowed to access model") + if prisma_client is None: # if both master key + user key submitted, and user key != master key, and no db connected, raise an error + raise Exception("No connected db.") + + ## check for cache hit (In-Memory Cache) + valid_token = user_api_key_cache.get_cache(key=api_key) + print(f"valid_token from cache: {valid_token}") + if valid_token is None: + ## check db + valid_token = await prisma_client.get_data(token=api_key, expires=datetime.utcnow()) + user_api_key_cache.set_cache(key=api_key, value=valid_token, ttl=60) + elif valid_token is not None: + print(f"API Key Cache Hit!") + if valid_token: + litellm.model_alias_map = valid_token.aliases + config = valid_token.config + if config != {}: + model_list = config.get("model_list", []) + llm_model_list = model_list + print("\n new llm router model list", llm_model_list) + if len(valid_token.models) == 0: # assume an empty model list means all models are allowed to be called api_key = valid_token.token valid_token_dict = _get_pydantic_json_dict(valid_token) valid_token_dict.pop("token", None) return UserAPIKeyAuth(api_key=api_key, **valid_token_dict) else: - raise Exception(f"Invalid token") + data = await request.json() + model = data.get("model", None) + if model in litellm.model_alias_map: + model = litellm.model_alias_map[model] + if model and model not in valid_token.models: + raise Exception(f"Token not allowed to access model") + api_key = valid_token.token + valid_token_dict = _get_pydantic_json_dict(valid_token) + valid_token_dict.pop("token", None) + return UserAPIKeyAuth(api_key=api_key, **valid_token_dict) + else: + raise Exception(f"Invalid token") except Exception as e: print(f"An exception occurred - {traceback.format_exc()}") if isinstance(e, HTTPException): @@ -380,25 +382,14 @@ async def track_cost_callback( if "complete_streaming_response" in kwargs: # for tracking streaming cost we pass the "messages" and the output_text to litellm.completion_cost completion_response=kwargs["complete_streaming_response"] - input_text = kwargs["messages"] - output_text = completion_response["choices"][0]["message"]["content"] - response_cost = litellm.completion_cost( - model = kwargs["model"], - messages = input_text, - completion=output_text - ) + response_cost = litellm.completion_cost(completion_response=completion_response) print("streaming response_cost", response_cost) user_api_key = kwargs["litellm_params"]["metadata"].get("user_api_key", None) print(f"user_api_key - {user_api_key}; prisma_client - {prisma_client}") if user_api_key and prisma_client: await update_prisma_database(token=user_api_key, response_cost=response_cost) elif kwargs["stream"] == False: # for non streaming responses - input_text = kwargs.get("messages", "") - print(f"type of input_text: {type(input_text)}") - if isinstance(input_text, list): - response_cost = litellm.completion_cost(completion_response=completion_response, messages=input_text) - elif isinstance(input_text, str): - response_cost = litellm.completion_cost(completion_response=completion_response, prompt=input_text) + response_cost = litellm.completion_cost(completion_response=completion_response) print(f"received completion response: {completion_response}") print(f"regular response_cost: {response_cost}") diff --git a/litellm/proxy/utils.py b/litellm/proxy/utils.py index e972eff4d..00797691a 100644 --- a/litellm/proxy/utils.py +++ b/litellm/proxy/utils.py @@ -104,7 +104,7 @@ class ProxyLogging: 2. /embeddings """ # check if max parallel requests set - if user_api_key_dict.max_parallel_requests is not None: + if user_api_key_dict is not None and user_api_key_dict.max_parallel_requests is not None: ## decrement call count if call failed if (hasattr(original_exception, "status_code") and original_exception.status_code == 429 diff --git a/litellm/tests/test_custom_callback_input.py b/litellm/tests/test_custom_callback_input.py new file mode 100644 index 000000000..428d2e4d8 --- /dev/null +++ b/litellm/tests/test_custom_callback_input.py @@ -0,0 +1,386 @@ +### What this tests #### +## This test asserts the type of data passed into each method of the custom callback handler +import sys, os, time, inspect, asyncio, traceback +from datetime import datetime +import pytest +sys.path.insert(0, os.path.abspath('../..')) +from typing import Optional +from litellm import completion, embedding +import litellm +from litellm.integrations.custom_logger import CustomLogger + +# Test Scenarios (test across completion, streaming, embedding) +## 1: Pre-API-Call +## 2: Post-API-Call +## 3: On LiteLLM Call success +## 4: On LiteLLM Call failure + +# Test models +## 1. OpenAI +## 2. Azure OpenAI +## 3. Non-OpenAI/Azure - e.g. Bedrock + +# Test interfaces +## 1. litellm.completion() + litellm.embeddings() +## 2. router.completion() + router.embeddings() +## 3. proxy.completions + proxy.embeddings + +class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/observability/custom_callback#callback-class + """ + The set of expected inputs to a custom handler for a + """ + # Class variables or attributes + def __init__(self): + self.errors = [] + + def log_pre_api_call(self, model, messages, kwargs): + try: + ## MODEL + assert isinstance(model, str) + ## MESSAGES + assert isinstance(messages, list) and isinstance(messages[0], dict) + ## KWARGS + assert isinstance(kwargs['model'], str) + assert isinstance(kwargs['messages'], list) and isinstance(kwargs['messages'][0], dict) + assert isinstance(kwargs['optional_params'], dict) + assert isinstance(kwargs['litellm_params'], dict) + assert isinstance(kwargs['start_time'], Optional[datetime]) + assert isinstance(kwargs['stream'], bool) + assert isinstance(kwargs['user'], Optional[str]) + except Exception as e: + print(f"Assertion Error: {traceback.format_exc()}") + self.errors.append(traceback.format_exc()) + + def log_post_api_call(self, kwargs, response_obj, start_time, end_time): + try: + ## START TIME + assert isinstance(start_time, datetime) + ## END TIME + assert end_time == None + ## RESPONSE OBJECT + assert response_obj == None + ## KWARGS + assert isinstance(kwargs['model'], str) + assert isinstance(kwargs['messages'], list) and isinstance(kwargs['messages'][0], dict) + assert isinstance(kwargs['optional_params'], dict) + assert isinstance(kwargs['litellm_params'], dict) + assert isinstance(kwargs['start_time'], Optional[datetime]) + assert isinstance(kwargs['stream'], bool) + assert isinstance(kwargs['user'], Optional[str]) + assert isinstance(kwargs['input'], list) and isinstance(kwargs['input'][0], dict) + assert isinstance(kwargs['api_key'], str) + assert isinstance(kwargs['original_response'], (str, litellm.CustomStreamWrapper)) or inspect.iscoroutine(kwargs['original_response']) or inspect.isasyncgen(kwargs['original_response']) + assert isinstance(kwargs['additional_args'], Optional[dict]) + assert isinstance(kwargs['log_event_type'], str) + except: + print(f"Assertion Error: {traceback.format_exc()}") + self.errors.append(traceback.format_exc()) + + async def async_log_stream_event(self, kwargs, response_obj, start_time, end_time): + try: + ## START TIME + assert isinstance(start_time, datetime) + ## END TIME + assert isinstance(end_time, datetime) + ## RESPONSE OBJECT + assert isinstance(response_obj, litellm.ModelResponse) + ## KWARGS + assert isinstance(kwargs['model'], str) + assert isinstance(kwargs['messages'], list) and isinstance(kwargs['messages'][0], dict) + assert isinstance(kwargs['optional_params'], dict) + assert isinstance(kwargs['litellm_params'], dict) + assert isinstance(kwargs['start_time'], Optional[datetime]) + assert isinstance(kwargs['stream'], bool) + assert isinstance(kwargs['user'], Optional[str]) + assert isinstance(kwargs['input'], list) and isinstance(kwargs['input'][0], dict) + assert isinstance(kwargs['api_key'], str) + assert inspect.isasyncgen(kwargs['original_response']) or inspect.iscoroutine(kwargs['original_response']) + assert isinstance(kwargs['additional_args'], Optional[dict]) + assert isinstance(kwargs['log_event_type'], str) + except: + print(f"Assertion Error: {traceback.format_exc()}") + self.errors.append(traceback.format_exc()) + + def log_success_event(self, kwargs, response_obj, start_time, end_time): + try: + ## START TIME + assert isinstance(start_time, datetime) + ## END TIME + assert isinstance(end_time, datetime) + ## RESPONSE OBJECT + assert isinstance(response_obj, litellm.ModelResponse) + ## KWARGS + assert isinstance(kwargs['model'], str) + assert isinstance(kwargs['messages'], list) and isinstance(kwargs['messages'][0], dict) + assert isinstance(kwargs['optional_params'], dict) + assert isinstance(kwargs['litellm_params'], dict) + assert isinstance(kwargs['start_time'], Optional[datetime]) + assert isinstance(kwargs['stream'], bool) + assert isinstance(kwargs['user'], Optional[str]) + assert isinstance(kwargs['input'], list) and isinstance(kwargs['input'][0], dict) + assert isinstance(kwargs['api_key'], str) + assert isinstance(kwargs['original_response'], (str, litellm.CustomStreamWrapper)) + assert isinstance(kwargs['additional_args'], Optional[dict]) + assert isinstance(kwargs['log_event_type'], str) + except: + print(f"Assertion Error: {traceback.format_exc()}") + self.errors.append(traceback.format_exc()) + + def log_failure_event(self, kwargs, response_obj, start_time, end_time): + try: + ## START TIME + assert isinstance(start_time, datetime) + ## END TIME + assert isinstance(end_time, datetime) + ## RESPONSE OBJECT + assert response_obj == None + ## KWARGS + assert isinstance(kwargs['model'], str) + assert isinstance(kwargs['messages'], list) and isinstance(kwargs['messages'][0], dict) + assert isinstance(kwargs['optional_params'], dict) + assert isinstance(kwargs['litellm_params'], dict) + assert isinstance(kwargs['start_time'], Optional[datetime]) + assert isinstance(kwargs['stream'], bool) + assert isinstance(kwargs['user'], Optional[str]) + assert isinstance(kwargs['input'], list) and isinstance(kwargs['input'][0], dict) + assert isinstance(kwargs['api_key'], str) + assert isinstance(kwargs['original_response'], (str, litellm.CustomStreamWrapper)) or kwargs["original_response"] == None + assert isinstance(kwargs['additional_args'], Optional[dict]) + assert isinstance(kwargs['log_event_type'], str) + except: + print(f"Assertion Error: {traceback.format_exc()}") + self.errors.append(traceback.format_exc()) + + async def async_log_pre_api_call(self, model, messages, kwargs): + try: + ## MODEL + assert isinstance(model, str) + ## MESSAGES + assert isinstance(messages, list) and isinstance(messages[0], dict) + ## KWARGS + assert isinstance(kwargs['model'], str) + assert isinstance(kwargs['messages'], list) and isinstance(kwargs['messages'][0], dict) + assert isinstance(kwargs['optional_params'], dict) + assert isinstance(kwargs['litellm_params'], dict) + assert isinstance(kwargs['start_time'], Optional[datetime]) + assert isinstance(kwargs['stream'], bool) + assert isinstance(kwargs['user'], Optional[str]) + except Exception as e: + print(f"Assertion Error: {traceback.format_exc()}") + self.errors.append(traceback.format_exc()) + + async def async_log_success_event(self, kwargs, response_obj, start_time, end_time): + try: + ## START TIME + assert isinstance(start_time, datetime) + ## END TIME + assert isinstance(end_time, datetime) + ## RESPONSE OBJECT + assert isinstance(response_obj, litellm.ModelResponse) + ## KWARGS + assert isinstance(kwargs['model'], str) + assert isinstance(kwargs['messages'], list) and isinstance(kwargs['messages'][0], dict) + assert isinstance(kwargs['optional_params'], dict) + assert isinstance(kwargs['litellm_params'], dict) + assert isinstance(kwargs['start_time'], Optional[datetime]) + assert isinstance(kwargs['stream'], bool) + assert isinstance(kwargs['user'], Optional[str]) + assert isinstance(kwargs['input'], list) and isinstance(kwargs['input'][0], dict) + assert isinstance(kwargs['api_key'], str) + assert isinstance(kwargs['original_response'], str) or inspect.isasyncgen(kwargs['original_response']) or inspect.iscoroutine(kwargs['original_response']) + assert isinstance(kwargs['additional_args'], Optional[dict]) + assert isinstance(kwargs['log_event_type'], str) + except: + print(f"Assertion Error: {traceback.format_exc()}") + self.errors.append(traceback.format_exc()) + + async def async_log_failure_event(self, kwargs, response_obj, start_time, end_time): + try: + ## START TIME + assert isinstance(start_time, datetime) + ## END TIME + assert isinstance(end_time, datetime) + ## RESPONSE OBJECT + assert response_obj == None + ## KWARGS + assert isinstance(kwargs['model'], str) + assert isinstance(kwargs['messages'], list) and isinstance(kwargs['messages'][0], dict) + assert isinstance(kwargs['optional_params'], dict) + assert isinstance(kwargs['litellm_params'], dict) + assert isinstance(kwargs['start_time'], Optional[datetime]) + assert isinstance(kwargs['stream'], bool) + assert isinstance(kwargs['user'], Optional[str]) + assert isinstance(kwargs['input'], list) and isinstance(kwargs['input'][0], dict) + assert isinstance(kwargs['api_key'], str) + assert isinstance(kwargs['original_response'], (str, litellm.CustomStreamWrapper)) or inspect.isasyncgen(kwargs['original_response']) + assert isinstance(kwargs['additional_args'], Optional[dict]) + assert isinstance(kwargs['log_event_type'], str) + except: + print(f"Assertion Error: {traceback.format_exc()}") + self.errors.append(traceback.format_exc()) + +## Test OpenAI + sync +def test_chat_openai_stream(): + try: + customHandler = CompletionCustomHandler() + litellm.callbacks = [customHandler] + response = litellm.completion(model="gpt-3.5-turbo", + messages=[{ + "role": "user", + "content": "Hi 👋 - i'm sync openai" + }]) + ## test streaming + response = litellm.completion(model="gpt-3.5-turbo", + messages=[{ + "role": "user", + "content": "Hi 👋 - i'm openai" + }], + stream=True) + for chunk in response: + continue + ## test failure callback + try: + response = litellm.completion(model="gpt-3.5-turbo", + messages=[{ + "role": "user", + "content": "Hi 👋 - i'm openai" + }], + api_key="my-bad-key", + stream=True) + for chunk in response: + continue + except: + pass + time.sleep(1) + print(f"customHandler.errors: {customHandler.errors}") + assert len(customHandler.errors) == 0 + litellm.callbacks = [] + except Exception as e: + pytest.fail(f"An exception occurred: {str(e)}") + +# test_chat_openai_stream() + +## Test OpenAI + Async +@pytest.mark.asyncio +async def test_async_chat_openai_stream(): + try: + customHandler = CompletionCustomHandler() + litellm.callbacks = [customHandler] + response = await litellm.acompletion(model="gpt-3.5-turbo", + messages=[{ + "role": "user", + "content": "Hi 👋 - i'm openai" + }]) + ## test streaming + response = await litellm.acompletion(model="gpt-3.5-turbo", + messages=[{ + "role": "user", + "content": "Hi 👋 - i'm openai" + }], + stream=True) + async for chunk in response: + continue + ## test failure callback + try: + response = await litellm.acompletion(model="gpt-3.5-turbo", + messages=[{ + "role": "user", + "content": "Hi 👋 - i'm openai" + }], + api_key="my-bad-key", + stream=True) + async for chunk in response: + continue + except: + pass + time.sleep(1) + print(f"customHandler.errors: {customHandler.errors}") + assert len(customHandler.errors) == 0 + litellm.callbacks = [] + except Exception as e: + pytest.fail(f"An exception occurred: {str(e)}") + +# asyncio.run(test_async_chat_openai_stream()) + +## Test Azure + sync +def test_chat_azure_stream(): + try: + customHandler = CompletionCustomHandler() + litellm.callbacks = [customHandler] + response = litellm.completion(model="azure/chatgpt-v-2", + messages=[{ + "role": "user", + "content": "Hi 👋 - i'm sync azure" + }]) + # test streaming + response = litellm.completion(model="azure/chatgpt-v-2", + messages=[{ + "role": "user", + "content": "Hi 👋 - i'm sync azure" + }], + stream=True) + for chunk in response: + continue + # test failure callback + try: + response = litellm.completion(model="azure/chatgpt-v-2", + messages=[{ + "role": "user", + "content": "Hi 👋 - i'm sync azure" + }], + api_key="my-bad-key", + stream=True) + for chunk in response: + continue + except: + pass + time.sleep(1) + print(f"customHandler.errors: {customHandler.errors}") + assert len(customHandler.errors) == 0 + litellm.callbacks = [] + except Exception as e: + pytest.fail(f"An exception occurred: {str(e)}") + +# test_chat_azure_stream() + +## Test OpenAI + Async +@pytest.mark.asyncio +async def test_async_chat_azure_stream(): + try: + customHandler = CompletionCustomHandler() + litellm.callbacks = [customHandler] + response = await litellm.acompletion(model="azure/chatgpt-v-2", + messages=[{ + "role": "user", + "content": "Hi 👋 - i'm async azure" + }]) + ## test streaming + response = await litellm.acompletion(model="azure/chatgpt-v-2", + messages=[{ + "role": "user", + "content": "Hi 👋 - i'm async azure" + }], + stream=True) + async for chunk in response: + continue + ## test failure callback + try: + response = await litellm.acompletion(model="azure/chatgpt-v-2", + messages=[{ + "role": "user", + "content": "Hi 👋 - i'm async azure" + }], + api_key="my-bad-key", + stream=True) + async for chunk in response: + continue + except: + pass + time.sleep(1) + print(f"customHandler.errors: {customHandler.errors}") + assert len(customHandler.errors) == 0 + litellm.callbacks = [] + except Exception as e: + pytest.fail(f"An exception occurred: {str(e)}") + +# asyncio.run(test_async_chat_azure_stream()) \ No newline at end of file diff --git a/litellm/utils.py b/litellm/utils.py index 5494b00c7..0c48c83a8 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -801,9 +801,6 @@ class Logging: end_time = datetime.datetime.now() self.model_call_details["log_event_type"] = "successful_api_call" self.model_call_details["end_time"] = end_time - - if isinstance(result, OpenAIObject): - result = result.model_dump() if litellm.max_budget and self.stream: time_diff = (end_time - start_time).total_seconds() @@ -857,9 +854,6 @@ class Logging: call_type = self.call_type, stream = self.stream, ) - if callback == "api_manager": - print_verbose("reaches api manager for updating model cost") - litellm.apiManager.update_cost(completion_obj=result, user=self.user) if callback == "promptlayer": print_verbose("reaches promptlayer for logging!") promptLayerLogger.log_event( @@ -994,7 +988,7 @@ class Logging: end_time=end_time, print_verbose=print_verbose, ) - if isinstance(callback, CustomLogger): # custom logger class + if isinstance(callback, CustomLogger) and self.model_call_details.get("litellm_params", {}).get("acompletion", False) == False: # custom logger class - only call for sync callbacks print_verbose(f"success callbacks: Running Custom Logger Class") if self.stream and complete_streaming_response is None: callback.log_stream_event( @@ -1044,7 +1038,6 @@ class Logging: Implementing async callbacks, to handle asyncio event loop issues when custom integrations need to use async functions. """ print_verbose(f"Async success callbacks: {litellm._async_success_callback}") - ## BUILD COMPLETE STREAMED RESPONSE complete_streaming_response = None if self.stream: @@ -1081,6 +1074,13 @@ class Logging: start_time=start_time, end_time=end_time, ) + else: + await callback.async_log_stream_event( # [TODO]: move this to being an async log stream event function + kwargs=self.model_call_details, + response_obj=result, + start_time=start_time, + end_time=end_time + ) else: await callback.async_log_success_event( kwargs=self.model_call_details, @@ -1103,24 +1103,29 @@ class Logging: f"LiteLLM.LoggingError: [Non-Blocking] Exception occurred while success logging {traceback.format_exc()}" ) + def _failure_handler_helper_fn(self, exception, traceback_exception, start_time=None, end_time=None): + if start_time is None: + start_time = self.start_time + if end_time is None: + end_time = datetime.datetime.now() + + # on some exceptions, model_call_details is not always initialized, this ensures that we still log those exceptions + if not hasattr(self, "model_call_details"): + self.model_call_details = {} + + self.model_call_details["log_event_type"] = "failed_api_call" + self.model_call_details["exception"] = exception + self.model_call_details["traceback_exception"] = traceback_exception + self.model_call_details["end_time"] = end_time + self.model_call_details.setdefault("original_response", None) + return start_time, end_time + def failure_handler(self, exception, traceback_exception, start_time=None, end_time=None): print_verbose( f"Logging Details LiteLLM-Failure Call" ) try: - if start_time is None: - start_time = self.start_time - if end_time is None: - end_time = datetime.datetime.now() - - # on some exceptions, model_call_details is not always initialized, this ensures that we still log those exceptions - if not hasattr(self, "model_call_details"): - self.model_call_details = {} - - self.model_call_details["log_event_type"] = "failed_api_call" - self.model_call_details["exception"] = exception - self.model_call_details["traceback_exception"] = traceback_exception - self.model_call_details["end_time"] = end_time + start_time, end_time = self._failure_handler_helper_fn(exception=exception, traceback_exception=traceback_exception, start_time=start_time, end_time=end_time) result = None # result sent to all loggers, init this to None incase it's not created for callback in litellm.failure_callback: try: @@ -1212,16 +1217,8 @@ class Logging: """ Implementing async callbacks, to handle asyncio event loop issues when custom integrations need to use async functions. """ - # on some exceptions, model_call_details is not always initialized, this ensures that we still log those exceptions - if not hasattr(self, "model_call_details"): - self.model_call_details = {} - - self.model_call_details["log_event_type"] = "failed_api_call" - self.model_call_details["exception"] = exception - self.model_call_details["traceback_exception"] = traceback_exception - self.model_call_details["end_time"] = end_time - result = {} # result sent to all loggers, init this to None incase it's not created - + start_time, end_time = self._failure_handler_helper_fn(exception=exception, traceback_exception=traceback_exception, start_time=start_time, end_time=end_time) + result = None # result sent to all loggers, init this to None incase it's not created for callback in litellm._async_failure_callback: try: if isinstance(callback, CustomLogger): # custom logger class @@ -2060,7 +2057,6 @@ def register_model(model_cost: Union[str, dict]): return model_cost def get_litellm_params( - return_async=False, api_key=None, force_timeout=600, azure=False, @@ -2082,7 +2078,6 @@ def get_litellm_params( ): litellm_params = { "acompletion": acompletion, - "return_async": return_async, "api_key": api_key, "force_timeout": force_timeout, "logger_fn": logger_fn, @@ -5094,9 +5089,6 @@ class CustomStreamWrapper: self.special_tokens = ["<|assistant|>", "<|system|>", "<|user|>", "", ""] self.holding_chunk = "" self.complete_response = "" - if self.logging_obj: - # Log the type of the received item - self.logging_obj.post_call(str(type(completion_stream))) def __iter__(self): return self @@ -5121,10 +5113,6 @@ class CustomStreamWrapper: except Exception as e: raise e - def logging(self, text): - if self.logging_obj: - self.logging_obj.post_call(text) - def check_special_tokens(self, chunk: str, finish_reason: Optional[str]): hold = False if finish_reason: @@ -5638,16 +5626,12 @@ class CustomStreamWrapper: completion_obj["role"] = "assistant" self.sent_first_chunk = True model_response.choices[0].delta = Delta(**completion_obj) - # LOGGING - threading.Thread(target=self.logging_obj.success_handler, args=(model_response,)).start() print_verbose(f"model_response: {model_response}") return model_response else: return elif model_response.choices[0].finish_reason: model_response.choices[0].finish_reason = map_finish_reason(model_response.choices[0].finish_reason) # ensure consistent output to openai - # LOGGING - threading.Thread(target=self.logging_obj.success_handler, args=(model_response,)).start() return model_response elif response_obj is not None and response_obj.get("original_chunk", None) is not None: # function / tool calling branch - only set for openai/azure compatible endpoints # enter this branch when no content has been passed in response @@ -5668,8 +5652,6 @@ class CustomStreamWrapper: if self.sent_first_chunk == False: model_response.choices[0].delta["role"] = "assistant" self.sent_first_chunk = True - # LOGGING - threading.Thread(target=self.logging_obj.success_handler, args=(model_response,)).start() # log response return model_response else: return @@ -5678,8 +5660,6 @@ class CustomStreamWrapper: except Exception as e: traceback_exception = traceback.format_exc() e.message = str(e) - # LOG FAILURE - handle streaming failure logging in the _next_ object, remove `handle_failure` once it's deprecated - threading.Thread(target=self.logging_obj.failure_handler, args=(e, traceback_exception)).start() raise exception_type(model=self.model, custom_llm_provider=self.custom_llm_provider, original_exception=e) ## needs to handle the empty string case (even starting chunk can be an empty string) @@ -5692,12 +5672,17 @@ class CustomStreamWrapper: chunk = next(self.completion_stream) if chunk is not None and chunk != b'': response = self.chunk_creator(chunk=chunk) - if response is not None: - return response + if response is None: + continue + ## LOGGING + threading.Thread(target=self.logging_obj.success_handler, args=(response,)).start() # log response + return response except StopIteration: raise # Re-raise StopIteration except Exception as e: - # Handle other exceptions if needed + traceback_exception = traceback.format_exc() + # LOG FAILURE - handle streaming failure logging in the _next_ object, remove `handle_failure` once it's deprecated + threading.Thread(target=self.logging_obj.failure_handler, args=(e, traceback_exception)).start() raise e @@ -5728,7 +5713,9 @@ class CustomStreamWrapper: asyncio.create_task(self.logging_obj.async_success_handler(processed_chunk,)) return processed_chunk except Exception as e: + traceback_exception = traceback.format_exc() # Handle any exceptions that might occur during streaming + asyncio.create_task(self.logging_obj.async_failure_handler(e, traceback_exception)) raise StopAsyncIteration class TextCompletionStreamWrapper: From fa7bcd5825c55d0039fa7525b95ce052623e0427 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 11:56:47 -0800 Subject: [PATCH 388/460] (test) proxy custom logger --- litellm/tests/test_amazing_proxy_custom_logger.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/litellm/tests/test_amazing_proxy_custom_logger.py b/litellm/tests/test_amazing_proxy_custom_logger.py index bd008a0f8..886d8c42f 100644 --- a/litellm/tests/test_amazing_proxy_custom_logger.py +++ b/litellm/tests/test_amazing_proxy_custom_logger.py @@ -31,7 +31,7 @@ config_fp = f"{filepath}/test_configs/test_custom_logger.yaml" python_file_path = f"{filepath}/test_configs/custom_callbacks.py" save_worker_config(config=config_fp, model=None, alias=None, api_base=None, api_version=None, debug=False, temperature=None, max_tokens=None, request_timeout=600, max_budget=None, telemetry=False, drop_params=True, add_function_to_prompt=False, headers=None, save=False, use_queue=False) -@pytest.fixture(scope="session") +@pytest.fixture(scope="session", autouse=True) def app(): app = FastAPI() app.include_router(router) @@ -54,8 +54,6 @@ headers = { "Authorization": f"Bearer {token}" } - -@pytest.mark.no_parallel def test_embedding(client): try: # Your test data @@ -92,7 +90,7 @@ def test_embedding(client): except Exception as e: pytest.fail("LiteLLM Proxy test failed. Exception", e) -@pytest.mark.no_parallel + def test_chat_completion(client): try: # Your test data @@ -138,7 +136,7 @@ def test_chat_completion(client): except Exception as e: pytest.fail("LiteLLM Proxy test failed. Exception", e) -@pytest.mark.no_parallel + def test_chat_completion_stream(client): try: # Your test data From 89d9a5d38d854f96ddbe7b2f45f7514fc4e5a92b Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 12:00:26 -0800 Subject: [PATCH 389/460] (test) proxy custom logger --- ...roxy_custom_logger.py => test_aamazing_proxy_custom_logger.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename litellm/tests/{test_amazing_proxy_custom_logger.py => test_aamazing_proxy_custom_logger.py} (100%) diff --git a/litellm/tests/test_amazing_proxy_custom_logger.py b/litellm/tests/test_aamazing_proxy_custom_logger.py similarity index 100% rename from litellm/tests/test_amazing_proxy_custom_logger.py rename to litellm/tests/test_aamazing_proxy_custom_logger.py From e23700dd1951eb7fd4d44fcda40cc9965d9fbb1c Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 12:35:12 -0800 Subject: [PATCH 390/460] (test) custom logger --- .../test_aamazing_proxy_custom_logger.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/litellm/tests/test_aamazing_proxy_custom_logger.py b/litellm/tests/test_aamazing_proxy_custom_logger.py index 886d8c42f..a90be7d6b 100644 --- a/litellm/tests/test_aamazing_proxy_custom_logger.py +++ b/litellm/tests/test_aamazing_proxy_custom_logger.py @@ -16,12 +16,6 @@ from litellm import embedding, completion, completion_cost, Timeout from litellm import RateLimitError import importlib, inspect -# init callbacks to be empty -litellm.success_callback = [] -litellm.callbacks = [] -litellm.failure_callback = [] -litellm._async_success_callback = [] - # test /chat/completion request to the proxy from fastapi.testclient import TestClient from fastapi import FastAPI @@ -54,6 +48,12 @@ headers = { "Authorization": f"Bearer {token}" } +# init callbacks to be empty +litellm.success_callback = [] +litellm.callbacks = [] +litellm.failure_callback = [] +litellm._async_success_callback = [] + def test_embedding(client): try: # Your test data @@ -61,7 +61,8 @@ def test_embedding(client): # import the initialized custom logger print(litellm.callbacks) - assert len(litellm.callbacks) == 1 # assert litellm is initialized with 1 callback + # assert len(litellm.callbacks) == 1 # assert litellm is initialized with 1 callback + my_custom_logger = litellm.callbacks[0] assert my_custom_logger.async_success_embedding == False @@ -98,7 +99,7 @@ def test_chat_completion(client): # import the initialized custom logger print(litellm.callbacks) - assert len(litellm.callbacks) == 1 # assert litellm is initialized with 1 callback + # assert len(litellm.callbacks) == 1 # assert litellm is initialized with 1 callback my_custom_logger = litellm.callbacks[0] assert my_custom_logger.async_success == False @@ -145,7 +146,7 @@ def test_chat_completion_stream(client): # import the initialized custom logger print(litellm.callbacks) - assert len(litellm.callbacks) == 1 # assert litellm is initialized with 1 callback + # assert len(litellm.callbacks) == 1 # assert litellm is initialized with 1 callback my_custom_logger = litellm.callbacks[0] assert my_custom_logger.streaming_response_obj == None # no streaming response obj is set pre call From 5fc61f6d7a51d5feba077104733aeb582ec49cbf Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 12:39:28 -0800 Subject: [PATCH 391/460] (test) custom logger --- litellm/tests/test_aamazing_proxy_custom_logger.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/litellm/tests/test_aamazing_proxy_custom_logger.py b/litellm/tests/test_aamazing_proxy_custom_logger.py index a90be7d6b..b92f5aa5a 100644 --- a/litellm/tests/test_aamazing_proxy_custom_logger.py +++ b/litellm/tests/test_aamazing_proxy_custom_logger.py @@ -62,8 +62,12 @@ def test_embedding(client): print(litellm.callbacks) # assert len(litellm.callbacks) == 1 # assert litellm is initialized with 1 callback - + my_custom_logger = litellm.callbacks[0] + for callback in litellm.callbacks: + if "MyCustomHandler" in str(callback): + my_custom_logger = callback + break assert my_custom_logger.async_success_embedding == False test_data = { @@ -101,6 +105,10 @@ def test_chat_completion(client): # assert len(litellm.callbacks) == 1 # assert litellm is initialized with 1 callback my_custom_logger = litellm.callbacks[0] + for callback in litellm.callbacks: + if "MyCustomHandler" in str(callback): + my_custom_logger = callback + break assert my_custom_logger.async_success == False test_data = { @@ -148,6 +156,10 @@ def test_chat_completion_stream(client): # assert len(litellm.callbacks) == 1 # assert litellm is initialized with 1 callback my_custom_logger = litellm.callbacks[0] + for callback in litellm.callbacks: + if "MyCustomHandler" in str(callback): + my_custom_logger = callback + break assert my_custom_logger.streaming_response_obj == None # no streaming response obj is set pre call From 563bcbb8621cf565911c786107ca879442b8aa12 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 12:50:24 -0800 Subject: [PATCH 392/460] (test) proxy custom logger --- litellm/tests/test_aamazing_proxy_custom_logger.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/tests/test_aamazing_proxy_custom_logger.py b/litellm/tests/test_aamazing_proxy_custom_logger.py index b92f5aa5a..a48b6791a 100644 --- a/litellm/tests/test_aamazing_proxy_custom_logger.py +++ b/litellm/tests/test_aamazing_proxy_custom_logger.py @@ -25,7 +25,7 @@ config_fp = f"{filepath}/test_configs/test_custom_logger.yaml" python_file_path = f"{filepath}/test_configs/custom_callbacks.py" save_worker_config(config=config_fp, model=None, alias=None, api_base=None, api_version=None, debug=False, temperature=None, max_tokens=None, request_timeout=600, max_budget=None, telemetry=False, drop_params=True, add_function_to_prompt=False, headers=None, save=False, use_queue=False) -@pytest.fixture(scope="session", autouse=True) +@pytest.fixture(scope="module", autouse=True) def app(): app = FastAPI() app.include_router(router) From 6a3ba74183da68d5969328d60f44192aa2c05b4c Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 12:52:11 -0800 Subject: [PATCH 393/460] (test) proxy logging --- litellm/tests/test_aamazing_proxy_custom_logger.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/tests/test_aamazing_proxy_custom_logger.py b/litellm/tests/test_aamazing_proxy_custom_logger.py index a48b6791a..ce25cd226 100644 --- a/litellm/tests/test_aamazing_proxy_custom_logger.py +++ b/litellm/tests/test_aamazing_proxy_custom_logger.py @@ -25,7 +25,7 @@ config_fp = f"{filepath}/test_configs/test_custom_logger.yaml" python_file_path = f"{filepath}/test_configs/custom_callbacks.py" save_worker_config(config=config_fp, model=None, alias=None, api_base=None, api_version=None, debug=False, temperature=None, max_tokens=None, request_timeout=600, max_budget=None, telemetry=False, drop_params=True, add_function_to_prompt=False, headers=None, save=False, use_queue=False) -@pytest.fixture(scope="module", autouse=True) +@pytest.fixture(scope="function", autouse=True) def app(): app = FastAPI() app.include_router(router) From b09ecb986ef681684a0b7cd3b7832146de0e3f10 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Mon, 11 Dec 2023 12:59:49 -0800 Subject: [PATCH 394/460] test(test_custom_callback_input.py): add bedrock testing n n --- litellm/llms/bedrock.py | 2 +- litellm/main.py | 72 +++++++++--- litellm/tests/test_custom_callback_input.py | 120 +++++++++++++++++--- litellm/utils.py | 7 +- 4 files changed, 165 insertions(+), 36 deletions(-) diff --git a/litellm/llms/bedrock.py b/litellm/llms/bedrock.py index 9b6510400..5b3659f88 100644 --- a/litellm/llms/bedrock.py +++ b/litellm/llms/bedrock.py @@ -482,7 +482,7 @@ def completion( logging_obj.post_call( input=prompt, api_key="", - original_response=response_body, + original_response=json.dumps(response_body), additional_args={"complete_input_dict": data}, ) print_verbose(f"raw model_response: {response}") diff --git a/litellm/main.py b/litellm/main.py index e92e5e746..3b50c075b 100644 --- a/litellm/main.py +++ b/litellm/main.py @@ -683,9 +683,14 @@ def completion( logger_fn=logger_fn ) - # if "stream" in optional_params and optional_params["stream"] == True: - # response = CustomStreamWrapper(model_response, model, custom_llm_provider="text-completion-openai", logging_obj=logging) - # return response + if optional_params.get("stream", False) or acompletion == True: + ## LOGGING + logging.post_call( + input=messages, + api_key=api_key, + original_response=model_response, + additional_args={"headers": headers}, + ) response = model_response elif ( "replicate" in model or @@ -730,8 +735,16 @@ def completion( ) if "stream" in optional_params and optional_params["stream"] == True: # don't try to access stream object, - response = CustomStreamWrapper(model_response, model, logging_obj=logging, custom_llm_provider="replicate") - return response + model_response = CustomStreamWrapper(model_response, model, logging_obj=logging, custom_llm_provider="replicate") # type: ignore + + if optional_params.get("stream", False) or acompletion == True: + ## LOGGING + logging.post_call( + input=messages, + api_key=replicate_key, + original_response=model_response, + ) + response = model_response elif custom_llm_provider=="anthropic": @@ -751,7 +764,7 @@ def completion( custom_prompt_dict or litellm.custom_prompt_dict ) - model_response = anthropic.completion( + response = anthropic.completion( model=model, messages=messages, api_base=api_base, @@ -767,9 +780,16 @@ def completion( ) if "stream" in optional_params and optional_params["stream"] == True: # don't try to access stream object, - response = CustomStreamWrapper(model_response, model, custom_llm_provider="anthropic", logging_obj=logging) - return response - response = model_response + response = CustomStreamWrapper(response, model, custom_llm_provider="anthropic", logging_obj=logging) + + if optional_params.get("stream", False) or acompletion == True: + ## LOGGING + logging.post_call( + input=messages, + api_key=api_key, + original_response=response, + ) + response = response elif custom_llm_provider == "nlp_cloud": nlp_cloud_key = ( api_key or litellm.nlp_cloud_key or get_secret("NLP_CLOUD_API_KEY") or litellm.api_key @@ -782,7 +802,7 @@ def completion( or "https://api.nlpcloud.io/v1/gpu/" ) - model_response = nlp_cloud.completion( + response = nlp_cloud.completion( model=model, messages=messages, api_base=api_base, @@ -798,9 +818,17 @@ def completion( if "stream" in optional_params and optional_params["stream"] == True: # don't try to access stream object, - response = CustomStreamWrapper(model_response, model, custom_llm_provider="nlp_cloud", logging_obj=logging) - return response - response = model_response + response = CustomStreamWrapper(response, model, custom_llm_provider="nlp_cloud", logging_obj=logging) + + if optional_params.get("stream", False) or acompletion == True: + ## LOGGING + logging.post_call( + input=messages, + api_key=api_key, + original_response=response, + ) + + response = response elif custom_llm_provider == "aleph_alpha": aleph_alpha_key = ( api_key or litellm.aleph_alpha_key or get_secret("ALEPH_ALPHA_API_KEY") or get_secret("ALEPHALPHA_API_KEY") or litellm.api_key @@ -1202,7 +1230,7 @@ def completion( custom_prompt_dict or litellm.custom_prompt_dict ) - model_response = bedrock.completion( + response = bedrock.completion( model=model, messages=messages, custom_prompt_dict=litellm.custom_prompt_dict, @@ -1220,16 +1248,24 @@ def completion( # don't try to access stream object, if "ai21" in model: response = CustomStreamWrapper( - model_response, model, custom_llm_provider="bedrock", logging_obj=logging + response, model, custom_llm_provider="bedrock", logging_obj=logging ) else: response = CustomStreamWrapper( - iter(model_response), model, custom_llm_provider="bedrock", logging_obj=logging + iter(response), model, custom_llm_provider="bedrock", logging_obj=logging ) - return response + + if optional_params.get("stream", False): + ## LOGGING + logging.post_call( + input=messages, + api_key=None, + original_response=response, + ) + ## RESPONSE OBJECT - response = model_response + response = response elif custom_llm_provider == "vllm": model_response = vllm.completion( model=model, diff --git a/litellm/tests/test_custom_callback_input.py b/litellm/tests/test_custom_callback_input.py index 428d2e4d8..0102f6eb7 100644 --- a/litellm/tests/test_custom_callback_input.py +++ b/litellm/tests/test_custom_callback_input.py @@ -53,6 +53,9 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse def log_post_api_call(self, kwargs, response_obj, start_time, end_time): try: + print("IN POST CALL API") + print(f"kwargs input: {kwargs['input']}") + print(f"kwargs original response: {kwargs['original_response']}") ## START TIME assert isinstance(start_time, datetime) ## END TIME @@ -67,8 +70,8 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse assert isinstance(kwargs['start_time'], Optional[datetime]) assert isinstance(kwargs['stream'], bool) assert isinstance(kwargs['user'], Optional[str]) - assert isinstance(kwargs['input'], list) and isinstance(kwargs['input'][0], dict) - assert isinstance(kwargs['api_key'], str) + assert (isinstance(kwargs['input'], list) and isinstance(kwargs['input'][0], dict)) or isinstance(kwargs['input'], (dict, str)) + assert isinstance(kwargs['api_key'], Optional[str]) assert isinstance(kwargs['original_response'], (str, litellm.CustomStreamWrapper)) or inspect.iscoroutine(kwargs['original_response']) or inspect.isasyncgen(kwargs['original_response']) assert isinstance(kwargs['additional_args'], Optional[dict]) assert isinstance(kwargs['log_event_type'], str) @@ -92,9 +95,9 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse assert isinstance(kwargs['start_time'], Optional[datetime]) assert isinstance(kwargs['stream'], bool) assert isinstance(kwargs['user'], Optional[str]) - assert isinstance(kwargs['input'], list) and isinstance(kwargs['input'][0], dict) - assert isinstance(kwargs['api_key'], str) - assert inspect.isasyncgen(kwargs['original_response']) or inspect.iscoroutine(kwargs['original_response']) + assert (isinstance(kwargs['input'], list) and isinstance(kwargs['input'][0], dict)) or isinstance(kwargs['input'], (dict, str)) + assert isinstance(kwargs['api_key'], Optional[str]) + assert isinstance(kwargs['original_response'], (str, litellm.CustomStreamWrapper)) or inspect.isasyncgen(kwargs['original_response']) or inspect.iscoroutine(kwargs['original_response']) assert isinstance(kwargs['additional_args'], Optional[dict]) assert isinstance(kwargs['log_event_type'], str) except: @@ -117,8 +120,8 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse assert isinstance(kwargs['start_time'], Optional[datetime]) assert isinstance(kwargs['stream'], bool) assert isinstance(kwargs['user'], Optional[str]) - assert isinstance(kwargs['input'], list) and isinstance(kwargs['input'][0], dict) - assert isinstance(kwargs['api_key'], str) + assert (isinstance(kwargs['input'], list) and isinstance(kwargs['input'][0], dict)) or isinstance(kwargs['input'], (dict, str)) + assert isinstance(kwargs['api_key'], Optional[str]) assert isinstance(kwargs['original_response'], (str, litellm.CustomStreamWrapper)) assert isinstance(kwargs['additional_args'], Optional[dict]) assert isinstance(kwargs['log_event_type'], str) @@ -142,8 +145,8 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse assert isinstance(kwargs['start_time'], Optional[datetime]) assert isinstance(kwargs['stream'], bool) assert isinstance(kwargs['user'], Optional[str]) - assert isinstance(kwargs['input'], list) and isinstance(kwargs['input'][0], dict) - assert isinstance(kwargs['api_key'], str) + assert (isinstance(kwargs['input'], list) and isinstance(kwargs['input'][0], dict)) or isinstance(kwargs['input'], (dict, str)) + assert isinstance(kwargs['api_key'], Optional[str]) assert isinstance(kwargs['original_response'], (str, litellm.CustomStreamWrapper)) or kwargs["original_response"] == None assert isinstance(kwargs['additional_args'], Optional[dict]) assert isinstance(kwargs['log_event_type'], str) @@ -185,9 +188,9 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse assert isinstance(kwargs['start_time'], Optional[datetime]) assert isinstance(kwargs['stream'], bool) assert isinstance(kwargs['user'], Optional[str]) - assert isinstance(kwargs['input'], list) and isinstance(kwargs['input'][0], dict) - assert isinstance(kwargs['api_key'], str) - assert isinstance(kwargs['original_response'], str) or inspect.isasyncgen(kwargs['original_response']) or inspect.iscoroutine(kwargs['original_response']) + assert (isinstance(kwargs['input'], list) and isinstance(kwargs['input'][0], dict)) or isinstance(kwargs['input'], (dict, str)) + assert isinstance(kwargs['api_key'], Optional[str]) + assert isinstance(kwargs['original_response'], (str, litellm.CustomStreamWrapper)) or inspect.isasyncgen(kwargs['original_response']) or inspect.iscoroutine(kwargs['original_response']) assert isinstance(kwargs['additional_args'], Optional[dict]) assert isinstance(kwargs['log_event_type'], str) except: @@ -210,8 +213,8 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse assert isinstance(kwargs['start_time'], Optional[datetime]) assert isinstance(kwargs['stream'], bool) assert isinstance(kwargs['user'], Optional[str]) - assert isinstance(kwargs['input'], list) and isinstance(kwargs['input'][0], dict) - assert isinstance(kwargs['api_key'], str) + assert (isinstance(kwargs['input'], list) and isinstance(kwargs['input'][0], dict)) or isinstance(kwargs['input'], (dict, str)) + assert isinstance(kwargs['api_key'], Optional[str]) assert isinstance(kwargs['original_response'], (str, litellm.CustomStreamWrapper)) or inspect.isasyncgen(kwargs['original_response']) assert isinstance(kwargs['additional_args'], Optional[dict]) assert isinstance(kwargs['log_event_type'], str) @@ -343,7 +346,7 @@ def test_chat_azure_stream(): # test_chat_azure_stream() -## Test OpenAI + Async +## Test Azure + Async @pytest.mark.asyncio async def test_async_chat_azure_stream(): try: @@ -383,4 +386,89 @@ async def test_async_chat_azure_stream(): except Exception as e: pytest.fail(f"An exception occurred: {str(e)}") -# asyncio.run(test_async_chat_azure_stream()) \ No newline at end of file +# asyncio.run(test_async_chat_azure_stream()) + +## Test Bedrock + sync +def test_chat_bedrock_stream(): + try: + customHandler = CompletionCustomHandler() + litellm.callbacks = [customHandler] + response = litellm.completion(model="bedrock/anthropic.claude-v1", + messages=[{ + "role": "user", + "content": "Hi 👋 - i'm sync bedrock" + }]) + # test streaming + response = litellm.completion(model="bedrock/anthropic.claude-v1", + messages=[{ + "role": "user", + "content": "Hi 👋 - i'm sync bedrock" + }], + stream=True) + for chunk in response: + continue + # test failure callback + try: + response = litellm.completion(model="bedrock/anthropic.claude-v1", + messages=[{ + "role": "user", + "content": "Hi 👋 - i'm sync bedrock" + }], + aws_region_name="my-bad-region", + stream=True) + for chunk in response: + continue + except: + pass + time.sleep(1) + print(f"customHandler.errors: {customHandler.errors}") + assert len(customHandler.errors) == 0 + litellm.callbacks = [] + except Exception as e: + pytest.fail(f"An exception occurred: {str(e)}") + +# test_chat_bedrock_stream() + +## Test Bedrock + Async +@pytest.mark.asyncio +async def test_async_chat_bedrock_stream(): + try: + customHandler = CompletionCustomHandler() + litellm.callbacks = [customHandler] + response = await litellm.acompletion(model="bedrock/anthropic.claude-v1", + messages=[{ + "role": "user", + "content": "Hi 👋 - i'm async bedrock" + }]) + # test streaming + response = await litellm.acompletion(model="bedrock/anthropic.claude-v1", + messages=[{ + "role": "user", + "content": "Hi 👋 - i'm async bedrock" + }], + stream=True) + print(f"response: {response}") + async for chunk in response: + print(f"chunk: {chunk}") + continue + ## test failure callback + try: + response = await litellm.acompletion(model="bedrock/anthropic.claude-v1", + messages=[{ + "role": "user", + "content": "Hi 👋 - i'm async bedrock" + }], + aws_region_name="my-bad-key", + stream=True) + async for chunk in response: + continue + except: + pass + time.sleep(1) + print(f"customHandler.errors: {customHandler.errors}") + assert len(customHandler.errors) == 0 + litellm.callbacks = [] + except Exception as e: + pytest.fail(f"An exception occurred: {str(e)}") + +# asyncio.run(test_async_chat_bedrock_stream()) \ No newline at end of file diff --git a/litellm/utils.py b/litellm/utils.py index 0c48c83a8..1e61d7989 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -815,6 +815,7 @@ class Logging: print_verbose( f"Logging Details LiteLLM-Success Call" ) + # print(f"original response in success handler: {self.model_call_details['original_response']}") try: print_verbose(f"success callbacks: {litellm.success_callback}") ## BUILD COMPLETE STREAMED RESPONSE @@ -1191,7 +1192,7 @@ class Logging: print_verbose=print_verbose, callback_func=callback ) - elif isinstance(callback, CustomLogger): # custom logger class + elif isinstance(callback, CustomLogger) and self.model_call_details.get("litellm_params", {}).get("acompletion", False) == False: # custom logger class callback.log_failure_event( start_time=start_time, end_time=end_time, @@ -5712,6 +5713,10 @@ class CustomStreamWrapper: processed_chunk = next(self) asyncio.create_task(self.logging_obj.async_success_handler(processed_chunk,)) return processed_chunk + except StopAsyncIteration: + raise + except StopIteration: + raise StopAsyncIteration # Re-raise StopIteration except Exception as e: traceback_exception = traceback.format_exc() # Handle any exceptions that might occur during streaming From e10b70117195a7cbed270bb3cb67a4b9f22bdc69 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 13:00:04 -0800 Subject: [PATCH 395/460] (test) proxy custom logger --- .../test_aamazing_proxy_custom_logger.py | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/litellm/tests/test_aamazing_proxy_custom_logger.py b/litellm/tests/test_aamazing_proxy_custom_logger.py index ce25cd226..353036a9b 100644 --- a/litellm/tests/test_aamazing_proxy_custom_logger.py +++ b/litellm/tests/test_aamazing_proxy_custom_logger.py @@ -24,20 +24,15 @@ filepath = os.path.dirname(os.path.abspath(__file__)) config_fp = f"{filepath}/test_configs/test_custom_logger.yaml" python_file_path = f"{filepath}/test_configs/custom_callbacks.py" save_worker_config(config=config_fp, model=None, alias=None, api_base=None, api_version=None, debug=False, temperature=None, max_tokens=None, request_timeout=600, max_budget=None, telemetry=False, drop_params=True, add_function_to_prompt=False, headers=None, save=False, use_queue=False) - -@pytest.fixture(scope="function", autouse=True) -def app(): - app = FastAPI() - app.include_router(router) - - # Perform the startup initialization only once - initialize(config=config_fp, model=None, alias=None, api_base=None, api_version=None, debug=True, temperature=None, max_tokens=None, request_timeout=600, max_budget=None, telemetry=False, drop_params=True, add_function_to_prompt=False, headers=None, save=False, use_queue=False) - - return app +app = FastAPI() +app.include_router(router) # Include your router in the test app +@app.on_event("startup") +async def wrapper_startup_event(): + initialize(config=config_fp) # Use the app fixture in your client fixture -@pytest.fixture -def client(app): +@pytest.fixture(autouse=True) +def client(): with TestClient(app) as client: yield client From 3c8c5980d8c479348196acb121196471bdc76193 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 13:05:28 -0800 Subject: [PATCH 396/460] (test) custom logger --- litellm/tests/test_aamazing_proxy_custom_logger.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/litellm/tests/test_aamazing_proxy_custom_logger.py b/litellm/tests/test_aamazing_proxy_custom_logger.py index 353036a9b..9ed68d78b 100644 --- a/litellm/tests/test_aamazing_proxy_custom_logger.py +++ b/litellm/tests/test_aamazing_proxy_custom_logger.py @@ -88,7 +88,7 @@ def test_embedding(client): result = response.json() print(f"Received response: {result}") except Exception as e: - pytest.fail("LiteLLM Proxy test failed. Exception", e) + pytest.fail(f"LiteLLM Proxy test failed. Exception {str(e)}") def test_chat_completion(client): @@ -138,7 +138,7 @@ def test_chat_completion(client): print(f"Received response: {result}") print("\nPassed /chat/completions with Custom Logger!") except Exception as e: - pytest.fail("LiteLLM Proxy test failed. Exception", e) + pytest.fail(f"LiteLLM Proxy test failed. Exception {str(e)}") def test_chat_completion_stream(client): @@ -206,4 +206,4 @@ def test_chat_completion_stream(client): assert complete_response == streamed_response["choices"][0]["message"]["content"] except Exception as e: - pytest.fail("LiteLLM Proxy test failed. Exception", e) + pytest.fail(f"LiteLLM Proxy test failed. Exception {str(e)}") From f3131f12546dc06e48de35b2bb13b0e76cb1b427 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 14:22:55 -0800 Subject: [PATCH 397/460] (test) proxy custom logger --- litellm/tests/test_aamazing_proxy_custom_logger.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/litellm/tests/test_aamazing_proxy_custom_logger.py b/litellm/tests/test_aamazing_proxy_custom_logger.py index 9ed68d78b..7ae3baec6 100644 --- a/litellm/tests/test_aamazing_proxy_custom_logger.py +++ b/litellm/tests/test_aamazing_proxy_custom_logger.py @@ -20,6 +20,8 @@ import importlib, inspect from fastapi.testclient import TestClient from fastapi import FastAPI from litellm.proxy.proxy_server import router, save_worker_config, initialize # Replace with the actual module where your FastAPI router is defined + + filepath = os.path.dirname(os.path.abspath(__file__)) config_fp = f"{filepath}/test_configs/test_custom_logger.yaml" python_file_path = f"{filepath}/test_configs/custom_callbacks.py" @@ -31,7 +33,7 @@ async def wrapper_startup_event(): initialize(config=config_fp) # Use the app fixture in your client fixture -@pytest.fixture(autouse=True) +@pytest.fixture() def client(): with TestClient(app) as client: yield client From da96f5a5ac1bd619ebbcfabeedbde9244be71ffb Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 14:37:23 -0800 Subject: [PATCH 398/460] (test) custom logger proxy --- .../tests/test_aamazing_proxy_custom_logger.py | 18 +++++++++++++++--- litellm/tests/test_configs/custom_callbacks.py | 4 ++-- litellm/tests/test_router_get_deployments.py | 2 +- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/litellm/tests/test_aamazing_proxy_custom_logger.py b/litellm/tests/test_aamazing_proxy_custom_logger.py index 7ae3baec6..84883776e 100644 --- a/litellm/tests/test_aamazing_proxy_custom_logger.py +++ b/litellm/tests/test_aamazing_proxy_custom_logger.py @@ -62,9 +62,11 @@ def test_embedding(client): my_custom_logger = litellm.callbacks[0] for callback in litellm.callbacks: - if "MyCustomHandler" in str(callback): + if "testCustomCallbackProxy" in str(callback): my_custom_logger = callback break + print("LiteLLM Callbacks", litellm.callbacks) + print("my_custom_logger", my_custom_logger) assert my_custom_logger.async_success_embedding == False test_data = { @@ -73,6 +75,8 @@ def test_embedding(client): } response = client.post("/embeddings", json=test_data, headers=headers) print("made request", response.status_code, response.text) + print("LiteLLM Callbacks", litellm.callbacks) + print("my_custom_logger", my_custom_logger) assert my_custom_logger.async_success_embedding == True # checks if the status of async_success is True, only the async_log_success_event can set this to true assert my_custom_logger.async_embedding_kwargs["model"] == "azure-embedding-model" # checks if kwargs passed to async_log_success_event are correct @@ -103,9 +107,11 @@ def test_chat_completion(client): # assert len(litellm.callbacks) == 1 # assert litellm is initialized with 1 callback my_custom_logger = litellm.callbacks[0] for callback in litellm.callbacks: - if "MyCustomHandler" in str(callback): + if "testCustomCallbackProxy" in str(callback): my_custom_logger = callback break + print("LiteLLM Callbacks", litellm.callbacks) + print("my_custom_logger", my_custom_logger) assert my_custom_logger.async_success == False test_data = { @@ -122,6 +128,8 @@ def test_chat_completion(client): response = client.post("/chat/completions", json=test_data, headers=headers) print("made request", response.status_code, response.text) + print("LiteLLM Callbacks", litellm.callbacks) + print("my_custom_logger", my_custom_logger) assert my_custom_logger.async_success == True # checks if the status of async_success is True, only the async_log_success_event can set this to true assert my_custom_logger.async_completion_kwargs["model"] == "chatgpt-v-2" # checks if kwargs passed to async_log_success_event are correct print("\n\n Custom Logger Async Completion args", my_custom_logger.async_completion_kwargs) @@ -153,11 +161,15 @@ def test_chat_completion_stream(client): # assert len(litellm.callbacks) == 1 # assert litellm is initialized with 1 callback my_custom_logger = litellm.callbacks[0] + for callback in litellm.callbacks: - if "MyCustomHandler" in str(callback): + if "testCustomCallbackProxy" in str(callback): my_custom_logger = callback break + print("LiteLLM Callbacks", litellm.callbacks) + print("my_custom_logger", my_custom_logger) + assert my_custom_logger.streaming_response_obj == None # no streaming response obj is set pre call test_data = { diff --git a/litellm/tests/test_configs/custom_callbacks.py b/litellm/tests/test_configs/custom_callbacks.py index 71f74bbc2..a415fe5e4 100644 --- a/litellm/tests/test_configs/custom_callbacks.py +++ b/litellm/tests/test_configs/custom_callbacks.py @@ -2,7 +2,7 @@ from litellm.integrations.custom_logger import CustomLogger import inspect import litellm -class MyCustomHandler(CustomLogger): +class testCustomCallbackProxy(CustomLogger): def __init__(self): self.success: bool = False # type: ignore self.failure: bool = False # type: ignore @@ -107,4 +107,4 @@ class MyCustomHandler(CustomLogger): self.async_completion_kwargs_fail = kwargs -my_custom_logger = MyCustomHandler() \ No newline at end of file +my_custom_logger = testCustomCallbackProxy() \ No newline at end of file diff --git a/litellm/tests/test_router_get_deployments.py b/litellm/tests/test_router_get_deployments.py index 3e6bbd2b6..f9ca124c2 100644 --- a/litellm/tests/test_router_get_deployments.py +++ b/litellm/tests/test_router_get_deployments.py @@ -326,7 +326,7 @@ def test_model_group_aliases(): selected_model = router.get_available_deployment("gpt-4") print("\n selected model", selected_model) selected_model_name = selected_model.get("model_name") - if selected_model_name is not "gpt-3.5-turbo": + if selected_model_name != "gpt-3.5-turbo": pytest.fail(f"Selected model {selected_model_name} is not gpt-3.5-turbo") router.reset() From b85e2399c055fe168970375a591fa09d7713374c Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 15:16:27 -0800 Subject: [PATCH 399/460] (test) proxy custom logger --- litellm/tests/test_aamazing_proxy_custom_logger.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/litellm/tests/test_aamazing_proxy_custom_logger.py b/litellm/tests/test_aamazing_proxy_custom_logger.py index 84883776e..9325d5f88 100644 --- a/litellm/tests/test_aamazing_proxy_custom_logger.py +++ b/litellm/tests/test_aamazing_proxy_custom_logger.py @@ -33,7 +33,7 @@ async def wrapper_startup_event(): initialize(config=config_fp) # Use the app fixture in your client fixture -@pytest.fixture() +@pytest.fixture(scope="function") def client(): with TestClient(app) as client: yield client @@ -51,6 +51,8 @@ litellm.callbacks = [] litellm.failure_callback = [] litellm._async_success_callback = [] +print("Testing proxy custom logger") + def test_embedding(client): try: # Your test data @@ -93,6 +95,7 @@ def test_embedding(client): assert model_info == {'input_cost_per_token': 0.002, 'mode': 'embedding', 'id': 'hello'} result = response.json() print(f"Received response: {result}") + print("Passed Embedding custom logger on proxy!") except Exception as e: pytest.fail(f"LiteLLM Proxy test failed. Exception {str(e)}") @@ -129,7 +132,8 @@ def test_chat_completion(client): response = client.post("/chat/completions", json=test_data, headers=headers) print("made request", response.status_code, response.text) print("LiteLLM Callbacks", litellm.callbacks) - print("my_custom_logger", my_custom_logger) + print("my_custom_logger in /chat/completions", my_custom_logger) + print("vars my custom logger, ", vars(my_custom_logger)) assert my_custom_logger.async_success == True # checks if the status of async_success is True, only the async_log_success_event can set this to true assert my_custom_logger.async_completion_kwargs["model"] == "chatgpt-v-2" # checks if kwargs passed to async_log_success_event are correct print("\n\n Custom Logger Async Completion args", my_custom_logger.async_completion_kwargs) @@ -221,3 +225,4 @@ def test_chat_completion_stream(client): except Exception as e: pytest.fail(f"LiteLLM Proxy test failed. Exception {str(e)}") + From cd671f321190262b4857f6c9ba3f7e362042346d Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 15:27:08 -0800 Subject: [PATCH 400/460] (test) proxy custom logger --- litellm/tests/test_aamazing_proxy_custom_logger.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/litellm/tests/test_aamazing_proxy_custom_logger.py b/litellm/tests/test_aamazing_proxy_custom_logger.py index 9325d5f88..e53ae3fc3 100644 --- a/litellm/tests/test_aamazing_proxy_custom_logger.py +++ b/litellm/tests/test_aamazing_proxy_custom_logger.py @@ -3,7 +3,7 @@ import traceback from dotenv import load_dotenv load_dotenv() -import os, io +import os, io, asyncio # this file is to test litellm/proxy @@ -122,7 +122,7 @@ def test_chat_completion(client): "messages": [ { "role": "user", - "content": "hi" + "content": "write a litellm poem" }, ], "max_tokens": 10, @@ -132,6 +132,8 @@ def test_chat_completion(client): response = client.post("/chat/completions", json=test_data, headers=headers) print("made request", response.status_code, response.text) print("LiteLLM Callbacks", litellm.callbacks) + asyncio.sleep(1) # sleep while waiting for callback to run + print("my_custom_logger in /chat/completions", my_custom_logger) print("vars my custom logger, ", vars(my_custom_logger)) assert my_custom_logger.async_success == True # checks if the status of async_success is True, only the async_log_success_event can set this to true From 8ee77d7b82b77140bf09fdc4c4a5a76b71c7be77 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 15:30:24 -0800 Subject: [PATCH 401/460] (test) custom logger --- litellm/tests/test_aamazing_proxy_custom_logger.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/tests/test_aamazing_proxy_custom_logger.py b/litellm/tests/test_aamazing_proxy_custom_logger.py index e53ae3fc3..263114985 100644 --- a/litellm/tests/test_aamazing_proxy_custom_logger.py +++ b/litellm/tests/test_aamazing_proxy_custom_logger.py @@ -149,7 +149,7 @@ def test_chat_completion(client): proxy_server_request_object = litellm_params.get("proxy_server_request") assert config_model_info == {'id': 'gm', 'input_cost_per_token': 0.0002, 'mode': 'chat'} - assert proxy_server_request_object == {'url': 'http://testserver/chat/completions', 'method': 'POST', 'headers': {'host': 'testserver', 'accept': '*/*', 'accept-encoding': 'gzip, deflate', 'connection': 'keep-alive', 'user-agent': 'testclient', 'authorization': 'Bearer sk-1234', 'content-length': '105', 'content-type': 'application/json'}, 'body': {'model': 'Azure OpenAI GPT-4 Canada', 'messages': [{'role': 'user', 'content': 'hi'}], 'max_tokens': 10}} + assert proxy_server_request_object == {'url': 'http://testserver/chat/completions', 'method': 'POST', 'headers': {'host': 'testserver', 'accept': '*/*', 'accept-encoding': 'gzip, deflate', 'connection': 'keep-alive', 'user-agent': 'testclient', 'authorization': 'Bearer sk-1234', 'content-length': '123', 'content-type': 'application/json'}, 'body': {'model': 'Azure OpenAI GPT-4 Canada', 'messages': [{'role': 'user', 'content': 'write a litellm poem'}], 'max_tokens': 10}} result = response.json() print(f"Received response: {result}") print("\nPassed /chat/completions with Custom Logger!") From ad39afc0ad53e771959a869f1810556043af3f7e Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Mon, 11 Dec 2023 15:32:34 -0800 Subject: [PATCH 402/460] test(test_custom_callback_input.py): embedding callback tests for azure, openai, bedrock --- litellm/llms/azure.py | 36 +++-- litellm/llms/bedrock.py | 11 +- litellm/llms/openai.py | 35 +++-- litellm/main.py | 6 +- litellm/tests/test_custom_callback_input.py | 138 +++++++++++++++++--- litellm/utils.py | 8 +- 6 files changed, 185 insertions(+), 49 deletions(-) diff --git a/litellm/llms/azure.py b/litellm/llms/azure.py index 2677d12c5..b014667df 100644 --- a/litellm/llms/azure.py +++ b/litellm/llms/azure.py @@ -329,7 +329,10 @@ class AzureChatCompletion(BaseLLM): data: dict, model_response: ModelResponse, azure_client_params: dict, + api_key: str, + input: list, client=None, + logging_obj=None ): response = None try: @@ -338,8 +341,23 @@ class AzureChatCompletion(BaseLLM): else: openai_aclient = client response = await openai_aclient.embeddings.create(**data) - return convert_to_model_response_object(response_object=json.loads(response.model_dump_json()), model_response_object=model_response, response_type="embedding") + stringified_response = response.model_dump_json() + ## LOGGING + logging_obj.post_call( + input=input, + api_key=api_key, + additional_args={"complete_input_dict": data}, + original_response=stringified_response, + ) + return convert_to_model_response_object(response_object=json.loads(stringified_response), model_response_object=model_response, response_type="embedding") except Exception as e: + ## LOGGING + logging_obj.post_call( + input=input, + api_key=api_key, + additional_args={"complete_input_dict": data}, + original_response=str(e), + ) raise e def embedding(self, @@ -383,13 +401,7 @@ class AzureChatCompletion(BaseLLM): azure_client_params["api_key"] = api_key elif azure_ad_token is not None: azure_client_params["azure_ad_token"] = azure_ad_token - if aembedding == True: - response = self.aembedding(data=data, model_response=model_response, azure_client_params=azure_client_params) - return response - if client is None: - azure_client = AzureOpenAI(**azure_client_params) # type: ignore - else: - azure_client = client + ## LOGGING logging_obj.pre_call( input=input, @@ -402,6 +414,14 @@ class AzureChatCompletion(BaseLLM): } }, ) + + if aembedding == True: + response = self.aembedding(data=data, input=input, logging_obj=logging_obj, api_key=api_key, model_response=model_response, azure_client_params=azure_client_params) + return response + if client is None: + azure_client = AzureOpenAI(**azure_client_params) # type: ignore + else: + azure_client = client ## COMPLETION CALL response = azure_client.embeddings.create(**data) # type: ignore ## LOGGING diff --git a/litellm/llms/bedrock.py b/litellm/llms/bedrock.py index 5b3659f88..5207c4cca 100644 --- a/litellm/llms/bedrock.py +++ b/litellm/llms/bedrock.py @@ -587,7 +587,7 @@ def _embedding_func_single( input=input, api_key="", additional_args={"complete_input_dict": data}, - original_response=response_body, + original_response=json.dumps(response_body), ) if provider == "cohere": response = response_body.get("embeddings") @@ -650,14 +650,5 @@ def embedding( total_tokens=input_tokens + 0 ) model_response.usage = usage - - ## LOGGING - logging_obj.post_call( - input=input, - api_key=api_key, - additional_args={"complete_input_dict": {"model": model, - "texts": input}}, - original_response=embeddings, - ) return model_response diff --git a/litellm/llms/openai.py b/litellm/llms/openai.py index 9c16708e2..33d3504bb 100644 --- a/litellm/llms/openai.py +++ b/litellm/llms/openai.py @@ -326,6 +326,7 @@ class OpenAIChatCompletion(BaseLLM): raise OpenAIError(status_code=500, message=f"{str(e)}") async def aembedding( self, + input: list, data: dict, model_response: ModelResponse, timeout: float, @@ -333,6 +334,7 @@ class OpenAIChatCompletion(BaseLLM): api_base: Optional[str]=None, client=None, max_retries=None, + logging_obj=None ): response = None try: @@ -341,9 +343,24 @@ class OpenAIChatCompletion(BaseLLM): else: openai_aclient = client response = await openai_aclient.embeddings.create(**data) # type: ignore - return response + stringified_response = response.model_dump_json() + ## LOGGING + logging_obj.post_call( + input=input, + api_key=api_key, + additional_args={"complete_input_dict": data}, + original_response=stringified_response, + ) + return convert_to_model_response_object(response_object=json.loads(stringified_response), model_response_object=model_response, response_type="embedding") # type: ignore except Exception as e: + ## LOGGING + logging_obj.post_call( + input=input, + api_key=api_key, + original_response=str(e), + ) raise e + def embedding(self, model: str, input: list, @@ -368,13 +385,7 @@ class OpenAIChatCompletion(BaseLLM): max_retries = data.pop("max_retries", 2) if not isinstance(max_retries, int): raise OpenAIError(status_code=422, message="max retries must be an int") - if aembedding == True: - response = self.aembedding(data=data, model_response=model_response, api_base=api_base, api_key=api_key, timeout=timeout, client=client, max_retries=max_retries) # type: ignore - return response - if client is None: - openai_client = OpenAI(api_key=api_key, base_url=api_base, http_client=litellm.client_session, timeout=timeout, max_retries=max_retries) - else: - openai_client = client + ## LOGGING logging_obj.pre_call( input=input, @@ -382,6 +393,14 @@ class OpenAIChatCompletion(BaseLLM): additional_args={"complete_input_dict": data, "api_base": api_base}, ) + if aembedding == True: + response = self.aembedding(data=data, input=input, logging_obj=logging_obj, model_response=model_response, api_base=api_base, api_key=api_key, timeout=timeout, client=client, max_retries=max_retries) # type: ignore + return response + if client is None: + openai_client = OpenAI(api_key=api_key, base_url=api_base, http_client=litellm.client_session, timeout=timeout, max_retries=max_retries) + else: + openai_client = client + ## COMPLETION CALL response = openai_client.embeddings.create(**data) # type: ignore ## LOGGING diff --git a/litellm/main.py b/litellm/main.py index 3b50c075b..5ecfcf1db 100644 --- a/litellm/main.py +++ b/litellm/main.py @@ -1823,7 +1823,7 @@ def embedding( proxy_server_request = kwargs.get("proxy_server_request", None) aembedding = kwargs.pop("aembedding", None) openai_params = ["functions", "function_call", "temperature", "temperature", "top_p", "n", "stream", "stop", "max_tokens", "presence_penalty", "frequency_penalty", "logit_bias", "user", "request_timeout", "api_base", "api_version", "api_key", "deployment_id", "organization", "base_url", "default_headers", "timeout", "response_format", "seed", "tools", "tool_choice", "max_retries", "encoding_format"] - litellm_params = ["metadata", "acompletion", "caching", "mock_response", "api_key", "api_version", "api_base", "force_timeout", "logger_fn", "verbose", "custom_llm_provider", "litellm_logging_obj", "litellm_call_id", "use_client", "id", "fallbacks", "azure", "headers", "model_list", "num_retries", "context_window_fallback_dict", "roles", "final_prompt_value", "bos_token", "eos_token", "request_timeout", "complete_response", "self", "client", "rpm", "tpm", "input_cost_per_token", "output_cost_per_token", "hf_model_name", "proxy_server_request", "model_info", "preset_cache_key"] + litellm_params = ["metadata", "aembedding", "caching", "mock_response", "api_key", "api_version", "api_base", "force_timeout", "logger_fn", "verbose", "custom_llm_provider", "litellm_logging_obj", "litellm_call_id", "use_client", "id", "fallbacks", "azure", "headers", "model_list", "num_retries", "context_window_fallback_dict", "roles", "final_prompt_value", "bos_token", "eos_token", "request_timeout", "complete_response", "self", "client", "rpm", "tpm", "input_cost_per_token", "output_cost_per_token", "hf_model_name", "proxy_server_request", "model_info", "preset_cache_key"] default_params = openai_params + litellm_params non_default_params = {k: v for k,v in kwargs.items() if k not in default_params} # model-specific params - pass them straight to the model/provider optional_params = {} @@ -1835,7 +1835,7 @@ def embedding( try: response = None logging = litellm_logging_obj - logging.update_environment_variables(model=model, user="", optional_params=optional_params, litellm_params={"timeout": timeout, "azure": azure, "litellm_call_id": litellm_call_id, "logger_fn": logger_fn, "proxy_server_request": proxy_server_request, "model_info": model_info, "metadata": metadata}) + logging.update_environment_variables(model=model, user="", optional_params=optional_params, litellm_params={"timeout": timeout, "azure": azure, "litellm_call_id": litellm_call_id, "logger_fn": logger_fn, "proxy_server_request": proxy_server_request, "model_info": model_info, "metadata": metadata, "aembedding": aembedding}) if azure == True or custom_llm_provider == "azure": # azure configs api_type = get_secret("AZURE_API_TYPE") or "azure" @@ -1975,7 +1975,7 @@ def embedding( ## LOGGING logging.post_call( input=input, - api_key=openai.api_key, + api_key=api_key, original_response=str(e), ) ## Map to OpenAI Exception diff --git a/litellm/tests/test_custom_callback_input.py b/litellm/tests/test_custom_callback_input.py index 0102f6eb7..d9bcc8947 100644 --- a/litellm/tests/test_custom_callback_input.py +++ b/litellm/tests/test_custom_callback_input.py @@ -4,7 +4,7 @@ import sys, os, time, inspect, asyncio, traceback from datetime import datetime import pytest sys.path.insert(0, os.path.abspath('../..')) -from typing import Optional +from typing import Optional, Literal, List from litellm import completion, embedding import litellm from litellm.integrations.custom_logger import CustomLogger @@ -32,16 +32,18 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse # Class variables or attributes def __init__(self): self.errors = [] + self.states: Optional[List[Literal["sync_pre_api_call", "async_pre_api_call", "post_api_call", "sync_stream", "async_stream", "sync_success", "async_success", "sync_failure", "async_failure"]]] = [] def log_pre_api_call(self, model, messages, kwargs): try: + self.states.append("sync_pre_api_call") ## MODEL assert isinstance(model, str) ## MESSAGES - assert isinstance(messages, list) and isinstance(messages[0], dict) + assert isinstance(messages, list) ## KWARGS assert isinstance(kwargs['model'], str) - assert isinstance(kwargs['messages'], list) and isinstance(kwargs['messages'][0], dict) + assert isinstance(kwargs['messages'], list) assert isinstance(kwargs['optional_params'], dict) assert isinstance(kwargs['litellm_params'], dict) assert isinstance(kwargs['start_time'], Optional[datetime]) @@ -53,9 +55,7 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse def log_post_api_call(self, kwargs, response_obj, start_time, end_time): try: - print("IN POST CALL API") - print(f"kwargs input: {kwargs['input']}") - print(f"kwargs original response: {kwargs['original_response']}") + self.states.append("post_api_call") ## START TIME assert isinstance(start_time, datetime) ## END TIME @@ -64,13 +64,13 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse assert response_obj == None ## KWARGS assert isinstance(kwargs['model'], str) - assert isinstance(kwargs['messages'], list) and isinstance(kwargs['messages'][0], dict) + assert isinstance(kwargs['messages'], list) assert isinstance(kwargs['optional_params'], dict) assert isinstance(kwargs['litellm_params'], dict) assert isinstance(kwargs['start_time'], Optional[datetime]) assert isinstance(kwargs['stream'], bool) assert isinstance(kwargs['user'], Optional[str]) - assert (isinstance(kwargs['input'], list) and isinstance(kwargs['input'][0], dict)) or isinstance(kwargs['input'], (dict, str)) + assert isinstance(kwargs['input'], (list, dict, str)) assert isinstance(kwargs['api_key'], Optional[str]) assert isinstance(kwargs['original_response'], (str, litellm.CustomStreamWrapper)) or inspect.iscoroutine(kwargs['original_response']) or inspect.isasyncgen(kwargs['original_response']) assert isinstance(kwargs['additional_args'], Optional[dict]) @@ -81,6 +81,7 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse async def async_log_stream_event(self, kwargs, response_obj, start_time, end_time): try: + self.states.append("async_stream") ## START TIME assert isinstance(start_time, datetime) ## END TIME @@ -106,6 +107,7 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse def log_success_event(self, kwargs, response_obj, start_time, end_time): try: + self.states.append("sync_success") ## START TIME assert isinstance(start_time, datetime) ## END TIME @@ -131,6 +133,7 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse def log_failure_event(self, kwargs, response_obj, start_time, end_time): try: + self.states.append("sync_failure") ## START TIME assert isinstance(start_time, datetime) ## END TIME @@ -156,6 +159,7 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse async def async_log_pre_api_call(self, model, messages, kwargs): try: + self.states.append("async_pre_api_call") ## MODEL assert isinstance(model, str) ## MESSAGES @@ -174,21 +178,22 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse async def async_log_success_event(self, kwargs, response_obj, start_time, end_time): try: + self.states.append("async_success") ## START TIME assert isinstance(start_time, datetime) ## END TIME assert isinstance(end_time, datetime) ## RESPONSE OBJECT - assert isinstance(response_obj, litellm.ModelResponse) + assert isinstance(response_obj, (litellm.ModelResponse, litellm.EmbeddingResponse)) ## KWARGS assert isinstance(kwargs['model'], str) - assert isinstance(kwargs['messages'], list) and isinstance(kwargs['messages'][0], dict) + assert isinstance(kwargs['messages'], list) assert isinstance(kwargs['optional_params'], dict) assert isinstance(kwargs['litellm_params'], dict) assert isinstance(kwargs['start_time'], Optional[datetime]) assert isinstance(kwargs['stream'], bool) assert isinstance(kwargs['user'], Optional[str]) - assert (isinstance(kwargs['input'], list) and isinstance(kwargs['input'][0], dict)) or isinstance(kwargs['input'], (dict, str)) + assert isinstance(kwargs['input'], (list, dict, str)) assert isinstance(kwargs['api_key'], Optional[str]) assert isinstance(kwargs['original_response'], (str, litellm.CustomStreamWrapper)) or inspect.isasyncgen(kwargs['original_response']) or inspect.iscoroutine(kwargs['original_response']) assert isinstance(kwargs['additional_args'], Optional[dict]) @@ -199,6 +204,7 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse async def async_log_failure_event(self, kwargs, response_obj, start_time, end_time): try: + self.states.append("async_failure") ## START TIME assert isinstance(start_time, datetime) ## END TIME @@ -207,21 +213,23 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse assert response_obj == None ## KWARGS assert isinstance(kwargs['model'], str) - assert isinstance(kwargs['messages'], list) and isinstance(kwargs['messages'][0], dict) + assert isinstance(kwargs['messages'], list) assert isinstance(kwargs['optional_params'], dict) assert isinstance(kwargs['litellm_params'], dict) assert isinstance(kwargs['start_time'], Optional[datetime]) assert isinstance(kwargs['stream'], bool) assert isinstance(kwargs['user'], Optional[str]) - assert (isinstance(kwargs['input'], list) and isinstance(kwargs['input'][0], dict)) or isinstance(kwargs['input'], (dict, str)) + assert isinstance(kwargs['input'], (list, str, dict)) assert isinstance(kwargs['api_key'], Optional[str]) - assert isinstance(kwargs['original_response'], (str, litellm.CustomStreamWrapper)) or inspect.isasyncgen(kwargs['original_response']) + assert isinstance(kwargs['original_response'], (str, litellm.CustomStreamWrapper)) or inspect.isasyncgen(kwargs['original_response']) or kwargs['original_response'] == None assert isinstance(kwargs['additional_args'], Optional[dict]) assert isinstance(kwargs['log_event_type'], str) except: print(f"Assertion Error: {traceback.format_exc()}") self.errors.append(traceback.format_exc()) + +# COMPLETION ## Test OpenAI + sync def test_chat_openai_stream(): try: @@ -379,7 +387,7 @@ async def test_async_chat_azure_stream(): continue except: pass - time.sleep(1) + await asyncio.sleep(1) print(f"customHandler.errors: {customHandler.errors}") assert len(customHandler.errors) == 0 litellm.callbacks = [] @@ -471,4 +479,102 @@ async def test_async_chat_bedrock_stream(): except Exception as e: pytest.fail(f"An exception occurred: {str(e)}") -# asyncio.run(test_async_chat_bedrock_stream()) \ No newline at end of file +# asyncio.run(test_async_chat_bedrock_stream()) + +# EMBEDDING +## Test OpenAI + Async +@pytest.mark.asyncio +async def test_async_embedding_openai(): + try: + customHandler_success = CompletionCustomHandler() + customHandler_failure = CompletionCustomHandler() + litellm.callbacks = [customHandler_success] + response = await litellm.aembedding(model="azure/azure-embedding-model", + input=["good morning from litellm"]) + await asyncio.sleep(1) + print(f"customHandler_success.errors: {customHandler_success.errors}") + print(f"customHandler_success.states: {customHandler_success.states}") + assert len(customHandler_success.errors) == 0 + assert len(customHandler_success.states) == 3 # pre, post, success + # test failure callback + litellm.callbacks = [customHandler_failure] + try: + response = await litellm.aembedding(model="text-embedding-ada-002", + input=["good morning from litellm"], + api_key="my-bad-key") + except: + pass + await asyncio.sleep(1) + print(f"customHandler_failure.errors: {customHandler_failure.errors}") + print(f"customHandler_failure.states: {customHandler_failure.states}") + assert len(customHandler_failure.errors) == 0 + assert len(customHandler_failure.states) == 3 # pre, post, success + except Exception as e: + pytest.fail(f"An exception occurred: {str(e)}") + +# asyncio.run(test_async_embedding_openai()) + +## Test Azure + Async +@pytest.mark.asyncio +async def test_async_embedding_azure(): + try: + customHandler_success = CompletionCustomHandler() + customHandler_failure = CompletionCustomHandler() + litellm.callbacks = [customHandler_success] + response = await litellm.aembedding(model="azure/azure-embedding-model", + input=["good morning from litellm"]) + await asyncio.sleep(1) + print(f"customHandler_success.errors: {customHandler_success.errors}") + print(f"customHandler_success.states: {customHandler_success.states}") + assert len(customHandler_success.errors) == 0 + assert len(customHandler_success.states) == 3 # pre, post, success + # test failure callback + litellm.callbacks = [customHandler_failure] + try: + response = await litellm.aembedding(model="azure/azure-embedding-model", + input=["good morning from litellm"], + api_key="my-bad-key") + except: + pass + await asyncio.sleep(1) + print(f"customHandler_failure.errors: {customHandler_failure.errors}") + print(f"customHandler_failure.states: {customHandler_failure.states}") + assert len(customHandler_failure.errors) == 0 + assert len(customHandler_failure.states) == 3 # pre, post, success + except Exception as e: + pytest.fail(f"An exception occurred: {str(e)}") + +# asyncio.run(test_async_embedding_azure()) + +## Test Bedrock + Async +@pytest.mark.asyncio +async def test_async_embedding_bedrock(): + try: + customHandler_success = CompletionCustomHandler() + customHandler_failure = CompletionCustomHandler() + litellm.callbacks = [customHandler_success] + litellm.set_verbose = True + response = await litellm.aembedding(model="bedrock/cohere.embed-multilingual-v3", + input=["good morning from litellm"], aws_region_name="os.environ/AWS_REGION_NAME_2") + await asyncio.sleep(1) + print(f"customHandler_success.errors: {customHandler_success.errors}") + print(f"customHandler_success.states: {customHandler_success.states}") + assert len(customHandler_success.errors) == 0 + assert len(customHandler_success.states) == 3 # pre, post, success + # test failure callback + litellm.callbacks = [customHandler_failure] + try: + response = await litellm.aembedding(model="bedrock/cohere.embed-multilingual-v3", + input=["good morning from litellm"], + aws_region_name="my-bad-region") + except: + pass + await asyncio.sleep(1) + print(f"customHandler_failure.errors: {customHandler_failure.errors}") + print(f"customHandler_failure.states: {customHandler_failure.states}") + assert len(customHandler_failure.errors) == 0 + assert len(customHandler_failure.states) == 3 # pre, post, success + except Exception as e: + pytest.fail(f"An exception occurred: {str(e)}") + +asyncio.run(test_async_embedding_bedrock()) \ No newline at end of file diff --git a/litellm/utils.py b/litellm/utils.py index 1e61d7989..efc146413 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -989,7 +989,7 @@ class Logging: end_time=end_time, print_verbose=print_verbose, ) - if isinstance(callback, CustomLogger) and self.model_call_details.get("litellm_params", {}).get("acompletion", False) == False: # custom logger class - only call for sync callbacks + elif isinstance(callback, CustomLogger) and self.model_call_details.get("litellm_params", {}).get("acompletion", False) == False and self.model_call_details.get("litellm_params", {}).get("aembedding", False) == False: # custom logger class print_verbose(f"success callbacks: Running Custom Logger Class") if self.stream and complete_streaming_response is None: callback.log_stream_event( @@ -1192,7 +1192,7 @@ class Logging: print_verbose=print_verbose, callback_func=callback ) - elif isinstance(callback, CustomLogger) and self.model_call_details.get("litellm_params", {}).get("acompletion", False) == False: # custom logger class + elif isinstance(callback, CustomLogger) and self.model_call_details.get("litellm_params", {}).get("acompletion", False) == False and self.model_call_details.get("litellm_params", {}).get("aembedding", False) == False: # custom logger class callback.log_failure_event( start_time=start_time, end_time=end_time, @@ -1641,7 +1641,7 @@ def client(original_function): if litellm.caching or litellm.caching_with_models or litellm.cache != None: # user init a cache object litellm.cache.add_cache(result, *args, **kwargs) # LOG SUCCESS - handle streaming success logging in the _next_ object - print_verbose(f"Async Wrapper: Completed Call, calling async_success_handler") + print_verbose(f"Async Wrapper: Completed Call, calling async_success_handler: {logging_obj.async_success_handler}") asyncio.create_task(logging_obj.async_success_handler(result, start_time, end_time)) threading.Thread(target=logging_obj.success_handler, args=(result, start_time, end_time)).start() # RETURN RESULT @@ -1678,7 +1678,7 @@ def client(original_function): end_time = datetime.datetime.now() if logging_obj: logging_obj.failure_handler(e, traceback_exception, start_time, end_time) # DO NOT MAKE THREADED - router retry fallback relies on this! - asyncio.create_task(logging_obj.async_failure_handler(e, traceback_exception, start_time, end_time)) + await logging_obj.async_failure_handler(e, traceback_exception, start_time, end_time) raise e is_coroutine = inspect.iscoroutinefunction(original_function) From 051c3e822913ac96069fc354f3f6009888a9372d Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 15:34:06 -0800 Subject: [PATCH 403/460] (test) custom callback --- litellm/tests/test_configs/custom_callbacks.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/litellm/tests/test_configs/custom_callbacks.py b/litellm/tests/test_configs/custom_callbacks.py index a415fe5e4..7aa1577f6 100644 --- a/litellm/tests/test_configs/custom_callbacks.py +++ b/litellm/tests/test_configs/custom_callbacks.py @@ -82,6 +82,9 @@ class testCustomCallbackProxy(CustomLogger): # tokens used in response usage = response_obj["usage"] + print("\n\n in custom callback vars my custom logger, ", vars(my_custom_logger)) + + print( f""" Model: {model}, From b2130ea986cddae8d8cf13faed2c8ed94d26cc23 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 16:03:51 -0800 Subject: [PATCH 404/460] (test) proxy custom logger --- .../test_aamazing_proxy_custom_logger.py | 62 ++++++++++--------- 1 file changed, 33 insertions(+), 29 deletions(-) diff --git a/litellm/tests/test_aamazing_proxy_custom_logger.py b/litellm/tests/test_aamazing_proxy_custom_logger.py index 263114985..6393f8138 100644 --- a/litellm/tests/test_aamazing_proxy_custom_logger.py +++ b/litellm/tests/test_aamazing_proxy_custom_logger.py @@ -33,7 +33,7 @@ async def wrapper_startup_event(): initialize(config=config_fp) # Use the app fixture in your client fixture -@pytest.fixture(scope="function") +@pytest.fixture() def client(): with TestClient(app) as client: yield client @@ -45,29 +45,25 @@ headers = { "Authorization": f"Bearer {token}" } -# init callbacks to be empty -litellm.success_callback = [] -litellm.callbacks = [] -litellm.failure_callback = [] -litellm._async_success_callback = [] print("Testing proxy custom logger") def test_embedding(client): try: + litellm.set_verbose=False + from litellm.proxy.utils import get_instance_fn + my_custom_logger = get_instance_fn( + value = "custom_callbacks.my_custom_logger", + config_file_path=python_file_path + ) + print("id of initialized custom logger", id(my_custom_logger)) + litellm.callbacks = [my_custom_logger] # Your test data print("initialized proxy") # import the initialized custom logger print(litellm.callbacks) # assert len(litellm.callbacks) == 1 # assert litellm is initialized with 1 callback - - my_custom_logger = litellm.callbacks[0] - for callback in litellm.callbacks: - if "testCustomCallbackProxy" in str(callback): - my_custom_logger = callback - break - print("LiteLLM Callbacks", litellm.callbacks) print("my_custom_logger", my_custom_logger) assert my_custom_logger.async_success_embedding == False @@ -77,11 +73,9 @@ def test_embedding(client): } response = client.post("/embeddings", json=test_data, headers=headers) print("made request", response.status_code, response.text) - print("LiteLLM Callbacks", litellm.callbacks) - print("my_custom_logger", my_custom_logger) + print("vars my custom logger /embeddings", vars(my_custom_logger), "id", id(my_custom_logger)) assert my_custom_logger.async_success_embedding == True # checks if the status of async_success is True, only the async_log_success_event can set this to true assert my_custom_logger.async_embedding_kwargs["model"] == "azure-embedding-model" # checks if kwargs passed to async_log_success_event are correct - kwargs = my_custom_logger.async_embedding_kwargs litellm_params = kwargs.get("litellm_params") metadata = litellm_params.get("metadata", None) @@ -103,16 +97,23 @@ def test_embedding(client): def test_chat_completion(client): try: # Your test data + global my_custom_logger print("initialized proxy") + litellm.set_verbose=False + from litellm.proxy.utils import get_instance_fn + my_custom_logger = get_instance_fn( + value = "custom_callbacks.my_custom_logger", + config_file_path=python_file_path + ) + + print("id of initialized custom logger", id(my_custom_logger)) + + litellm.callbacks = [my_custom_logger] # import the initialized custom logger print(litellm.callbacks) # assert len(litellm.callbacks) == 1 # assert litellm is initialized with 1 callback - my_custom_logger = litellm.callbacks[0] - for callback in litellm.callbacks: - if "testCustomCallbackProxy" in str(callback): - my_custom_logger = callback - break + print("LiteLLM Callbacks", litellm.callbacks) print("my_custom_logger", my_custom_logger) assert my_custom_logger.async_success == False @@ -160,18 +161,21 @@ def test_chat_completion(client): def test_chat_completion_stream(client): try: # Your test data + litellm.set_verbose=False + from litellm.proxy.utils import get_instance_fn + my_custom_logger = get_instance_fn( + value = "custom_callbacks.my_custom_logger", + config_file_path=python_file_path + ) + + print("id of initialized custom logger", id(my_custom_logger)) + + litellm.callbacks = [my_custom_logger] import json print("initialized proxy") # import the initialized custom logger print(litellm.callbacks) - - # assert len(litellm.callbacks) == 1 # assert litellm is initialized with 1 callback - my_custom_logger = litellm.callbacks[0] - - for callback in litellm.callbacks: - if "testCustomCallbackProxy" in str(callback): - my_custom_logger = callback - break + print("LiteLLM Callbacks", litellm.callbacks) print("my_custom_logger", my_custom_logger) From faf8381c93d5a7d85819eb7cf6fd57f40dae2c74 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 16:20:15 -0800 Subject: [PATCH 405/460] (test) custom callback input --- litellm/tests/test_custom_callback_input.py | 58 ++++++++++----------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/litellm/tests/test_custom_callback_input.py b/litellm/tests/test_custom_callback_input.py index d9bcc8947..de59c68ba 100644 --- a/litellm/tests/test_custom_callback_input.py +++ b/litellm/tests/test_custom_callback_input.py @@ -4,7 +4,7 @@ import sys, os, time, inspect, asyncio, traceback from datetime import datetime import pytest sys.path.insert(0, os.path.abspath('../..')) -from typing import Optional, Literal, List +from typing import Optional, Literal, List, Union from litellm import completion, embedding import litellm from litellm.integrations.custom_logger import CustomLogger @@ -46,9 +46,9 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse assert isinstance(kwargs['messages'], list) assert isinstance(kwargs['optional_params'], dict) assert isinstance(kwargs['litellm_params'], dict) - assert isinstance(kwargs['start_time'], Optional[datetime]) + assert isinstance(kwargs['start_time'], Union[datetime, None]) assert isinstance(kwargs['stream'], bool) - assert isinstance(kwargs['user'], Optional[str]) + assert isinstance(kwargs['user'], Union[str, None]) except Exception as e: print(f"Assertion Error: {traceback.format_exc()}") self.errors.append(traceback.format_exc()) @@ -67,13 +67,13 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse assert isinstance(kwargs['messages'], list) assert isinstance(kwargs['optional_params'], dict) assert isinstance(kwargs['litellm_params'], dict) - assert isinstance(kwargs['start_time'], Optional[datetime]) + assert isinstance(kwargs['start_time'], Union[datetime, None]) assert isinstance(kwargs['stream'], bool) - assert isinstance(kwargs['user'], Optional[str]) + assert isinstance(kwargs['user'], Union[str, None]) assert isinstance(kwargs['input'], (list, dict, str)) - assert isinstance(kwargs['api_key'], Optional[str]) + assert isinstance(kwargs['api_key'], Union[str, None]) assert isinstance(kwargs['original_response'], (str, litellm.CustomStreamWrapper)) or inspect.iscoroutine(kwargs['original_response']) or inspect.isasyncgen(kwargs['original_response']) - assert isinstance(kwargs['additional_args'], Optional[dict]) + assert isinstance(kwargs['additional_args'], Union[dict, None]) assert isinstance(kwargs['log_event_type'], str) except: print(f"Assertion Error: {traceback.format_exc()}") @@ -93,13 +93,13 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse assert isinstance(kwargs['messages'], list) and isinstance(kwargs['messages'][0], dict) assert isinstance(kwargs['optional_params'], dict) assert isinstance(kwargs['litellm_params'], dict) - assert isinstance(kwargs['start_time'], Optional[datetime]) + assert isinstance(kwargs['start_time'], Union[datetime, None]) assert isinstance(kwargs['stream'], bool) - assert isinstance(kwargs['user'], Optional[str]) + assert isinstance(kwargs['user'], Union[str, None]) assert (isinstance(kwargs['input'], list) and isinstance(kwargs['input'][0], dict)) or isinstance(kwargs['input'], (dict, str)) - assert isinstance(kwargs['api_key'], Optional[str]) + assert isinstance(kwargs['api_key'], Union[str, None]) assert isinstance(kwargs['original_response'], (str, litellm.CustomStreamWrapper)) or inspect.isasyncgen(kwargs['original_response']) or inspect.iscoroutine(kwargs['original_response']) - assert isinstance(kwargs['additional_args'], Optional[dict]) + assert isinstance(kwargs['additional_args'], Union[dict, None]) assert isinstance(kwargs['log_event_type'], str) except: print(f"Assertion Error: {traceback.format_exc()}") @@ -119,13 +119,13 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse assert isinstance(kwargs['messages'], list) and isinstance(kwargs['messages'][0], dict) assert isinstance(kwargs['optional_params'], dict) assert isinstance(kwargs['litellm_params'], dict) - assert isinstance(kwargs['start_time'], Optional[datetime]) + assert isinstance(kwargs['start_time'], Union[datetime, None]) assert isinstance(kwargs['stream'], bool) - assert isinstance(kwargs['user'], Optional[str]) + assert isinstance(kwargs['user'], Union[str, None]) assert (isinstance(kwargs['input'], list) and isinstance(kwargs['input'][0], dict)) or isinstance(kwargs['input'], (dict, str)) - assert isinstance(kwargs['api_key'], Optional[str]) + assert isinstance(kwargs['api_key'], Union[str, None]) assert isinstance(kwargs['original_response'], (str, litellm.CustomStreamWrapper)) - assert isinstance(kwargs['additional_args'], Optional[dict]) + assert isinstance(kwargs['additional_args'], Union[dict, None]) assert isinstance(kwargs['log_event_type'], str) except: print(f"Assertion Error: {traceback.format_exc()}") @@ -145,13 +145,13 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse assert isinstance(kwargs['messages'], list) and isinstance(kwargs['messages'][0], dict) assert isinstance(kwargs['optional_params'], dict) assert isinstance(kwargs['litellm_params'], dict) - assert isinstance(kwargs['start_time'], Optional[datetime]) + assert isinstance(kwargs['start_time'], Union[datetime, None]) assert isinstance(kwargs['stream'], bool) - assert isinstance(kwargs['user'], Optional[str]) + assert isinstance(kwargs['user'], Union[str, None]) assert (isinstance(kwargs['input'], list) and isinstance(kwargs['input'][0], dict)) or isinstance(kwargs['input'], (dict, str)) - assert isinstance(kwargs['api_key'], Optional[str]) + assert isinstance(kwargs['api_key'], Union[str, None]) assert isinstance(kwargs['original_response'], (str, litellm.CustomStreamWrapper)) or kwargs["original_response"] == None - assert isinstance(kwargs['additional_args'], Optional[dict]) + assert isinstance(kwargs['additional_args'], Union[dict, None]) assert isinstance(kwargs['log_event_type'], str) except: print(f"Assertion Error: {traceback.format_exc()}") @@ -169,9 +169,9 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse assert isinstance(kwargs['messages'], list) and isinstance(kwargs['messages'][0], dict) assert isinstance(kwargs['optional_params'], dict) assert isinstance(kwargs['litellm_params'], dict) - assert isinstance(kwargs['start_time'], Optional[datetime]) + assert isinstance(kwargs['start_time'], Union[datetime, None]) assert isinstance(kwargs['stream'], bool) - assert isinstance(kwargs['user'], Optional[str]) + assert isinstance(kwargs['user'], Union[str, None]) except Exception as e: print(f"Assertion Error: {traceback.format_exc()}") self.errors.append(traceback.format_exc()) @@ -190,13 +190,13 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse assert isinstance(kwargs['messages'], list) assert isinstance(kwargs['optional_params'], dict) assert isinstance(kwargs['litellm_params'], dict) - assert isinstance(kwargs['start_time'], Optional[datetime]) + assert isinstance(kwargs['start_time'], Union[datetime, None]) assert isinstance(kwargs['stream'], bool) - assert isinstance(kwargs['user'], Optional[str]) + assert isinstance(kwargs['user'], Union[str, None]) assert isinstance(kwargs['input'], (list, dict, str)) - assert isinstance(kwargs['api_key'], Optional[str]) + assert isinstance(kwargs['api_key'], Union[str, None]) assert isinstance(kwargs['original_response'], (str, litellm.CustomStreamWrapper)) or inspect.isasyncgen(kwargs['original_response']) or inspect.iscoroutine(kwargs['original_response']) - assert isinstance(kwargs['additional_args'], Optional[dict]) + assert isinstance(kwargs['additional_args'], Union[dict, None]) assert isinstance(kwargs['log_event_type'], str) except: print(f"Assertion Error: {traceback.format_exc()}") @@ -216,13 +216,13 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse assert isinstance(kwargs['messages'], list) assert isinstance(kwargs['optional_params'], dict) assert isinstance(kwargs['litellm_params'], dict) - assert isinstance(kwargs['start_time'], Optional[datetime]) + assert isinstance(kwargs['start_time'], Union[datetime, None]) assert isinstance(kwargs['stream'], bool) - assert isinstance(kwargs['user'], Optional[str]) + assert isinstance(kwargs['user'], Union[str, None]) assert isinstance(kwargs['input'], (list, str, dict)) - assert isinstance(kwargs['api_key'], Optional[str]) + assert isinstance(kwargs['api_key'], Union[str, None]) assert isinstance(kwargs['original_response'], (str, litellm.CustomStreamWrapper)) or inspect.isasyncgen(kwargs['original_response']) or kwargs['original_response'] == None - assert isinstance(kwargs['additional_args'], Optional[dict]) + assert isinstance(kwargs['additional_args'], Union[dict, None]) assert isinstance(kwargs['log_event_type'], str) except: print(f"Assertion Error: {traceback.format_exc()}") From 56a9d3dfb6c8d3a4befba3d20618ed60d42dec16 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 16:25:27 -0800 Subject: [PATCH 406/460] (test) custom input callback test --- litellm/tests/test_custom_callback_input.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/litellm/tests/test_custom_callback_input.py b/litellm/tests/test_custom_callback_input.py index de59c68ba..72f2aa601 100644 --- a/litellm/tests/test_custom_callback_input.py +++ b/litellm/tests/test_custom_callback_input.py @@ -46,7 +46,7 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse assert isinstance(kwargs['messages'], list) assert isinstance(kwargs['optional_params'], dict) assert isinstance(kwargs['litellm_params'], dict) - assert isinstance(kwargs['start_time'], Union[datetime, None]) + assert isinstance(kwargs['start_time'], (datetime, type(None))) assert isinstance(kwargs['stream'], bool) assert isinstance(kwargs['user'], Union[str, None]) except Exception as e: @@ -67,7 +67,7 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse assert isinstance(kwargs['messages'], list) assert isinstance(kwargs['optional_params'], dict) assert isinstance(kwargs['litellm_params'], dict) - assert isinstance(kwargs['start_time'], Union[datetime, None]) + assert isinstance(kwargs['start_time'], (datetime, type(None))) assert isinstance(kwargs['stream'], bool) assert isinstance(kwargs['user'], Union[str, None]) assert isinstance(kwargs['input'], (list, dict, str)) @@ -93,7 +93,7 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse assert isinstance(kwargs['messages'], list) and isinstance(kwargs['messages'][0], dict) assert isinstance(kwargs['optional_params'], dict) assert isinstance(kwargs['litellm_params'], dict) - assert isinstance(kwargs['start_time'], Union[datetime, None]) + assert isinstance(kwargs['start_time'], (datetime, type(None))) assert isinstance(kwargs['stream'], bool) assert isinstance(kwargs['user'], Union[str, None]) assert (isinstance(kwargs['input'], list) and isinstance(kwargs['input'][0], dict)) or isinstance(kwargs['input'], (dict, str)) @@ -119,7 +119,7 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse assert isinstance(kwargs['messages'], list) and isinstance(kwargs['messages'][0], dict) assert isinstance(kwargs['optional_params'], dict) assert isinstance(kwargs['litellm_params'], dict) - assert isinstance(kwargs['start_time'], Union[datetime, None]) + assert isinstance(kwargs['start_time'], (datetime, type(None))) assert isinstance(kwargs['stream'], bool) assert isinstance(kwargs['user'], Union[str, None]) assert (isinstance(kwargs['input'], list) and isinstance(kwargs['input'][0], dict)) or isinstance(kwargs['input'], (dict, str)) @@ -145,7 +145,7 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse assert isinstance(kwargs['messages'], list) and isinstance(kwargs['messages'][0], dict) assert isinstance(kwargs['optional_params'], dict) assert isinstance(kwargs['litellm_params'], dict) - assert isinstance(kwargs['start_time'], Union[datetime, None]) + assert isinstance(kwargs['start_time'], (datetime, type(None))) assert isinstance(kwargs['stream'], bool) assert isinstance(kwargs['user'], Union[str, None]) assert (isinstance(kwargs['input'], list) and isinstance(kwargs['input'][0], dict)) or isinstance(kwargs['input'], (dict, str)) @@ -169,7 +169,7 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse assert isinstance(kwargs['messages'], list) and isinstance(kwargs['messages'][0], dict) assert isinstance(kwargs['optional_params'], dict) assert isinstance(kwargs['litellm_params'], dict) - assert isinstance(kwargs['start_time'], Union[datetime, None]) + assert isinstance(kwargs['start_time'], (datetime, type(None))) assert isinstance(kwargs['stream'], bool) assert isinstance(kwargs['user'], Union[str, None]) except Exception as e: @@ -190,7 +190,7 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse assert isinstance(kwargs['messages'], list) assert isinstance(kwargs['optional_params'], dict) assert isinstance(kwargs['litellm_params'], dict) - assert isinstance(kwargs['start_time'], Union[datetime, None]) + assert isinstance(kwargs['start_time'], (datetime, type(None))) assert isinstance(kwargs['stream'], bool) assert isinstance(kwargs['user'], Union[str, None]) assert isinstance(kwargs['input'], (list, dict, str)) @@ -216,7 +216,7 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse assert isinstance(kwargs['messages'], list) assert isinstance(kwargs['optional_params'], dict) assert isinstance(kwargs['litellm_params'], dict) - assert isinstance(kwargs['start_time'], Union[datetime, None]) + assert isinstance(kwargs['start_time'], (datetime, type(None))) assert isinstance(kwargs['stream'], bool) assert isinstance(kwargs['user'], Union[str, None]) assert isinstance(kwargs['input'], (list, str, dict)) From 330c156f6a22a21a7eb832a451485bed75a7c761 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 16:28:14 -0800 Subject: [PATCH 407/460] (test) custom input callback --- litellm/tests/test_custom_callback_input.py | 40 ++++++++++----------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/litellm/tests/test_custom_callback_input.py b/litellm/tests/test_custom_callback_input.py index 72f2aa601..04e64a70d 100644 --- a/litellm/tests/test_custom_callback_input.py +++ b/litellm/tests/test_custom_callback_input.py @@ -48,7 +48,7 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse assert isinstance(kwargs['litellm_params'], dict) assert isinstance(kwargs['start_time'], (datetime, type(None))) assert isinstance(kwargs['stream'], bool) - assert isinstance(kwargs['user'], Union[str, None]) + assert isinstance(kwargs['user'], (str, None)) except Exception as e: print(f"Assertion Error: {traceback.format_exc()}") self.errors.append(traceback.format_exc()) @@ -69,11 +69,11 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse assert isinstance(kwargs['litellm_params'], dict) assert isinstance(kwargs['start_time'], (datetime, type(None))) assert isinstance(kwargs['stream'], bool) - assert isinstance(kwargs['user'], Union[str, None]) + assert isinstance(kwargs['user'], (str, None)) assert isinstance(kwargs['input'], (list, dict, str)) - assert isinstance(kwargs['api_key'], Union[str, None]) + assert isinstance(kwargs['api_key'], (str, None)) assert isinstance(kwargs['original_response'], (str, litellm.CustomStreamWrapper)) or inspect.iscoroutine(kwargs['original_response']) or inspect.isasyncgen(kwargs['original_response']) - assert isinstance(kwargs['additional_args'], Union[dict, None]) + assert isinstance(kwargs['additional_args'], (dict, None)) assert isinstance(kwargs['log_event_type'], str) except: print(f"Assertion Error: {traceback.format_exc()}") @@ -95,11 +95,11 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse assert isinstance(kwargs['litellm_params'], dict) assert isinstance(kwargs['start_time'], (datetime, type(None))) assert isinstance(kwargs['stream'], bool) - assert isinstance(kwargs['user'], Union[str, None]) + assert isinstance(kwargs['user'], (str, None)) assert (isinstance(kwargs['input'], list) and isinstance(kwargs['input'][0], dict)) or isinstance(kwargs['input'], (dict, str)) - assert isinstance(kwargs['api_key'], Union[str, None]) + assert isinstance(kwargs['api_key'], (str, None)) assert isinstance(kwargs['original_response'], (str, litellm.CustomStreamWrapper)) or inspect.isasyncgen(kwargs['original_response']) or inspect.iscoroutine(kwargs['original_response']) - assert isinstance(kwargs['additional_args'], Union[dict, None]) + assert isinstance(kwargs['additional_args'], (dict, None)) assert isinstance(kwargs['log_event_type'], str) except: print(f"Assertion Error: {traceback.format_exc()}") @@ -121,11 +121,11 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse assert isinstance(kwargs['litellm_params'], dict) assert isinstance(kwargs['start_time'], (datetime, type(None))) assert isinstance(kwargs['stream'], bool) - assert isinstance(kwargs['user'], Union[str, None]) + assert isinstance(kwargs['user'], (str, None)) assert (isinstance(kwargs['input'], list) and isinstance(kwargs['input'][0], dict)) or isinstance(kwargs['input'], (dict, str)) - assert isinstance(kwargs['api_key'], Union[str, None]) + assert isinstance(kwargs['api_key'], (str, None)) assert isinstance(kwargs['original_response'], (str, litellm.CustomStreamWrapper)) - assert isinstance(kwargs['additional_args'], Union[dict, None]) + assert isinstance(kwargs['additional_args'], (dict, None)) assert isinstance(kwargs['log_event_type'], str) except: print(f"Assertion Error: {traceback.format_exc()}") @@ -147,11 +147,11 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse assert isinstance(kwargs['litellm_params'], dict) assert isinstance(kwargs['start_time'], (datetime, type(None))) assert isinstance(kwargs['stream'], bool) - assert isinstance(kwargs['user'], Union[str, None]) + assert isinstance(kwargs['user'], (str, None)) assert (isinstance(kwargs['input'], list) and isinstance(kwargs['input'][0], dict)) or isinstance(kwargs['input'], (dict, str)) - assert isinstance(kwargs['api_key'], Union[str, None]) + assert isinstance(kwargs['api_key'], (str, None)) assert isinstance(kwargs['original_response'], (str, litellm.CustomStreamWrapper)) or kwargs["original_response"] == None - assert isinstance(kwargs['additional_args'], Union[dict, None]) + assert isinstance(kwargs['additional_args'], (dict, None)) assert isinstance(kwargs['log_event_type'], str) except: print(f"Assertion Error: {traceback.format_exc()}") @@ -171,7 +171,7 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse assert isinstance(kwargs['litellm_params'], dict) assert isinstance(kwargs['start_time'], (datetime, type(None))) assert isinstance(kwargs['stream'], bool) - assert isinstance(kwargs['user'], Union[str, None]) + assert isinstance(kwargs['user'], (str, None)) except Exception as e: print(f"Assertion Error: {traceback.format_exc()}") self.errors.append(traceback.format_exc()) @@ -192,11 +192,11 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse assert isinstance(kwargs['litellm_params'], dict) assert isinstance(kwargs['start_time'], (datetime, type(None))) assert isinstance(kwargs['stream'], bool) - assert isinstance(kwargs['user'], Union[str, None]) + assert isinstance(kwargs['user'], (str, None)) assert isinstance(kwargs['input'], (list, dict, str)) - assert isinstance(kwargs['api_key'], Union[str, None]) + assert isinstance(kwargs['api_key'], (str, None)) assert isinstance(kwargs['original_response'], (str, litellm.CustomStreamWrapper)) or inspect.isasyncgen(kwargs['original_response']) or inspect.iscoroutine(kwargs['original_response']) - assert isinstance(kwargs['additional_args'], Union[dict, None]) + assert isinstance(kwargs['additional_args'], (dict, None)) assert isinstance(kwargs['log_event_type'], str) except: print(f"Assertion Error: {traceback.format_exc()}") @@ -218,11 +218,11 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse assert isinstance(kwargs['litellm_params'], dict) assert isinstance(kwargs['start_time'], (datetime, type(None))) assert isinstance(kwargs['stream'], bool) - assert isinstance(kwargs['user'], Union[str, None]) + assert isinstance(kwargs['user'], (str, None)) assert isinstance(kwargs['input'], (list, str, dict)) - assert isinstance(kwargs['api_key'], Union[str, None]) + assert isinstance(kwargs['api_key'], (str, None)) assert isinstance(kwargs['original_response'], (str, litellm.CustomStreamWrapper)) or inspect.isasyncgen(kwargs['original_response']) or kwargs['original_response'] == None - assert isinstance(kwargs['additional_args'], Union[dict, None]) + assert isinstance(kwargs['additional_args'], (dict, None)) assert isinstance(kwargs['log_event_type'], str) except: print(f"Assertion Error: {traceback.format_exc()}") From 5c1322e574acb8b5ff89adec78f486833eea829c Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 16:33:16 -0800 Subject: [PATCH 408/460] (test) custom callback input --- litellm/tests/test_custom_callback_input.py | 40 ++++++++++----------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/litellm/tests/test_custom_callback_input.py b/litellm/tests/test_custom_callback_input.py index 04e64a70d..865ed4040 100644 --- a/litellm/tests/test_custom_callback_input.py +++ b/litellm/tests/test_custom_callback_input.py @@ -48,7 +48,7 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse assert isinstance(kwargs['litellm_params'], dict) assert isinstance(kwargs['start_time'], (datetime, type(None))) assert isinstance(kwargs['stream'], bool) - assert isinstance(kwargs['user'], (str, None)) + assert isinstance(kwargs['user'], (str, type(None))) except Exception as e: print(f"Assertion Error: {traceback.format_exc()}") self.errors.append(traceback.format_exc()) @@ -69,11 +69,11 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse assert isinstance(kwargs['litellm_params'], dict) assert isinstance(kwargs['start_time'], (datetime, type(None))) assert isinstance(kwargs['stream'], bool) - assert isinstance(kwargs['user'], (str, None)) + assert isinstance(kwargs['user'], (str, type(None))) assert isinstance(kwargs['input'], (list, dict, str)) - assert isinstance(kwargs['api_key'], (str, None)) + assert isinstance(kwargs['api_key'], (str, type(None))) assert isinstance(kwargs['original_response'], (str, litellm.CustomStreamWrapper)) or inspect.iscoroutine(kwargs['original_response']) or inspect.isasyncgen(kwargs['original_response']) - assert isinstance(kwargs['additional_args'], (dict, None)) + assert isinstance(kwargs['additional_args'], (dict, type(None))) assert isinstance(kwargs['log_event_type'], str) except: print(f"Assertion Error: {traceback.format_exc()}") @@ -95,11 +95,11 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse assert isinstance(kwargs['litellm_params'], dict) assert isinstance(kwargs['start_time'], (datetime, type(None))) assert isinstance(kwargs['stream'], bool) - assert isinstance(kwargs['user'], (str, None)) + assert isinstance(kwargs['user'], (str, type(None))) assert (isinstance(kwargs['input'], list) and isinstance(kwargs['input'][0], dict)) or isinstance(kwargs['input'], (dict, str)) - assert isinstance(kwargs['api_key'], (str, None)) + assert isinstance(kwargs['api_key'], (str, type(None))) assert isinstance(kwargs['original_response'], (str, litellm.CustomStreamWrapper)) or inspect.isasyncgen(kwargs['original_response']) or inspect.iscoroutine(kwargs['original_response']) - assert isinstance(kwargs['additional_args'], (dict, None)) + assert isinstance(kwargs['additional_args'], (dict, type(None))) assert isinstance(kwargs['log_event_type'], str) except: print(f"Assertion Error: {traceback.format_exc()}") @@ -121,11 +121,11 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse assert isinstance(kwargs['litellm_params'], dict) assert isinstance(kwargs['start_time'], (datetime, type(None))) assert isinstance(kwargs['stream'], bool) - assert isinstance(kwargs['user'], (str, None)) + assert isinstance(kwargs['user'], (str, type(None))) assert (isinstance(kwargs['input'], list) and isinstance(kwargs['input'][0], dict)) or isinstance(kwargs['input'], (dict, str)) - assert isinstance(kwargs['api_key'], (str, None)) + assert isinstance(kwargs['api_key'], (str, type(None))) assert isinstance(kwargs['original_response'], (str, litellm.CustomStreamWrapper)) - assert isinstance(kwargs['additional_args'], (dict, None)) + assert isinstance(kwargs['additional_args'], (dict, type(None))) assert isinstance(kwargs['log_event_type'], str) except: print(f"Assertion Error: {traceback.format_exc()}") @@ -147,11 +147,11 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse assert isinstance(kwargs['litellm_params'], dict) assert isinstance(kwargs['start_time'], (datetime, type(None))) assert isinstance(kwargs['stream'], bool) - assert isinstance(kwargs['user'], (str, None)) + assert isinstance(kwargs['user'], (str, type(None))) assert (isinstance(kwargs['input'], list) and isinstance(kwargs['input'][0], dict)) or isinstance(kwargs['input'], (dict, str)) - assert isinstance(kwargs['api_key'], (str, None)) + assert isinstance(kwargs['api_key'], (str, type(None))) assert isinstance(kwargs['original_response'], (str, litellm.CustomStreamWrapper)) or kwargs["original_response"] == None - assert isinstance(kwargs['additional_args'], (dict, None)) + assert isinstance(kwargs['additional_args'], (dict, type(None))) assert isinstance(kwargs['log_event_type'], str) except: print(f"Assertion Error: {traceback.format_exc()}") @@ -171,7 +171,7 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse assert isinstance(kwargs['litellm_params'], dict) assert isinstance(kwargs['start_time'], (datetime, type(None))) assert isinstance(kwargs['stream'], bool) - assert isinstance(kwargs['user'], (str, None)) + assert isinstance(kwargs['user'], (str, type(None))) except Exception as e: print(f"Assertion Error: {traceback.format_exc()}") self.errors.append(traceback.format_exc()) @@ -192,11 +192,11 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse assert isinstance(kwargs['litellm_params'], dict) assert isinstance(kwargs['start_time'], (datetime, type(None))) assert isinstance(kwargs['stream'], bool) - assert isinstance(kwargs['user'], (str, None)) + assert isinstance(kwargs['user'], (str, type(None))) assert isinstance(kwargs['input'], (list, dict, str)) - assert isinstance(kwargs['api_key'], (str, None)) + assert isinstance(kwargs['api_key'], (str, type(None))) assert isinstance(kwargs['original_response'], (str, litellm.CustomStreamWrapper)) or inspect.isasyncgen(kwargs['original_response']) or inspect.iscoroutine(kwargs['original_response']) - assert isinstance(kwargs['additional_args'], (dict, None)) + assert isinstance(kwargs['additional_args'], (dict, type(None))) assert isinstance(kwargs['log_event_type'], str) except: print(f"Assertion Error: {traceback.format_exc()}") @@ -218,11 +218,11 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse assert isinstance(kwargs['litellm_params'], dict) assert isinstance(kwargs['start_time'], (datetime, type(None))) assert isinstance(kwargs['stream'], bool) - assert isinstance(kwargs['user'], (str, None)) + assert isinstance(kwargs['user'], (str, type(None))) assert isinstance(kwargs['input'], (list, str, dict)) - assert isinstance(kwargs['api_key'], (str, None)) + assert isinstance(kwargs['api_key'], (str, type(None))) assert isinstance(kwargs['original_response'], (str, litellm.CustomStreamWrapper)) or inspect.isasyncgen(kwargs['original_response']) or kwargs['original_response'] == None - assert isinstance(kwargs['additional_args'], (dict, None)) + assert isinstance(kwargs['additional_args'], (dict, type(None))) assert isinstance(kwargs['log_event_type'], str) except: print(f"Assertion Error: {traceback.format_exc()}") From 3b6099633c6a69f859aafbd2a7b3be6af4e00126 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Mon, 11 Dec 2023 16:40:23 -0800 Subject: [PATCH 409/460] test(test_custom_callback_router.py): add async azure testing for router --- litellm/main.py | 2 +- litellm/router.py | 6 +- litellm/tests/test_custom_callback_input.py | 5 +- litellm/tests/test_custom_callback_router.py | 398 +++++++++++++++++++ 4 files changed, 404 insertions(+), 7 deletions(-) create mode 100644 litellm/tests/test_custom_callback_router.py diff --git a/litellm/main.py b/litellm/main.py index 5ecfcf1db..ddeff3414 100644 --- a/litellm/main.py +++ b/litellm/main.py @@ -1835,7 +1835,7 @@ def embedding( try: response = None logging = litellm_logging_obj - logging.update_environment_variables(model=model, user="", optional_params=optional_params, litellm_params={"timeout": timeout, "azure": azure, "litellm_call_id": litellm_call_id, "logger_fn": logger_fn, "proxy_server_request": proxy_server_request, "model_info": model_info, "metadata": metadata, "aembedding": aembedding}) + logging.update_environment_variables(model=model, user="", optional_params=optional_params, litellm_params={"timeout": timeout, "azure": azure, "litellm_call_id": litellm_call_id, "logger_fn": logger_fn, "proxy_server_request": proxy_server_request, "model_info": model_info, "metadata": metadata, "aembedding": aembedding, "preset_cache_key": None, "stream_response": {}}) if azure == True or custom_llm_provider == "azure": # azure configs api_type = get_secret("AZURE_API_TYPE") or "azure" diff --git a/litellm/router.py b/litellm/router.py index 1721a381b..c01c7d42e 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -313,8 +313,8 @@ class Router: **kwargs) -> Union[List[float], None]: # pick the one that is available (lowest TPM/RPM) deployment = self.get_available_deployment(model=model, input=input, specific_deployment=kwargs.pop("specific_deployment", None)) - kwargs.setdefault("metadata", {}).update({"deployment": deployment["litellm_params"]["model"]}) - kwargs["model_info"] = deployment.get("model_info", {}) + kwargs.setdefault("model_info", {}) + kwargs.setdefault("metadata", {}).update({"model_group": model, "deployment": deployment["litellm_params"]["model"]}) # [TODO]: move to using async_function_with_fallbacks data = deployment["litellm_params"].copy() for k, v in self.default_litellm_params.items(): if k not in data: # prioritize model-specific params > default router params @@ -339,7 +339,7 @@ class Router: **kwargs) -> Union[List[float], None]: # pick the one that is available (lowest TPM/RPM) deployment = self.get_available_deployment(model=model, input=input, specific_deployment=kwargs.pop("specific_deployment", None)) - kwargs.setdefault("metadata", {}).update({"deployment": deployment["litellm_params"]["model"]}) + kwargs.setdefault("metadata", {}).update({"model_group": model, "deployment": deployment["litellm_params"]["model"]}) data = deployment["litellm_params"].copy() kwargs["model_info"] = deployment.get("model_info", {}) for k, v in self.default_litellm_params.items(): diff --git a/litellm/tests/test_custom_callback_input.py b/litellm/tests/test_custom_callback_input.py index 865ed4040..fa484dea0 100644 --- a/litellm/tests/test_custom_callback_input.py +++ b/litellm/tests/test_custom_callback_input.py @@ -22,8 +22,7 @@ from litellm.integrations.custom_logger import CustomLogger # Test interfaces ## 1. litellm.completion() + litellm.embeddings() -## 2. router.completion() + router.embeddings() -## 3. proxy.completions + proxy.embeddings +## refer to test_custom_callback_input_router.py for the router + proxy tests class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/observability/custom_callback#callback-class """ @@ -577,4 +576,4 @@ async def test_async_embedding_bedrock(): except Exception as e: pytest.fail(f"An exception occurred: {str(e)}") -asyncio.run(test_async_embedding_bedrock()) \ No newline at end of file +# asyncio.run(test_async_embedding_bedrock()) \ No newline at end of file diff --git a/litellm/tests/test_custom_callback_router.py b/litellm/tests/test_custom_callback_router.py new file mode 100644 index 000000000..38683bc2d --- /dev/null +++ b/litellm/tests/test_custom_callback_router.py @@ -0,0 +1,398 @@ +### What this tests #### +## This test asserts the type of data passed into each method of the custom callback handler +import sys, os, time, inspect, asyncio, traceback +from datetime import datetime +import pytest +sys.path.insert(0, os.path.abspath('../..')) +from typing import Optional, Literal, List +from litellm import Router +import litellm +from litellm.integrations.custom_logger import CustomLogger + +# Test Scenarios (test across completion, streaming, embedding) +## 1: Pre-API-Call +## 2: Post-API-Call +## 3: On LiteLLM Call success +## 4: On LiteLLM Call failure +## fallbacks +## retries + +# Test cases +## 1. Simple Azure OpenAI acompletion + streaming call +## 2. Simple Azure OpenAI aembedding call +## 3. Azure OpenAI acompletion + streaming call with retries +## 4. Azure OpenAI aembedding call with retries +## 5. Azure OpenAI acompletion + streaming call with fallbacks +## 6. Azure OpenAI aembedding call with fallbacks + +# Test interfaces +## 1. router.completion() + router.embeddings() +## 2. proxy.completions + proxy.embeddings + +class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/observability/custom_callback#callback-class + """ + The set of expected inputs to a custom handler for a + """ + # Class variables or attributes + def __init__(self): + self.errors = [] + self.states: Optional[List[Literal["sync_pre_api_call", "async_pre_api_call", "post_api_call", "sync_stream", "async_stream", "sync_success", "async_success", "sync_failure", "async_failure"]]] = [] + + def log_pre_api_call(self, model, messages, kwargs): + try: + print(f'received kwargs in pre-input: {kwargs}') + self.states.append("sync_pre_api_call") + ## MODEL + assert isinstance(model, str) + ## MESSAGES + assert isinstance(messages, list) + ## KWARGS + assert isinstance(kwargs['model'], str) + assert isinstance(kwargs['messages'], list) + assert isinstance(kwargs['optional_params'], dict) + assert isinstance(kwargs['litellm_params'], dict) + assert isinstance(kwargs['start_time'], Optional[datetime]) + assert isinstance(kwargs['stream'], bool) + assert isinstance(kwargs['user'], Optional[str]) + ### ROUTER-SPECIFIC KWARGS + assert isinstance(kwargs["litellm_params"]["metadata"], dict) + assert isinstance(kwargs["litellm_params"]["metadata"]["model_group"], str) + assert isinstance(kwargs["litellm_params"]["metadata"]["deployment"], str) + assert isinstance(kwargs["litellm_params"]["model_info"], dict) + assert isinstance(kwargs["litellm_params"]["model_info"]["id"], str) + assert isinstance(kwargs["litellm_params"]["proxy_server_request"], Optional[str]) + assert isinstance(kwargs["litellm_params"]["preset_cache_key"], Optional[str]) + assert isinstance(kwargs["litellm_params"]["stream_response"], dict) + except Exception as e: + print(f"Assertion Error: {traceback.format_exc()}") + self.errors.append(traceback.format_exc()) + + def log_post_api_call(self, kwargs, response_obj, start_time, end_time): + try: + self.states.append("post_api_call") + ## START TIME + assert isinstance(start_time, datetime) + ## END TIME + assert end_time == None + ## RESPONSE OBJECT + assert response_obj == None + ## KWARGS + assert isinstance(kwargs['model'], str) + assert isinstance(kwargs['messages'], list) + assert isinstance(kwargs['optional_params'], dict) + assert isinstance(kwargs['litellm_params'], dict) + assert isinstance(kwargs['start_time'], Optional[datetime]) + assert isinstance(kwargs['stream'], bool) + assert isinstance(kwargs['user'], Optional[str]) + assert isinstance(kwargs['input'], (list, dict, str)) + assert isinstance(kwargs['api_key'], Optional[str]) + assert isinstance(kwargs['original_response'], (str, litellm.CustomStreamWrapper)) or inspect.iscoroutine(kwargs['original_response']) or inspect.isasyncgen(kwargs['original_response']) + assert isinstance(kwargs['additional_args'], Optional[dict]) + assert isinstance(kwargs['log_event_type'], str) + ### ROUTER-SPECIFIC KWARGS + assert isinstance(kwargs["litellm_params"]["metadata"], dict) + assert isinstance(kwargs["litellm_params"]["metadata"]["model_group"], str) + assert isinstance(kwargs["litellm_params"]["metadata"]["deployment"], str) + assert isinstance(kwargs["litellm_params"]["model_info"], dict) + assert isinstance(kwargs["litellm_params"]["model_info"]["id"], str) + assert isinstance(kwargs["litellm_params"]["proxy_server_request"], Optional[str]) + assert isinstance(kwargs["litellm_params"]["preset_cache_key"], Optional[str]) + assert isinstance(kwargs["litellm_params"]["stream_response"], dict) + except: + print(f"Assertion Error: {traceback.format_exc()}") + self.errors.append(traceback.format_exc()) + + async def async_log_stream_event(self, kwargs, response_obj, start_time, end_time): + try: + self.states.append("async_stream") + ## START TIME + assert isinstance(start_time, datetime) + ## END TIME + assert isinstance(end_time, datetime) + ## RESPONSE OBJECT + assert isinstance(response_obj, litellm.ModelResponse) + ## KWARGS + assert isinstance(kwargs['model'], str) + assert isinstance(kwargs['messages'], list) and isinstance(kwargs['messages'][0], dict) + assert isinstance(kwargs['optional_params'], dict) + assert isinstance(kwargs['litellm_params'], dict) + assert isinstance(kwargs['start_time'], Optional[datetime]) + assert isinstance(kwargs['stream'], bool) + assert isinstance(kwargs['user'], Optional[str]) + assert (isinstance(kwargs['input'], list) and isinstance(kwargs['input'][0], dict)) or isinstance(kwargs['input'], (dict, str)) + assert isinstance(kwargs['api_key'], Optional[str]) + assert isinstance(kwargs['original_response'], (str, litellm.CustomStreamWrapper)) or inspect.isasyncgen(kwargs['original_response']) or inspect.iscoroutine(kwargs['original_response']) + assert isinstance(kwargs['additional_args'], Optional[dict]) + assert isinstance(kwargs['log_event_type'], str) + except: + print(f"Assertion Error: {traceback.format_exc()}") + self.errors.append(traceback.format_exc()) + + def log_success_event(self, kwargs, response_obj, start_time, end_time): + try: + self.states.append("sync_success") + ## START TIME + assert isinstance(start_time, datetime) + ## END TIME + assert isinstance(end_time, datetime) + ## RESPONSE OBJECT + assert isinstance(response_obj, litellm.ModelResponse) + ## KWARGS + assert isinstance(kwargs['model'], str) + assert isinstance(kwargs['messages'], list) and isinstance(kwargs['messages'][0], dict) + assert isinstance(kwargs['optional_params'], dict) + assert isinstance(kwargs['litellm_params'], dict) + assert isinstance(kwargs['start_time'], Optional[datetime]) + assert isinstance(kwargs['stream'], bool) + assert isinstance(kwargs['user'], Optional[str]) + assert (isinstance(kwargs['input'], list) and isinstance(kwargs['input'][0], dict)) or isinstance(kwargs['input'], (dict, str)) + assert isinstance(kwargs['api_key'], Optional[str]) + assert isinstance(kwargs['original_response'], (str, litellm.CustomStreamWrapper)) + assert isinstance(kwargs['additional_args'], Optional[dict]) + assert isinstance(kwargs['log_event_type'], str) + except: + print(f"Assertion Error: {traceback.format_exc()}") + self.errors.append(traceback.format_exc()) + + def log_failure_event(self, kwargs, response_obj, start_time, end_time): + try: + self.states.append("sync_failure") + ## START TIME + assert isinstance(start_time, datetime) + ## END TIME + assert isinstance(end_time, datetime) + ## RESPONSE OBJECT + assert response_obj == None + ## KWARGS + assert isinstance(kwargs['model'], str) + assert isinstance(kwargs['messages'], list) and isinstance(kwargs['messages'][0], dict) + assert isinstance(kwargs['optional_params'], dict) + assert isinstance(kwargs['litellm_params'], dict) + assert isinstance(kwargs['start_time'], Optional[datetime]) + assert isinstance(kwargs['stream'], bool) + assert isinstance(kwargs['user'], Optional[str]) + assert (isinstance(kwargs['input'], list) and isinstance(kwargs['input'][0], dict)) or isinstance(kwargs['input'], (dict, str)) + assert isinstance(kwargs['api_key'], Optional[str]) + assert isinstance(kwargs['original_response'], (str, litellm.CustomStreamWrapper)) or kwargs["original_response"] == None + assert isinstance(kwargs['additional_args'], Optional[dict]) + assert isinstance(kwargs['log_event_type'], str) + except: + print(f"Assertion Error: {traceback.format_exc()}") + self.errors.append(traceback.format_exc()) + + async def async_log_pre_api_call(self, model, messages, kwargs): + try: + """ + No-op. + Not implemented yet. + """ + pass + except Exception as e: + print(f"Assertion Error: {traceback.format_exc()}") + self.errors.append(traceback.format_exc()) + + async def async_log_success_event(self, kwargs, response_obj, start_time, end_time): + try: + self.states.append("async_success") + ## START TIME + assert isinstance(start_time, datetime) + ## END TIME + assert isinstance(end_time, datetime) + ## RESPONSE OBJECT + assert isinstance(response_obj, (litellm.ModelResponse, litellm.EmbeddingResponse)) + ## KWARGS + assert isinstance(kwargs['model'], str) + assert isinstance(kwargs['messages'], list) + assert isinstance(kwargs['optional_params'], dict) + assert isinstance(kwargs['litellm_params'], dict) + assert isinstance(kwargs['start_time'], Optional[datetime]) + assert isinstance(kwargs['stream'], bool) + assert isinstance(kwargs['user'], Optional[str]) + assert isinstance(kwargs['input'], (list, dict, str)) + assert isinstance(kwargs['api_key'], Optional[str]) + assert isinstance(kwargs['original_response'], (str, litellm.CustomStreamWrapper)) or inspect.isasyncgen(kwargs['original_response']) or inspect.iscoroutine(kwargs['original_response']) + assert isinstance(kwargs['additional_args'], Optional[dict]) + assert isinstance(kwargs['log_event_type'], str) + ### ROUTER-SPECIFIC KWARGS + assert isinstance(kwargs["litellm_params"]["metadata"], dict) + assert isinstance(kwargs["litellm_params"]["metadata"]["model_group"], str) + assert isinstance(kwargs["litellm_params"]["metadata"]["deployment"], str) + assert isinstance(kwargs["litellm_params"]["model_info"], dict) + assert isinstance(kwargs["litellm_params"]["model_info"]["id"], str) + assert isinstance(kwargs["litellm_params"]["proxy_server_request"], Optional[str]) + assert isinstance(kwargs["litellm_params"]["preset_cache_key"], Optional[str]) + assert isinstance(kwargs["litellm_params"]["stream_response"], dict) + except: + print(f"Assertion Error: {traceback.format_exc()}") + self.errors.append(traceback.format_exc()) + + async def async_log_failure_event(self, kwargs, response_obj, start_time, end_time): + try: + print(f"received original response: {kwargs['original_response']}") + self.states.append("async_failure") + ## START TIME + assert isinstance(start_time, datetime) + ## END TIME + assert isinstance(end_time, datetime) + ## RESPONSE OBJECT + assert response_obj == None + ## KWARGS + assert isinstance(kwargs['model'], str) + assert isinstance(kwargs['messages'], list) + assert isinstance(kwargs['optional_params'], dict) + assert isinstance(kwargs['litellm_params'], dict) + assert isinstance(kwargs['start_time'], Optional[datetime]) + assert isinstance(kwargs['stream'], bool) + assert isinstance(kwargs['user'], Optional[str]) + assert isinstance(kwargs['input'], (list, str, dict)) + assert isinstance(kwargs['api_key'], Optional[str]) + assert isinstance(kwargs['original_response'], (str, litellm.CustomStreamWrapper)) or inspect.isasyncgen(kwargs['original_response']) or inspect.iscoroutine(kwargs['original_response']) or kwargs['original_response'] == None + assert isinstance(kwargs['additional_args'], Optional[dict]) + assert isinstance(kwargs['log_event_type'], str) + except: + print(f"Assertion Error: {traceback.format_exc()}") + self.errors.append(traceback.format_exc()) + +# Simple Azure OpenAI call +## COMPLETION +@pytest.mark.asyncio +async def test_async_chat_azure(): + try: + customHandler = CompletionCustomHandler() + customHandler_streaming = CompletionCustomHandler() + customHandler_failure = CompletionCustomHandler() + litellm.callbacks = [customHandler] + model_list = [ + { + "model_name": "gpt-3.5-turbo", # openai model name + "litellm_params": { # params for litellm completion/embedding call + "model": "azure/chatgpt-v-2", + "api_key": os.getenv("AZURE_API_KEY"), + "api_version": os.getenv("AZURE_API_VERSION"), + "api_base": os.getenv("AZURE_API_BASE") + }, + "tpm": 240000, + "rpm": 1800 + }, + ] + router = Router(model_list=model_list) # type: ignore + response = await router.acompletion(model="gpt-3.5-turbo", + messages=[{ + "role": "user", + "content": "Hi 👋 - i'm openai" + }]) + await asyncio.sleep(2) + assert len(customHandler.errors) == 0 + assert len(customHandler.states) == 3 # pre, post, success + # streaming + litellm.callbacks = [customHandler_streaming] + router2 = Router(model_list=model_list) # type: ignore + response = await router2.acompletion(model="gpt-3.5-turbo", + messages=[{ + "role": "user", + "content": "Hi 👋 - i'm openai" + }], + stream=True) + async for chunk in response: + continue + await asyncio.sleep(1) + print(f"customHandler.states: {customHandler_streaming.states}") + assert len(customHandler_streaming.errors) == 0 + assert len(customHandler_streaming.states) >= 4 # pre, post, stream (multiple times), success + # failure + model_list = [ + { + "model_name": "gpt-3.5-turbo", # openai model name + "litellm_params": { # params for litellm completion/embedding call + "model": "azure/chatgpt-v-2", + "api_key": "my-bad-key", + "api_version": os.getenv("AZURE_API_VERSION"), + "api_base": os.getenv("AZURE_API_BASE") + }, + "tpm": 240000, + "rpm": 1800 + }, + ] + litellm.callbacks = [customHandler_failure] + router3 = Router(model_list=model_list) # type: ignore + try: + response = await router3.acompletion(model="gpt-3.5-turbo", + messages=[{ + "role": "user", + "content": "Hi 👋 - i'm openai" + }]) + print(f"response in router3 acompletion: {response}") + except: + pass + await asyncio.sleep(1) + print(f"customHandler.states: {customHandler_failure.states}") + assert len(customHandler_failure.errors) == 0 + assert len(customHandler_failure.states) == 3 # pre, post, failure + assert "async_failure" in customHandler_failure.states + except Exception as e: + print(f"Assertion Error: {traceback.format_exc()}") + pytest.fail(f"An exception occurred - {str(e)}") +# asyncio.run(test_async_chat_azure()) +## EMBEDDING +async def test_async_embedding_azure(): + try: + customHandler = CompletionCustomHandler() + customHandler_failure = CompletionCustomHandler() + litellm.callbacks = [customHandler] + model_list = [ + { + "model_name": "azure-embedding-model", # openai model name + "litellm_params": { # params for litellm completion/embedding call + "model": "azure/azure-embedding-model", + "api_key": os.getenv("AZURE_API_KEY"), + "api_version": os.getenv("AZURE_API_VERSION"), + "api_base": os.getenv("AZURE_API_BASE") + }, + "tpm": 240000, + "rpm": 1800 + }, + ] + router = Router(model_list=model_list) # type: ignore + response = await router.aembedding(model="azure-embedding-model", + input=["hello from litellm!"]) + await asyncio.sleep(2) + assert len(customHandler.errors) == 0 + assert len(customHandler.states) == 3 # pre, post, success + # failure + model_list = [ + { + "model_name": "azure-embedding-model", # openai model name + "litellm_params": { # params for litellm completion/embedding call + "model": "azure/azure-embedding-model", + "api_key": "my-bad-key", + "api_version": os.getenv("AZURE_API_VERSION"), + "api_base": os.getenv("AZURE_API_BASE") + }, + "tpm": 240000, + "rpm": 1800 + }, + ] + litellm.callbacks = [customHandler_failure] + router3 = Router(model_list=model_list) # type: ignore + try: + response = await router3.aembedding(model="azure-embedding-model", + input=["hello from litellm!"]) + print(f"response in router3 aembedding: {response}") + except: + pass + await asyncio.sleep(1) + print(f"customHandler.states: {customHandler_failure.states}") + assert len(customHandler_failure.errors) == 0 + assert len(customHandler_failure.states) == 3 # pre, post, failure + assert "async_failure" in customHandler_failure.states + except Exception as e: + print(f"Assertion Error: {traceback.format_exc()}") + pytest.fail(f"An exception occurred - {str(e)}") +asyncio.run(test_async_embedding_azure()) +# Azure OpenAI call w/ Retries +## COMPLETION +## EMBEDDING + +# Azure OpenAI call w/ fallbacks +## COMPLETION +## EMBEDDING From 19f493a506ed80b21675e05c014c72a53a6ae400 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 16:41:47 -0800 Subject: [PATCH 410/460] (test) custom logger --- litellm/tests/test_aamazing_proxy_custom_logger.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/litellm/tests/test_aamazing_proxy_custom_logger.py b/litellm/tests/test_aamazing_proxy_custom_logger.py index 6393f8138..b2bfe39ed 100644 --- a/litellm/tests/test_aamazing_proxy_custom_logger.py +++ b/litellm/tests/test_aamazing_proxy_custom_logger.py @@ -97,7 +97,6 @@ def test_embedding(client): def test_chat_completion(client): try: # Your test data - global my_custom_logger print("initialized proxy") litellm.set_verbose=False from litellm.proxy.utils import get_instance_fn @@ -135,7 +134,7 @@ def test_chat_completion(client): print("LiteLLM Callbacks", litellm.callbacks) asyncio.sleep(1) # sleep while waiting for callback to run - print("my_custom_logger in /chat/completions", my_custom_logger) + print("my_custom_logger in /chat/completions", my_custom_logger, "id", id(my_custom_logger)) print("vars my custom logger, ", vars(my_custom_logger)) assert my_custom_logger.async_success == True # checks if the status of async_success is True, only the async_log_success_event can set this to true assert my_custom_logger.async_completion_kwargs["model"] == "chatgpt-v-2" # checks if kwargs passed to async_log_success_event are correct From 38275f980028b6aa83ba556a93eb845beb0daedf Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Mon, 11 Dec 2023 16:58:57 -0800 Subject: [PATCH 411/460] test(test_custom_callback_router.py): fix testing for circle ci --- litellm/tests/test_custom_callback_router.py | 154 ++++++++++++++----- 1 file changed, 119 insertions(+), 35 deletions(-) diff --git a/litellm/tests/test_custom_callback_router.py b/litellm/tests/test_custom_callback_router.py index 38683bc2d..8a3ad1630 100644 --- a/litellm/tests/test_custom_callback_router.py +++ b/litellm/tests/test_custom_callback_router.py @@ -81,13 +81,13 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse assert isinstance(kwargs['messages'], list) assert isinstance(kwargs['optional_params'], dict) assert isinstance(kwargs['litellm_params'], dict) - assert isinstance(kwargs['start_time'], Optional[datetime]) + assert isinstance(kwargs['start_time'], (datetime, type(None))) assert isinstance(kwargs['stream'], bool) - assert isinstance(kwargs['user'], Optional[str]) + assert isinstance(kwargs['user'], (str, type(None))) assert isinstance(kwargs['input'], (list, dict, str)) - assert isinstance(kwargs['api_key'], Optional[str]) + assert isinstance(kwargs['api_key'], (str, type(None))) assert isinstance(kwargs['original_response'], (str, litellm.CustomStreamWrapper)) or inspect.iscoroutine(kwargs['original_response']) or inspect.isasyncgen(kwargs['original_response']) - assert isinstance(kwargs['additional_args'], Optional[dict]) + assert isinstance(kwargs['additional_args'], (dict, type(None))) assert isinstance(kwargs['log_event_type'], str) ### ROUTER-SPECIFIC KWARGS assert isinstance(kwargs["litellm_params"]["metadata"], dict) @@ -95,8 +95,8 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse assert isinstance(kwargs["litellm_params"]["metadata"]["deployment"], str) assert isinstance(kwargs["litellm_params"]["model_info"], dict) assert isinstance(kwargs["litellm_params"]["model_info"]["id"], str) - assert isinstance(kwargs["litellm_params"]["proxy_server_request"], Optional[str]) - assert isinstance(kwargs["litellm_params"]["preset_cache_key"], Optional[str]) + assert isinstance(kwargs["litellm_params"]["proxy_server_request"], (str, type(None))) + assert isinstance(kwargs["litellm_params"]["preset_cache_key"], (str, type(None))) assert isinstance(kwargs["litellm_params"]["stream_response"], dict) except: print(f"Assertion Error: {traceback.format_exc()}") @@ -116,13 +116,13 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse assert isinstance(kwargs['messages'], list) and isinstance(kwargs['messages'][0], dict) assert isinstance(kwargs['optional_params'], dict) assert isinstance(kwargs['litellm_params'], dict) - assert isinstance(kwargs['start_time'], Optional[datetime]) + assert isinstance(kwargs['start_time'], (datetime, type(None))) assert isinstance(kwargs['stream'], bool) - assert isinstance(kwargs['user'], Optional[str]) + assert isinstance(kwargs['user'], (str, type(None))) assert (isinstance(kwargs['input'], list) and isinstance(kwargs['input'][0], dict)) or isinstance(kwargs['input'], (dict, str)) - assert isinstance(kwargs['api_key'], Optional[str]) + assert isinstance(kwargs['api_key'], (str, type(None))) assert isinstance(kwargs['original_response'], (str, litellm.CustomStreamWrapper)) or inspect.isasyncgen(kwargs['original_response']) or inspect.iscoroutine(kwargs['original_response']) - assert isinstance(kwargs['additional_args'], Optional[dict]) + assert isinstance(kwargs['additional_args'], (dict, type(None))) assert isinstance(kwargs['log_event_type'], str) except: print(f"Assertion Error: {traceback.format_exc()}") @@ -142,13 +142,13 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse assert isinstance(kwargs['messages'], list) and isinstance(kwargs['messages'][0], dict) assert isinstance(kwargs['optional_params'], dict) assert isinstance(kwargs['litellm_params'], dict) - assert isinstance(kwargs['start_time'], Optional[datetime]) + assert isinstance(kwargs['start_time'], (datetime, type(None))) assert isinstance(kwargs['stream'], bool) - assert isinstance(kwargs['user'], Optional[str]) + assert isinstance(kwargs['user'], (str, type(None))) assert (isinstance(kwargs['input'], list) and isinstance(kwargs['input'][0], dict)) or isinstance(kwargs['input'], (dict, str)) - assert isinstance(kwargs['api_key'], Optional[str]) + assert isinstance(kwargs['api_key'], (str, type(None))) assert isinstance(kwargs['original_response'], (str, litellm.CustomStreamWrapper)) - assert isinstance(kwargs['additional_args'], Optional[dict]) + assert isinstance(kwargs['additional_args'], (dict, type(None))) assert isinstance(kwargs['log_event_type'], str) except: print(f"Assertion Error: {traceback.format_exc()}") @@ -168,13 +168,13 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse assert isinstance(kwargs['messages'], list) and isinstance(kwargs['messages'][0], dict) assert isinstance(kwargs['optional_params'], dict) assert isinstance(kwargs['litellm_params'], dict) - assert isinstance(kwargs['start_time'], Optional[datetime]) + assert isinstance(kwargs['start_time'], (datetime, type(None))) assert isinstance(kwargs['stream'], bool) - assert isinstance(kwargs['user'], Optional[str]) + assert isinstance(kwargs['user'], (str, type(None))) assert (isinstance(kwargs['input'], list) and isinstance(kwargs['input'][0], dict)) or isinstance(kwargs['input'], (dict, str)) - assert isinstance(kwargs['api_key'], Optional[str]) + assert isinstance(kwargs['api_key'], (str, type(None))) assert isinstance(kwargs['original_response'], (str, litellm.CustomStreamWrapper)) or kwargs["original_response"] == None - assert isinstance(kwargs['additional_args'], Optional[dict]) + assert isinstance(kwargs['additional_args'], (dict, type(None))) assert isinstance(kwargs['log_event_type'], str) except: print(f"Assertion Error: {traceback.format_exc()}") @@ -205,13 +205,13 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse assert isinstance(kwargs['messages'], list) assert isinstance(kwargs['optional_params'], dict) assert isinstance(kwargs['litellm_params'], dict) - assert isinstance(kwargs['start_time'], Optional[datetime]) + assert isinstance(kwargs['start_time'], (datetime, type(None))) assert isinstance(kwargs['stream'], bool) - assert isinstance(kwargs['user'], Optional[str]) + assert isinstance(kwargs['user'], (str, type(None))) assert isinstance(kwargs['input'], (list, dict, str)) - assert isinstance(kwargs['api_key'], Optional[str]) + assert isinstance(kwargs['api_key'], (str, type(None))) assert isinstance(kwargs['original_response'], (str, litellm.CustomStreamWrapper)) or inspect.isasyncgen(kwargs['original_response']) or inspect.iscoroutine(kwargs['original_response']) - assert isinstance(kwargs['additional_args'], Optional[dict]) + assert isinstance(kwargs['additional_args'], (dict, type(None))) assert isinstance(kwargs['log_event_type'], str) ### ROUTER-SPECIFIC KWARGS assert isinstance(kwargs["litellm_params"]["metadata"], dict) @@ -219,8 +219,8 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse assert isinstance(kwargs["litellm_params"]["metadata"]["deployment"], str) assert isinstance(kwargs["litellm_params"]["model_info"], dict) assert isinstance(kwargs["litellm_params"]["model_info"]["id"], str) - assert isinstance(kwargs["litellm_params"]["proxy_server_request"], Optional[str]) - assert isinstance(kwargs["litellm_params"]["preset_cache_key"], Optional[str]) + assert isinstance(kwargs["litellm_params"]["proxy_server_request"], (str, type(None))) + assert isinstance(kwargs["litellm_params"]["preset_cache_key"], (str, type(None))) assert isinstance(kwargs["litellm_params"]["stream_response"], dict) except: print(f"Assertion Error: {traceback.format_exc()}") @@ -241,13 +241,13 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse assert isinstance(kwargs['messages'], list) assert isinstance(kwargs['optional_params'], dict) assert isinstance(kwargs['litellm_params'], dict) - assert isinstance(kwargs['start_time'], Optional[datetime]) + assert isinstance(kwargs['start_time'], (datetime, type(None))) assert isinstance(kwargs['stream'], bool) - assert isinstance(kwargs['user'], Optional[str]) + assert isinstance(kwargs['user'], (str, type(None))) assert isinstance(kwargs['input'], (list, str, dict)) - assert isinstance(kwargs['api_key'], Optional[str]) + assert isinstance(kwargs['api_key'], (str, type(None))) assert isinstance(kwargs['original_response'], (str, litellm.CustomStreamWrapper)) or inspect.isasyncgen(kwargs['original_response']) or inspect.iscoroutine(kwargs['original_response']) or kwargs['original_response'] == None - assert isinstance(kwargs['additional_args'], Optional[dict]) + assert isinstance(kwargs['additional_args'], (dict, type(None))) assert isinstance(kwargs['log_event_type'], str) except: print(f"Assertion Error: {traceback.format_exc()}") @@ -334,6 +334,7 @@ async def test_async_chat_azure(): pytest.fail(f"An exception occurred - {str(e)}") # asyncio.run(test_async_chat_azure()) ## EMBEDDING +@pytest.mark.asyncio async def test_async_embedding_azure(): try: customHandler = CompletionCustomHandler() @@ -388,11 +389,94 @@ async def test_async_embedding_azure(): except Exception as e: print(f"Assertion Error: {traceback.format_exc()}") pytest.fail(f"An exception occurred - {str(e)}") -asyncio.run(test_async_embedding_azure()) -# Azure OpenAI call w/ Retries +# asyncio.run(test_async_embedding_azure()) +# Azure OpenAI call w/ Retries + Fallbacks ## COMPLETION -## EMBEDDING - -# Azure OpenAI call w/ fallbacks -## COMPLETION -## EMBEDDING +@pytest.mark.asyncio +async def test_async_chat_azure_with_retries_and_fallbacks(): + try: + customHandler_fallbacks = CompletionCustomHandler() + customHandler_streaming = CompletionCustomHandler() + customHandler_failure = CompletionCustomHandler() + litellm.callbacks = [customHandler_fallbacks] + model_list = [ + { + "model_name": "gpt-3.5-turbo", # openai model name + "litellm_params": { # params for litellm completion/embedding call + "model": "azure/chatgpt-v-2", + "api_key": "my-bad-key", + "api_version": os.getenv("AZURE_API_VERSION"), + "api_base": os.getenv("AZURE_API_BASE") + }, + "tpm": 240000, + "rpm": 1800 + }, + { + "model_name": "gpt-3.5-turbo-16k", + "litellm_params": { + "model": "gpt-3.5-turbo-16k", + }, + "tpm": 240000, + "rpm": 1800 + } + ] + router = Router(model_list=model_list, fallbacks=[{"gpt-3.5-turbo": ["gpt-3.5-turbo-16k"]}]) # type: ignore + response = await router.acompletion(model="gpt-3.5-turbo", + messages=[{ + "role": "user", + "content": "Hi 👋 - i'm openai" + }]) + await asyncio.sleep(2) + print(f"customHandler_fallbacks.states: {customHandler_fallbacks.states}") + assert len(customHandler_fallbacks.errors) == 0 + assert len(customHandler_fallbacks.states) == 6 # pre, post, failure, pre, post, success + + # # streaming + # litellm.callbacks = [customHandler_streaming] + # router2 = Router(model_list=model_list) # type: ignore + # response = await router2.acompletion(model="gpt-3.5-turbo", + # messages=[{ + # "role": "user", + # "content": "Hi 👋 - i'm openai" + # }], + # stream=True) + # async for chunk in response: + # continue + # await asyncio.sleep(1) + # print(f"customHandler.states: {customHandler_streaming.states}") + # assert len(customHandler_streaming.errors) == 0 + # assert len(customHandler_streaming.states) >= 4 # pre, post, stream (multiple times), success + # # failure + # model_list = [ + # { + # "model_name": "gpt-3.5-turbo", # openai model name + # "litellm_params": { # params for litellm completion/embedding call + # "model": "azure/chatgpt-v-2", + # "api_key": "my-bad-key", + # "api_version": os.getenv("AZURE_API_VERSION"), + # "api_base": os.getenv("AZURE_API_BASE") + # }, + # "tpm": 240000, + # "rpm": 1800 + # }, + # ] + # litellm.callbacks = [customHandler_failure] + # router3 = Router(model_list=model_list) # type: ignore + # try: + # response = await router3.acompletion(model="gpt-3.5-turbo", + # messages=[{ + # "role": "user", + # "content": "Hi 👋 - i'm openai" + # }]) + # print(f"response in router3 acompletion: {response}") + # except: + # pass + # await asyncio.sleep(1) + # print(f"customHandler.states: {customHandler_failure.states}") + # assert len(customHandler_failure.errors) == 0 + # assert len(customHandler_failure.states) == 3 # pre, post, failure + # assert "async_failure" in customHandler_failure.states + except Exception as e: + print(f"Assertion Error: {traceback.format_exc()}") + pytest.fail(f"An exception occurred - {str(e)}") +asyncio.run(test_async_chat_azure_with_retries_and_fallbacks()) \ No newline at end of file From cc9095386fa8452945b11ced521ea1b583bc9eed Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 17:03:36 -0800 Subject: [PATCH 412/460] (ci/cd) use conftest.py --- litellm/tests/conftest.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 litellm/tests/conftest.py diff --git a/litellm/tests/conftest.py b/litellm/tests/conftest.py new file mode 100644 index 000000000..8432e9e75 --- /dev/null +++ b/litellm/tests/conftest.py @@ -0,0 +1,15 @@ +# conftest.py + +import pytest + +def pytest_collection_modifyitems(config, items): + # Separate tests in 'test_amazing_proxy_custom_logger.py' and other tests + custom_logger_tests = [item for item in items if 'custom_logger' in item.parent.name] + other_tests = [item for item in items if 'custom_logger' not in item.parent.name] + + # Sort tests based on their names + custom_logger_tests.sort(key=lambda x: x.name) + other_tests.sort(key=lambda x: x.name) + + # Reorder the items list + items[:] = custom_logger_tests + other_tests \ No newline at end of file From c38f6dddf1eb776af33f86d3062764790d1b1dd7 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 17:05:43 -0800 Subject: [PATCH 413/460] (ci/cd) test custom callbacks --- litellm/tests/test_custom_callback_router.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/litellm/tests/test_custom_callback_router.py b/litellm/tests/test_custom_callback_router.py index 8a3ad1630..bd7b38bf7 100644 --- a/litellm/tests/test_custom_callback_router.py +++ b/litellm/tests/test_custom_callback_router.py @@ -51,17 +51,17 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse assert isinstance(kwargs['messages'], list) assert isinstance(kwargs['optional_params'], dict) assert isinstance(kwargs['litellm_params'], dict) - assert isinstance(kwargs['start_time'], Optional[datetime]) + assert isinstance(kwargs['start_time'], (datetime, type(None))) assert isinstance(kwargs['stream'], bool) - assert isinstance(kwargs['user'], Optional[str]) + assert isinstance(kwargs['user'], (str, type(None))) ### ROUTER-SPECIFIC KWARGS assert isinstance(kwargs["litellm_params"]["metadata"], dict) assert isinstance(kwargs["litellm_params"]["metadata"]["model_group"], str) assert isinstance(kwargs["litellm_params"]["metadata"]["deployment"], str) assert isinstance(kwargs["litellm_params"]["model_info"], dict) assert isinstance(kwargs["litellm_params"]["model_info"]["id"], str) - assert isinstance(kwargs["litellm_params"]["proxy_server_request"], Optional[str]) - assert isinstance(kwargs["litellm_params"]["preset_cache_key"], Optional[str]) + assert isinstance(kwargs["litellm_params"]["proxy_server_request"], (str, type(None))) + assert isinstance(kwargs["litellm_params"]["preset_cache_key"], (str, type(None))) assert isinstance(kwargs["litellm_params"]["stream_response"], dict) except Exception as e: print(f"Assertion Error: {traceback.format_exc()}") From 6821d74588d1b9797b898beda649b11a93078911 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Mon, 11 Dec 2023 17:11:34 -0800 Subject: [PATCH 414/460] test(test_custom_callback_router.py): test cleanup --- litellm/tests/test_custom_callback_router.py | 56 ++----------------- ..._logger.py => test_proxy_custom_logger.py} | 0 2 files changed, 4 insertions(+), 52 deletions(-) rename litellm/tests/{test_aamazing_proxy_custom_logger.py => test_proxy_custom_logger.py} (100%) diff --git a/litellm/tests/test_custom_callback_router.py b/litellm/tests/test_custom_callback_router.py index bd7b38bf7..00e5fd308 100644 --- a/litellm/tests/test_custom_callback_router.py +++ b/litellm/tests/test_custom_callback_router.py @@ -390,15 +390,13 @@ async def test_async_embedding_azure(): print(f"Assertion Error: {traceback.format_exc()}") pytest.fail(f"An exception occurred - {str(e)}") # asyncio.run(test_async_embedding_azure()) -# Azure OpenAI call w/ Retries + Fallbacks +# Azure OpenAI call w/ Fallbacks ## COMPLETION @pytest.mark.asyncio -async def test_async_chat_azure_with_retries_and_fallbacks(): +async def test_async_chat_azure_with_fallbacks(): try: customHandler_fallbacks = CompletionCustomHandler() - customHandler_streaming = CompletionCustomHandler() - customHandler_failure = CompletionCustomHandler() - litellm.callbacks = [customHandler_fallbacks] + # with fallbacks model_list = [ { "model_name": "gpt-3.5-turbo", # openai model name @@ -430,53 +428,7 @@ async def test_async_chat_azure_with_retries_and_fallbacks(): print(f"customHandler_fallbacks.states: {customHandler_fallbacks.states}") assert len(customHandler_fallbacks.errors) == 0 assert len(customHandler_fallbacks.states) == 6 # pre, post, failure, pre, post, success - - # # streaming - # litellm.callbacks = [customHandler_streaming] - # router2 = Router(model_list=model_list) # type: ignore - # response = await router2.acompletion(model="gpt-3.5-turbo", - # messages=[{ - # "role": "user", - # "content": "Hi 👋 - i'm openai" - # }], - # stream=True) - # async for chunk in response: - # continue - # await asyncio.sleep(1) - # print(f"customHandler.states: {customHandler_streaming.states}") - # assert len(customHandler_streaming.errors) == 0 - # assert len(customHandler_streaming.states) >= 4 # pre, post, stream (multiple times), success - # # failure - # model_list = [ - # { - # "model_name": "gpt-3.5-turbo", # openai model name - # "litellm_params": { # params for litellm completion/embedding call - # "model": "azure/chatgpt-v-2", - # "api_key": "my-bad-key", - # "api_version": os.getenv("AZURE_API_VERSION"), - # "api_base": os.getenv("AZURE_API_BASE") - # }, - # "tpm": 240000, - # "rpm": 1800 - # }, - # ] - # litellm.callbacks = [customHandler_failure] - # router3 = Router(model_list=model_list) # type: ignore - # try: - # response = await router3.acompletion(model="gpt-3.5-turbo", - # messages=[{ - # "role": "user", - # "content": "Hi 👋 - i'm openai" - # }]) - # print(f"response in router3 acompletion: {response}") - # except: - # pass - # await asyncio.sleep(1) - # print(f"customHandler.states: {customHandler_failure.states}") - # assert len(customHandler_failure.errors) == 0 - # assert len(customHandler_failure.states) == 3 # pre, post, failure - # assert "async_failure" in customHandler_failure.states except Exception as e: print(f"Assertion Error: {traceback.format_exc()}") pytest.fail(f"An exception occurred - {str(e)}") -asyncio.run(test_async_chat_azure_with_retries_and_fallbacks()) \ No newline at end of file +# asyncio.run(test_async_chat_azure_with_fallbacks()) \ No newline at end of file diff --git a/litellm/tests/test_aamazing_proxy_custom_logger.py b/litellm/tests/test_proxy_custom_logger.py similarity index 100% rename from litellm/tests/test_aamazing_proxy_custom_logger.py rename to litellm/tests/test_proxy_custom_logger.py From 1f18093b631b96bd9084ae77523659d7753692bd Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Mon, 11 Dec 2023 17:41:47 -0800 Subject: [PATCH 415/460] test(test_custom_logger.py): reset cache test correctly --- .gitignore | 1 + litellm/tests/test_custom_callback_router.py | 21 +++++++++++--------- litellm/tests/test_custom_logger.py | 8 ++------ 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/.gitignore b/.gitignore index 088996ddd..d0f88d972 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,4 @@ litellm/proxy/_secret_config.yaml litellm/tests/aiologs.log litellm/tests/exception_data.txt litellm/tests/config_*.yaml +litellm/tests/langfuse.log diff --git a/litellm/tests/test_custom_callback_router.py b/litellm/tests/test_custom_callback_router.py index 00e5fd308..d9f67d6e3 100644 --- a/litellm/tests/test_custom_callback_router.py +++ b/litellm/tests/test_custom_callback_router.py @@ -258,10 +258,10 @@ class CompletionCustomHandler(CustomLogger): # https://docs.litellm.ai/docs/obse @pytest.mark.asyncio async def test_async_chat_azure(): try: - customHandler = CompletionCustomHandler() - customHandler_streaming = CompletionCustomHandler() + customHandler_completion_azure_router = CompletionCustomHandler() + customHandler_streaming_azure_router = CompletionCustomHandler() customHandler_failure = CompletionCustomHandler() - litellm.callbacks = [customHandler] + litellm.callbacks = [customHandler_completion_azure_router] model_list = [ { "model_name": "gpt-3.5-turbo", # openai model name @@ -282,10 +282,10 @@ async def test_async_chat_azure(): "content": "Hi 👋 - i'm openai" }]) await asyncio.sleep(2) - assert len(customHandler.errors) == 0 - assert len(customHandler.states) == 3 # pre, post, success + assert len(customHandler_completion_azure_router.errors) == 0 + assert len(customHandler_completion_azure_router.states) == 3 # pre, post, success # streaming - litellm.callbacks = [customHandler_streaming] + litellm.callbacks = [customHandler_streaming_azure_router] router2 = Router(model_list=model_list) # type: ignore response = await router2.acompletion(model="gpt-3.5-turbo", messages=[{ @@ -294,11 +294,12 @@ async def test_async_chat_azure(): }], stream=True) async for chunk in response: + print(f"async azure router chunk: {chunk}") continue await asyncio.sleep(1) - print(f"customHandler.states: {customHandler_streaming.states}") - assert len(customHandler_streaming.errors) == 0 - assert len(customHandler_streaming.states) >= 4 # pre, post, stream (multiple times), success + print(f"customHandler.states: {customHandler_streaming_azure_router.states}") + assert len(customHandler_streaming_azure_router.errors) == 0 + assert len(customHandler_streaming_azure_router.states) >= 4 # pre, post, stream (multiple times), success # failure model_list = [ { @@ -396,6 +397,7 @@ async def test_async_embedding_azure(): async def test_async_chat_azure_with_fallbacks(): try: customHandler_fallbacks = CompletionCustomHandler() + litellm.callbacks = [customHandler_fallbacks] # with fallbacks model_list = [ { @@ -428,6 +430,7 @@ async def test_async_chat_azure_with_fallbacks(): print(f"customHandler_fallbacks.states: {customHandler_fallbacks.states}") assert len(customHandler_fallbacks.errors) == 0 assert len(customHandler_fallbacks.states) == 6 # pre, post, failure, pre, post, success + litellm.callbacks = [] except Exception as e: print(f"Assertion Error: {traceback.format_exc()}") pytest.fail(f"An exception occurred - {str(e)}") diff --git a/litellm/tests/test_custom_logger.py b/litellm/tests/test_custom_logger.py index 2df5e0f76..7ae2df729 100644 --- a/litellm/tests/test_custom_logger.py +++ b/litellm/tests/test_custom_logger.py @@ -205,7 +205,6 @@ def test_azure_completion_stream(): assert response_in_success_handler == complete_streaming_response except Exception as e: pytest.fail(f"Error occurred: {e}") -test_azure_completion_stream() def test_async_custom_handler(): try: @@ -316,13 +315,10 @@ def test_redis_cache_completion_stream(): print("\nresponse 2", response_2_content) assert response_1_content == response_2_content, f"Response 1 != Response 2. Same params, Response 1{response_1_content} != Response 2{response_2_content}" litellm.success_callback = [] + litellm._async_success_callback = [] litellm.cache = None except Exception as e: print(e) litellm.success_callback = [] raise e - """ - - 1 & 2 should be exactly the same - """ -# test_redis_cache_completion_stream() \ No newline at end of file + pytest.fail(f"Error occurred: {e}") \ No newline at end of file From 2eb66642c4ee443ee11e1199a349b3b7248f6760 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 17:50:31 -0800 Subject: [PATCH 416/460] (test) proxy custom logger --- litellm/tests/test_proxy_custom_auth.py | 22 +++++++------- litellm/tests/test_proxy_custom_logger.py | 36 +++++++++++++---------- 2 files changed, 30 insertions(+), 28 deletions(-) diff --git a/litellm/tests/test_proxy_custom_auth.py b/litellm/tests/test_proxy_custom_auth.py index 5708b1c41..db2976581 100644 --- a/litellm/tests/test_proxy_custom_auth.py +++ b/litellm/tests/test_proxy_custom_auth.py @@ -19,24 +19,22 @@ from litellm import RateLimitError from fastapi.testclient import TestClient from fastapi import FastAPI from litellm.proxy.proxy_server import router, save_worker_config, initialize # Replace with the actual module where your FastAPI router is defined -filepath = os.path.dirname(os.path.abspath(__file__)) -config_fp = f"{filepath}/test_configs/test_config_custom_auth.yaml" -save_worker_config(config=config_fp, model=None, alias=None, api_base=None, api_version=None, debug=False, temperature=None, max_tokens=None, request_timeout=600, max_budget=None, telemetry=False, drop_params=True, add_function_to_prompt=False, headers=None, save=False, use_queue=False) -app = FastAPI() -app.include_router(router) # Include your router in the test app -@app.on_event("startup") -async def wrapper_startup_event(): - initialize(config=config_fp, model=None, alias=None, api_base=None, api_version=None, debug=False, temperature=None, max_tokens=None, request_timeout=600, max_budget=None, telemetry=False, drop_params=True, add_function_to_prompt=False, headers=None, save=False, use_queue=False) + # Here you create a fixture that will be used by your tests # Make sure the fixture returns TestClient(app) -@pytest.fixture(autouse=True) -def client(): - with TestClient(app) as client: - yield client +def get_client(config_fp): + filepath = os.path.dirname(os.path.abspath(__file__)) + config_fp = f"{filepath}/test_configs/{config_fp}" + initialize(config=config_fp) + app = FastAPI() + app.include_router(router) # Include your router in the test app + return TestClient(app) + def test_custom_auth(client): try: + client = get_client(config_fp="test_config_custom_auth.yaml") # Your test data test_data = { "model": "openai-model", diff --git a/litellm/tests/test_proxy_custom_logger.py b/litellm/tests/test_proxy_custom_logger.py index b2bfe39ed..c8064502e 100644 --- a/litellm/tests/test_proxy_custom_logger.py +++ b/litellm/tests/test_proxy_custom_logger.py @@ -20,23 +20,24 @@ import importlib, inspect from fastapi.testclient import TestClient from fastapi import FastAPI from litellm.proxy.proxy_server import router, save_worker_config, initialize # Replace with the actual module where your FastAPI router is defined - - filepath = os.path.dirname(os.path.abspath(__file__)) -config_fp = f"{filepath}/test_configs/test_custom_logger.yaml" python_file_path = f"{filepath}/test_configs/custom_callbacks.py" -save_worker_config(config=config_fp, model=None, alias=None, api_base=None, api_version=None, debug=False, temperature=None, max_tokens=None, request_timeout=600, max_budget=None, telemetry=False, drop_params=True, add_function_to_prompt=False, headers=None, save=False, use_queue=False) -app = FastAPI() -app.include_router(router) # Include your router in the test app -@app.on_event("startup") -async def wrapper_startup_event(): - initialize(config=config_fp) + +# @app.on_event("startup") +# async def wrapper_startup_event(): + # initialize(config=config_fp) # Use the app fixture in your client fixture -@pytest.fixture() -def client(): - with TestClient(app) as client: - yield client + +def get_client(config_fp): + filepath = os.path.dirname(os.path.abspath(__file__)) + config_fp = f"{filepath}/test_configs/{config_fp}" + initialize(config=config_fp) + app = FastAPI() + app.include_router(router) # Include your router in the test app + return TestClient(app) + + # Your bearer token token = os.getenv("PROXY_MASTER_KEY") @@ -48,8 +49,9 @@ headers = { print("Testing proxy custom logger") -def test_embedding(client): +def test_embedding(): try: + client = get_client(config_fp="test_custom_logger.yaml") litellm.set_verbose=False from litellm.proxy.utils import get_instance_fn my_custom_logger = get_instance_fn( @@ -94,9 +96,10 @@ def test_embedding(client): pytest.fail(f"LiteLLM Proxy test failed. Exception {str(e)}") -def test_chat_completion(client): +def test_chat_completion(): try: # Your test data + client = get_client(config_fp="test_custom_logger.yaml") print("initialized proxy") litellm.set_verbose=False from litellm.proxy.utils import get_instance_fn @@ -157,9 +160,10 @@ def test_chat_completion(client): pytest.fail(f"LiteLLM Proxy test failed. Exception {str(e)}") -def test_chat_completion_stream(client): +def test_chat_completion_stream(): try: # Your test data + client = get_client(config_fp="test_custom_logger.yaml") litellm.set_verbose=False from litellm.proxy.utils import get_instance_fn my_custom_logger = get_instance_fn( From b6798c703aa217371414a944ba2f190a4c3ee938 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 17:52:32 -0800 Subject: [PATCH 417/460] (fix) test proxy --- litellm/tests/test_proxy_custom_auth.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/tests/test_proxy_custom_auth.py b/litellm/tests/test_proxy_custom_auth.py index db2976581..6b872637c 100644 --- a/litellm/tests/test_proxy_custom_auth.py +++ b/litellm/tests/test_proxy_custom_auth.py @@ -32,7 +32,7 @@ def get_client(config_fp): return TestClient(app) -def test_custom_auth(client): +def test_custom_auth(): try: client = get_client(config_fp="test_config_custom_auth.yaml") # Your test data From 634d301caeeffa7b9ef3af73f9b9c5c54aa82fe0 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 17:57:58 -0800 Subject: [PATCH 418/460] (test) proxy --- litellm/tests/test_proxy_server.py | 37 ++++++++++++++---------------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/litellm/tests/test_proxy_server.py b/litellm/tests/test_proxy_server.py index e3094237b..3dc900d55 100644 --- a/litellm/tests/test_proxy_server.py +++ b/litellm/tests/test_proxy_server.py @@ -24,14 +24,6 @@ logging.basicConfig( from fastapi.testclient import TestClient from fastapi import FastAPI from litellm.proxy.proxy_server import router, save_worker_config, initialize # Replace with the actual module where your FastAPI router is defined -filepath = os.path.dirname(os.path.abspath(__file__)) -config_fp = f"{filepath}/test_configs/test_config_no_auth.yaml" -save_worker_config(config=config_fp, model=None, alias=None, api_base=None, api_version=None, debug=False, temperature=None, max_tokens=None, request_timeout=600, max_budget=None, telemetry=False, drop_params=True, add_function_to_prompt=False, headers=None, save=False, use_queue=False) -app = FastAPI() -app.include_router(router) # Include your router in the test app -@app.on_event("startup") -async def wrapper_startup_event(): - initialize(config=config_fp) # Your bearer token token = os.getenv("PROXY_MASTER_KEY") @@ -40,14 +32,16 @@ headers = { "Authorization": f"Bearer {token}" } -# Here you create a fixture that will be used by your tests -# Make sure the fixture returns TestClient(app) -@pytest.fixture(autouse=True) -def client(): - with TestClient(app) as client: - yield client +def get_client(config_fp): + filepath = os.path.dirname(os.path.abspath(__file__)) + config_fp = f"{filepath}/test_configs/{config_fp}" + initialize(config=config_fp) + app = FastAPI() + app.include_router(router) # Include your router in the test app + return TestClient(app) -def test_chat_completion(client): +def test_chat_completion(): + client = get_client(config_fp="test_config_no_auth.yaml") global headers try: # Your test data @@ -73,7 +67,8 @@ def test_chat_completion(client): # Run the test -def test_chat_completion_azure(client): +def test_chat_completion_azure(): + client = get_client(config_fp="test_config_no_auth.yaml") global headers try: # Your test data @@ -102,7 +97,8 @@ def test_chat_completion_azure(client): # test_chat_completion_azure() -def test_embedding(client): +def test_embedding(): + client = get_client(config_fp="test_config_no_auth.yaml") global headers try: test_data = { @@ -123,7 +119,8 @@ def test_embedding(client): # test_embedding() # @pytest.mark.skip(reason="hitting yaml load issues on circle-ci") -def test_add_new_model(client): +def test_add_new_model(): + client = get_client(config_fp="test_config_no_auth.yaml") global headers try: test_data = { @@ -164,10 +161,10 @@ class MyCustomHandler(CustomLogger): customHandler = MyCustomHandler() -def test_chat_completion_optional_params(client): +def test_chat_completion_optional_params(): # [PROXY: PROD TEST] - DO NOT DELETE # This tests if all the /chat/completion params are passed to litellm - + client = get_client(config_fp="test_config_no_auth.yaml") try: # Your test data litellm.set_verbose=True From 6cb4ef56590d5fb4d69989e5fa5a662f899e9d83 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Mon, 11 Dec 2023 18:10:46 -0800 Subject: [PATCH 419/460] test(test_caching.py): reset cache values at the end of test --- .gitignore | 2 ++ litellm/tests/test_caching.py | 22 +++++++++++++++++- litellm/tests/test_custom_logger.py | 36 +++++++++++++++++++---------- 3 files changed, 47 insertions(+), 13 deletions(-) diff --git a/.gitignore b/.gitignore index d0f88d972..294fcb2a0 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,5 @@ litellm/tests/aiologs.log litellm/tests/exception_data.txt litellm/tests/config_*.yaml litellm/tests/langfuse.log +litellm/tests/test_custom_logger.py +litellm/tests/langfuse.log diff --git a/litellm/tests/test_caching.py b/litellm/tests/test_caching.py index 16ff4a6dc..6fe30f25c 100644 --- a/litellm/tests/test_caching.py +++ b/litellm/tests/test_caching.py @@ -35,6 +35,8 @@ def test_caching_v2(): # test in memory cache print(f"response1: {response1}") print(f"response2: {response2}") litellm.cache = None # disable cache + litellm.success_callback = [] + litellm._async_success_callback = [] if response2['choices'][0]['message']['content'] != response1['choices'][0]['message']['content']: print(f"response1: {response1}") print(f"response2: {response2}") @@ -58,6 +60,8 @@ def test_caching_with_models_v2(): print(f"response2: {response2}") print(f"response3: {response3}") litellm.cache = None + litellm.success_callback = [] + litellm._async_success_callback = [] if response3['choices'][0]['message']['content'] == response2['choices'][0]['message']['content']: # if models are different, it should not return cached response print(f"response2: {response2}") @@ -91,6 +95,8 @@ def test_embedding_caching(): print(f"Embedding 2 response time: {end_time - start_time} seconds") litellm.cache = None + litellm.success_callback = [] + litellm._async_success_callback = [] assert end_time - start_time <= 0.1 # ensure 2nd response comes in in under 0.1 s if embedding2['data'][0]['embedding'] != embedding1['data'][0]['embedding']: print(f"embedding1: {embedding1}") @@ -145,6 +151,8 @@ def test_embedding_caching_azure(): print(f"Embedding 2 response time: {end_time - start_time} seconds") litellm.cache = None + litellm.success_callback = [] + litellm._async_success_callback = [] assert end_time - start_time <= 0.1 # ensure 2nd response comes in in under 0.1 s if embedding2['data'][0]['embedding'] != embedding1['data'][0]['embedding']: print(f"embedding1: {embedding1}") @@ -175,6 +183,8 @@ def test_redis_cache_completion(): print("\nresponse 3", response3) print("\nresponse 4", response4) litellm.cache = None + litellm.success_callback = [] + litellm._async_success_callback = [] """ 1 & 2 should be exactly the same @@ -226,6 +236,8 @@ def test_redis_cache_completion_stream(): assert response_1_content == response_2_content, f"Response 1 != Response 2. Same params, Response 1{response_1_content} != Response 2{response_2_content}" litellm.success_callback = [] litellm.cache = None + litellm.success_callback = [] + litellm._async_success_callback = [] except Exception as e: print(e) litellm.success_callback = [] @@ -271,10 +283,12 @@ def test_redis_cache_acompletion_stream(): print("\nresponse 2", response_2_content) assert response_1_content == response_2_content, f"Response 1 != Response 2. Same params, Response 1{response_1_content} != Response 2{response_2_content}" litellm.cache = None + litellm.success_callback = [] + litellm._async_success_callback = [] except Exception as e: print(e) raise e -test_redis_cache_acompletion_stream() +# test_redis_cache_acompletion_stream() def test_redis_cache_acompletion_stream_bedrock(): import asyncio @@ -310,6 +324,8 @@ def test_redis_cache_acompletion_stream_bedrock(): print("\nresponse 2", response_2_content) assert response_1_content == response_2_content, f"Response 1 != Response 2. Same params, Response 1{response_1_content} != Response 2{response_2_content}" litellm.cache = None + litellm.success_callback = [] + litellm._async_success_callback = [] except Exception as e: print(e) raise e @@ -350,6 +366,8 @@ def test_custom_redis_cache_with_key(): if response3['choices'][0]['message']['content'] == response2['choices'][0]['message']['content']: pytest.fail(f"Error occurred:") litellm.cache = None + litellm.success_callback = [] + litellm._async_success_callback = [] # test_custom_redis_cache_with_key() @@ -371,6 +389,8 @@ def test_custom_redis_cache_params(): print(litellm.cache.cache.redis_client) litellm.cache = None + litellm.success_callback = [] + litellm._async_success_callback = [] except Exception as e: pytest.fail(f"Error occurred:", e) diff --git a/litellm/tests/test_custom_logger.py b/litellm/tests/test_custom_logger.py index 7ae2df729..5a26cd244 100644 --- a/litellm/tests/test_custom_logger.py +++ b/litellm/tests/test_custom_logger.py @@ -8,8 +8,8 @@ import litellm from litellm.integrations.custom_logger import CustomLogger async_success = False -complete_streaming_response_in_callback = "" class MyCustomHandler(CustomLogger): + complete_streaming_response_in_callback = "" def __init__(self): self.success: bool = False # type: ignore self.failure: bool = False # type: ignore @@ -72,19 +72,20 @@ class MyCustomHandler(CustomLogger): self.async_completion_kwargs_fail = kwargs -async def async_test_logging_fn(kwargs, completion_obj, start_time, end_time): - global async_success, complete_streaming_response_in_callback - print(f"ON ASYNC LOGGING") - async_success = True - print("\nKWARGS", kwargs) - complete_streaming_response_in_callback = kwargs.get("complete_streaming_response") +class TmpFunction: + complete_streaming_response_in_callback = "" + async_success: bool = False + async def async_test_logging_fn(self, kwargs, completion_obj, start_time, end_time): + print(f"ON ASYNC LOGGING") + self.async_success = True + self.complete_streaming_response_in_callback = kwargs.get("complete_streaming_response") def test_async_chat_openai_stream(): try: - global complete_streaming_response_in_callback + tmp_function = TmpFunction() # litellm.set_verbose = True - litellm.success_callback = [async_test_logging_fn] + litellm.success_callback = [tmp_function.async_test_logging_fn] complete_streaming_response = "" async def call_gpt(): nonlocal complete_streaming_response @@ -98,12 +99,23 @@ def test_async_chat_openai_stream(): complete_streaming_response += chunk["choices"][0]["delta"]["content"] or "" print(complete_streaming_response) asyncio.run(call_gpt()) - assert complete_streaming_response_in_callback["choices"][0]["message"]["content"] == complete_streaming_response - assert async_success == True + complete_streaming_response = complete_streaming_response.strip("'") + print(f"complete_streaming_response_in_callback: {tmp_function.complete_streaming_response_in_callback['choices'][0]['message']['content']}") + print(f"type of complete_streaming_response_in_callback: {type(tmp_function.complete_streaming_response_in_callback['choices'][0]['message']['content'])}") + print(f"hidden char complete_streaming_response_in_callback: {repr(tmp_function.complete_streaming_response_in_callback['choices'][0]['message']['content'])}") + print(f"encoding complete_streaming_response_in_callback: {tmp_function.complete_streaming_response_in_callback['choices'][0]['message']['content'].encode('utf-8')}") + print(f"complete_streaming_response: {complete_streaming_response}") + print(f"type(complete_streaming_response): {type(complete_streaming_response)}") + print(f"hidden char complete_streaming_response): {repr(complete_streaming_response)}") + print(f"encoding complete_streaming_response): {repr(complete_streaming_response).encode('utf-8')}") + response1 = tmp_function.complete_streaming_response_in_callback["choices"][0]["message"]["content"] + response2 = complete_streaming_response + assert [ord(c) for c in response1] == [ord(c) for c in response2] + assert tmp_function.async_success == True except Exception as e: print(e) pytest.fail(f"An error occurred - {str(e)}") -test_async_chat_openai_stream() +# test_async_chat_openai_stream() def test_completion_azure_stream_moderation_failure(): try: From 3e908bf507c054b32503c18b78229d97b4cc38a8 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Mon, 11 Dec 2023 19:57:34 -0800 Subject: [PATCH 420/460] fix(router.py): reset caching correctly --- litellm/router.py | 3 + litellm/tests/langfuse.log | Bin 15582 -> 2414 bytes .../test_configs/test_config_no_auth.yaml | 24 +++ litellm/tests/test_custom_logger.py | 138 +++++++++--------- litellm/tests/test_router.py | 1 - litellm/utils.py | 44 +++--- 6 files changed, 119 insertions(+), 91 deletions(-) diff --git a/litellm/router.py b/litellm/router.py index c01c7d42e..e1522719e 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -1222,11 +1222,14 @@ class Router: raise ValueError("No models available.") def flush_cache(self): + litellm.cache = None self.cache.flush_cache() def reset(self): ## clean up on close litellm.success_callback = [] + litellm.__async_success_callback = [] litellm.failure_callback = [] + litellm._async_failure_callback = [] self.flush_cache() \ No newline at end of file diff --git a/litellm/tests/langfuse.log b/litellm/tests/langfuse.log index f1c2195dfd93b63220185ab7adb151326d7de43b..8596eab6bb52e615111a284f36293c347e6706ac 100644 GIT binary patch literal 2414 zcmc(h-%r~x5Xay9SDbihA{86Aw2TVSBm{dy+l2NS+~nF?P3+8eDE;r}A8iS+vT3E- zOO-nI-N$#A@7+B&3&5uwYb%t5B{v}P5jAMETDYg8Gi_|6aSRvte(zLBVdhwXyZ^EMS{>8a>_e9+tg-dA5FFQXweJ}i0b7^X&?Y3C=@V+%>sH=6}lx>p1D28B19n?yd zdo#FC5NS*R&6Sjx`;R&cwp+PiJ3{h&ilSy^h+5MVJ@H5MTINK`J*6Y~F%ZVCM*7=zutZ^kAhL ls2Vptgt6gay*o)CV1iR8z;3>=Sh;b^@i_zWuqPyG=NC=1KEVJ0 literal 15582 zcmeHO+m72f5}jv%1-D<61}s_f-QIYBOwyACo1}x-84M5v1|^kjbxWc`Ql0Ju`GR?x zFW6t)PnaTg@wL(FWU!OjRUSH$$SM|#RmCIfcrGcIVX`6#d?e2ni`R4Fu_OUchAbfu zoYN_ZLJ3h6n-N>Bu&2cm4v7!k@>o3W_j|4R-8yI*S~QVs&eG7U1lLlgV%q84H3B(# zeLi21PGNzzv*TFK3F+E4>5W^ZqNBr<(pOFgElwklu&3b_OQ7}0_mv+c6_;cP?vQo| z)bz$SnEik{=EU*(W)FOr*j?A|jwj?}DAy$A_{akx7$;f{dQW6Aa1si_vm{X-v#i#l zwp!}@;1kKnhYT`kRr(@^zDrg+c1{KZ*BQDavu6*f*`Ii}Nk@~O+4Jb255u7|9N4$m z`5KK=^JNhZhQ^89#9A8nOsqdQj;;!?aC!k}F_CL1CK*JTSSxGtIoDSR*WhI;e(&Mn zN+$P=OT9}L1g*y$sLlk*sR!h<5&FiI7360gAQ3iJrdzecz^{NW)$Enmj(cD;%dJ8G%=tK==7W=8a=oWhQa#wAgTB=f5WD=SxQe0`cm#w!7m+Hw*csy_owKJ%Si;<2cw@qB* z{9kze4x1iRZw;neVa_6a<{D|{MxoaxF}*hF3TD_p&V)2MV7P@om0+Bthgs6O5G?s8@z#_Jkh4q%=C}}h zqJ~#i&aMd`Ttx z*Ee6&!UG-L z6Zt7j0=AJ<;-AnKE0f+S!LkWF!4i+w=<1$V#3Q>1CaKjI)Wm2l9^b>h$~dp)?HJISRe6(tF~zEnJTPy0#5CkDvoPgiTTj)kB5$P zitig5lwm`gZ9>FZLr4%3+w=pyYWPcWJ)054343NU9ftcix>uuFH*N7fC;A?Il{9ES}#qWbc> zL!GGoarjWGQh4y)_&$7$TZK#Y4aXrTVKf|vhU0L^Zp0I4{G5wtehtUre%#20<1pEL zy=XWN4aY%oU^m}28jeFnplvt~vLVp^*9o)@$6=d5+i)Cm)_&_4i?$9^q2V|nOumaf zk&_)8j)Ue`Zm>YZarjF(4!6+lpPc>l_UW|xC6KysoasI}zdSu@?R7_fMe(D-=`KD0 zu6}z8%U?ZB>vO^zmQ_=Mkc<6)$+F6`>noF{$l*%5;z*T0HQm!*hmy4?a>&ry>rjnZ T61Mi*Z{u(6b*t3u(z*Ts 10 # exppect APIError("OpenAIException - Error code: 401 - {'error': {'message': 'Incorrect API key provided: test. You can find your API key at https://platform.openai.com/account/api-keys.', 'type': 'invalid_request_error', 'param': None, 'code': 'invalid_api_key'}}"), 'traceback_exception': 'Traceback (most recent call last):\n File "/Users/ishaanjaffer/Github/litellm/litellm/llms/openai.py", line 269, in acompletion\n response = await openai_aclient.chat.completions.create(**data)\n File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/openai/resources/chat/completions.py", line 119 - print("Passed setting async failure") - - async def test_2(): + assert customHandler_failure.async_failure == False + try: response = await litellm.acompletion( - model="gpt-3.5-turbo", - messages=[{ - "role": "user", - "content": "hello from litellm test", - }] - ) - print("\n response", response) - assert customHandler2.async_success == False - asyncio.run(test_2()) - assert customHandler2.async_success == True, "async success is not set to True even after success" - assert customHandler2.async_completion_kwargs.get("model") == "gpt-3.5-turbo" + model="gpt-3.5-turbo", + messages=messages, + api_key="my-bad-key", + ) + except: + pass + assert customHandler_failure.async_failure == True, "async failure is not set to True even after failure" + assert customHandler_failure.async_completion_kwargs_fail.get("model") == "gpt-3.5-turbo" + assert len(str(customHandler_failure.async_completion_kwargs_fail.get("exception"))) > 10 # expect APIError("OpenAIException - Error code: 401 - {'error': {'message': 'Incorrect API key provided: test. You can find your API key at https://platform.openai.com/account/api-keys.', 'type': 'invalid_request_error', 'param': None, 'code': 'invalid_api_key'}}"), 'traceback_exception': 'Traceback (most recent call last):\n File "/Users/ishaanjaffer/Github/litellm/litellm/llms/openai.py", line 269, in acompletion\n response = await openai_aclient.chat.completions.create(**data)\n File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/openai/resources/chat/completions.py", line 119 + litellm.callbacks = [] + print("Passed setting async failure") + except Exception as e: + pytest.fail(f"An exception occurred - {str(e)}") +# asyncio.run(test_async_custom_handler_completion()) - - async def test_3(): - response = await litellm.aembedding( +@pytest.mark.asyncio +async def test_async_custom_handler_embedding(): + try: + customHandler_embedding = MyCustomHandler() + litellm.callbacks = [customHandler_embedding] + # success + assert customHandler_embedding.async_success_embedding == False + response = await litellm.aembedding( model="text-embedding-ada-002", input = ["hello world"], ) - print("\n response", response) - assert customHandler2.async_success_embedding == False - asyncio.run(test_3()) - assert customHandler2.async_success_embedding == True, "async_success_embedding is not set to True even after success" - assert customHandler2.async_embedding_kwargs.get("model") == "text-embedding-ada-002" - assert customHandler2.async_embedding_response["usage"]["prompt_tokens"] ==2 + await asyncio.sleep(1) + assert customHandler_embedding.async_success_embedding == True, "async_success_embedding is not set to True even after success" + assert customHandler_embedding.async_embedding_kwargs.get("model") == "text-embedding-ada-002" + assert customHandler_embedding.async_embedding_response["usage"]["prompt_tokens"] ==2 print("Passed setting async success: Embedding") - - - print("Testing custom failure callback for embedding") - - async def test_4(): - try: - response = await litellm.aembedding( - model="text-embedding-ada-002", - input = ["hello world"], - api_key="test", - ) - except: - pass - - assert customHandler2.async_failure_embedding == False - asyncio.run(test_4()) - assert customHandler2.async_failure_embedding == True, "async failure embedding is not set to True even after failure" - assert customHandler2.async_embedding_kwargs_fail.get("model") == "text-embedding-ada-002" - assert len(str(customHandler2.async_embedding_kwargs_fail.get("exception"))) > 10 # exppect APIError("OpenAIException - Error code: 401 - {'error': {'message': 'Incorrect API key provided: test. You can find your API key at https://platform.openai.com/account/api-keys.', 'type': 'invalid_request_error', 'param': None, 'code': 'invalid_api_key'}}"), 'traceback_exception': 'Traceback (most recent call last):\n File "/Users/ishaanjaffer/Github/litellm/litellm/llms/openai.py", line 269, in acompletion\n response = await openai_aclient.chat.completions.create(**data)\n File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/openai/resources/chat/completions.py", line 119 - print("Passed setting async failure") - + # failure + assert customHandler_embedding.async_failure_embedding == False + try: + response = await litellm.aembedding( + model="text-embedding-ada-002", + input = ["hello world"], + api_key="my-bad-key", + ) + except: + pass + assert customHandler_embedding.async_failure_embedding == True, "async failure embedding is not set to True even after failure" + assert customHandler_embedding.async_embedding_kwargs_fail.get("model") == "text-embedding-ada-002" + assert len(str(customHandler_embedding.async_embedding_kwargs_fail.get("exception"))) > 10 # exppect APIError("OpenAIException - Error code: 401 - {'error': {'message': 'Incorrect API key provided: test. You can find your API key at https://platform.openai.com/account/api-keys.', 'type': 'invalid_request_error', 'param': None, 'code': 'invalid_api_key'}}"), 'traceback_exception': 'Traceback (most recent call last):\n File "/Users/ishaanjaffer/Github/litellm/litellm/llms/openai.py", line 269, in acompletion\n response = await openai_aclient.chat.completions.create(**data)\n File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/openai/resources/chat/completions.py", line 119 except Exception as e: - pytest.fail(f"Error occurred: {e}") -# test_async_custom_handler() - + pytest.fail(f"An exception occurred - {str(e)}") +asyncio.run(test_async_custom_handler_embedding()) from litellm import Cache def test_redis_cache_completion_stream(): # Important Test - This tests if we can add to streaming cache, when custom callbacks are set diff --git a/litellm/tests/test_router.py b/litellm/tests/test_router.py index 4ec91ec0d..57711082d 100644 --- a/litellm/tests/test_router.py +++ b/litellm/tests/test_router.py @@ -507,7 +507,6 @@ def test_aembedding_on_router(): model="text-embedding-ada-002", input=["good morning from litellm 2"], ) - print("sync embedding response: ", response) router.reset() except Exception as e: traceback.print_exc() diff --git a/litellm/utils.py b/litellm/utils.py index efc146413..2aff72812 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -964,7 +964,7 @@ class Logging: end_time=end_time, print_verbose=print_verbose, ) - if callback == "cache": + if callback == "cache" and litellm.cache is not None: # this only logs streaming once, complete_streaming_response exists i.e when stream ends print_verbose("success_callback: reaches cache for logging!") kwargs = self.model_call_details @@ -1052,7 +1052,7 @@ class Logging: start_time, end_time, result = self._success_handler_helper_fn(start_time=start_time, end_time=end_time, result=result) for callback in litellm._async_success_callback: try: - if callback == "cache": + if callback == "cache" and litellm.cache is not None: # set_cache once complete streaming response is built print_verbose("async success_callback: reaches cache for logging!") kwargs = self.model_call_details @@ -1238,7 +1238,7 @@ class Logging: print_verbose=print_verbose, callback_func=callback ) - except: + except Exception as e: print_verbose( f"LiteLLM.LoggingError: [Non-Blocking] Exception occurred while success logging {traceback.format_exc()}" ) @@ -1649,6 +1649,19 @@ def client(original_function): result._response_ms = (end_time - start_time).total_seconds() * 1000 # return response latency in ms like openai return result except Exception as e: + traceback_exception = traceback.format_exc() + crash_reporting(*args, **kwargs, exception=traceback_exception) + end_time = datetime.datetime.now() + if logging_obj: + try: + logging_obj.failure_handler(e, traceback_exception, start_time, end_time) # DO NOT MAKE THREADED - router retry fallback relies on this! + except Exception as e: + raise e + try: + await logging_obj.async_failure_handler(e, traceback_exception, start_time, end_time) + except Exception as e: + raise e + call_type = original_function.__name__ if call_type == CallTypes.acompletion.value: num_retries = ( @@ -1658,27 +1671,24 @@ def client(original_function): ) litellm.num_retries = None # set retries to None to prevent infinite loops context_window_fallback_dict = kwargs.get("context_window_fallback_dict", {}) - + if num_retries: - kwargs["num_retries"] = num_retries - kwargs["original_function"] = original_function - if (isinstance(e, openai.RateLimitError)): # rate limiting specific error - kwargs["retry_strategy"] = "exponential_backoff_retry" - elif (isinstance(e, openai.APIError)): # generic api error - kwargs["retry_strategy"] = "constant_retry" - return await litellm.acompletion_with_retries(*args, **kwargs) + try: + kwargs["num_retries"] = num_retries + kwargs["original_function"] = original_function + if (isinstance(e, openai.RateLimitError)): # rate limiting specific error + kwargs["retry_strategy"] = "exponential_backoff_retry" + elif (isinstance(e, openai.APIError)): # generic api error + kwargs["retry_strategy"] = "constant_retry" + return await litellm.acompletion_with_retries(*args, **kwargs) + except: + pass elif isinstance(e, litellm.exceptions.ContextWindowExceededError) and context_window_fallback_dict and model in context_window_fallback_dict: if len(args) > 0: args[0] = context_window_fallback_dict[model] else: kwargs["model"] = context_window_fallback_dict[model] return await original_function(*args, **kwargs) - traceback_exception = traceback.format_exc() - crash_reporting(*args, **kwargs, exception=traceback_exception) - end_time = datetime.datetime.now() - if logging_obj: - logging_obj.failure_handler(e, traceback_exception, start_time, end_time) # DO NOT MAKE THREADED - router retry fallback relies on this! - await logging_obj.async_failure_handler(e, traceback_exception, start_time, end_time) raise e is_coroutine = inspect.iscoroutinefunction(original_function) From c2f0a5c76a134ee45c68fd832af4c7bcad2121df Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 20:02:26 -0800 Subject: [PATCH 421/460] (test) proxy use fixtures --- litellm/tests/test_proxy_custom_logger.py | 15 +++++++------- litellm/tests/test_proxy_server_keys.py | 24 +++++++++++------------ 2 files changed, 19 insertions(+), 20 deletions(-) diff --git a/litellm/tests/test_proxy_custom_logger.py b/litellm/tests/test_proxy_custom_logger.py index c8064502e..6ddc9caac 100644 --- a/litellm/tests/test_proxy_custom_logger.py +++ b/litellm/tests/test_proxy_custom_logger.py @@ -29,9 +29,10 @@ python_file_path = f"{filepath}/test_configs/custom_callbacks.py" # Use the app fixture in your client fixture -def get_client(config_fp): +@pytest.fixture +def client(): filepath = os.path.dirname(os.path.abspath(__file__)) - config_fp = f"{filepath}/test_configs/{config_fp}" + config_fp = f"{filepath}/test_configs/test_custom_logger.yaml" initialize(config=config_fp) app = FastAPI() app.include_router(router) # Include your router in the test app @@ -49,9 +50,8 @@ headers = { print("Testing proxy custom logger") -def test_embedding(): +def test_embedding(client): try: - client = get_client(config_fp="test_custom_logger.yaml") litellm.set_verbose=False from litellm.proxy.utils import get_instance_fn my_custom_logger = get_instance_fn( @@ -96,10 +96,10 @@ def test_embedding(): pytest.fail(f"LiteLLM Proxy test failed. Exception {str(e)}") -def test_chat_completion(): +def test_chat_completion(client): try: # Your test data - client = get_client(config_fp="test_custom_logger.yaml") + print("initialized proxy") litellm.set_verbose=False from litellm.proxy.utils import get_instance_fn @@ -160,10 +160,9 @@ def test_chat_completion(): pytest.fail(f"LiteLLM Proxy test failed. Exception {str(e)}") -def test_chat_completion_stream(): +def test_chat_completion_stream(client): try: # Your test data - client = get_client(config_fp="test_custom_logger.yaml") litellm.set_verbose=False from litellm.proxy.utils import get_instance_fn my_custom_logger = get_instance_fn( diff --git a/litellm/tests/test_proxy_server_keys.py b/litellm/tests/test_proxy_server_keys.py index db083c30c..eb40c2256 100644 --- a/litellm/tests/test_proxy_server_keys.py +++ b/litellm/tests/test_proxy_server_keys.py @@ -23,22 +23,22 @@ from concurrent.futures import ThreadPoolExecutor # test /chat/completion request to the proxy from fastapi.testclient import TestClient from fastapi import FastAPI -from litellm.proxy.proxy_server import router, save_worker_config, startup_event # Replace with the actual module where your FastAPI router is defined -filepath = os.path.dirname(os.path.abspath(__file__)) -config_fp = f"{filepath}/test_configs/test_config.yaml" -save_worker_config(config=config_fp, model=None, alias=None, api_base=None, api_version=None, debug=False, temperature=None, max_tokens=None, request_timeout=600, max_budget=None, telemetry=False, drop_params=True, add_function_to_prompt=False, headers=None, save=False, use_queue=False) -app = FastAPI() -app.include_router(router) # Include your router in the test app -@app.on_event("startup") -async def wrapper_startup_event(): - await startup_event() +from litellm.proxy.proxy_server import router, save_worker_config, initialize, startup_event # Replace with the actual module where your FastAPI router is defined # Here you create a fixture that will be used by your tests # Make sure the fixture returns TestClient(app) -@pytest.fixture(autouse=True) + +@pytest.fixture(scope="module") def client(): - with TestClient(app) as client: - yield client + filepath = os.path.dirname(os.path.abspath(__file__)) + config_fp = f"{filepath}/test_configs/test_config.yaml" + save_worker_config(config=config_fp, model=None, alias=None, api_base=None, api_version=None, debug=False, temperature=None, max_tokens=None, request_timeout=600, max_budget=None, telemetry=False, drop_params=True, add_function_to_prompt=False, headers=None, save=False, use_queue=False) + initialize(config=config_fp) + app = FastAPI() + app.include_router(router) # Include your router in the test app + import asyncio + asyncio.run(startup_event()) + return TestClient(app) def test_add_new_key(client): try: From da0ec40a9ffa975d0b73e46566931765b022dddc Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 20:03:01 -0800 Subject: [PATCH 422/460] (test) proxy: use fixtures --- litellm/tests/test_proxy_server.py | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/litellm/tests/test_proxy_server.py b/litellm/tests/test_proxy_server.py index 3dc900d55..8350189d5 100644 --- a/litellm/tests/test_proxy_server.py +++ b/litellm/tests/test_proxy_server.py @@ -32,16 +32,17 @@ headers = { "Authorization": f"Bearer {token}" } -def get_client(config_fp): +@pytest.fixture +def client(config_fp): filepath = os.path.dirname(os.path.abspath(__file__)) - config_fp = f"{filepath}/test_configs/{config_fp}" + config_fp = f"{filepath}/test_configs/test_config_no_auth" + # initialize can get run in parallel, it sets specific variables for the fast api app, sinc eit gets run in parallel different tests use the wrong variables initialize(config=config_fp) app = FastAPI() app.include_router(router) # Include your router in the test app return TestClient(app) -def test_chat_completion(): - client = get_client(config_fp="test_config_no_auth.yaml") +def test_chat_completion(client): global headers try: # Your test data @@ -67,8 +68,8 @@ def test_chat_completion(): # Run the test -def test_chat_completion_azure(): - client = get_client(config_fp="test_config_no_auth.yaml") +def test_chat_completion_azure(client): + global headers try: # Your test data @@ -97,8 +98,7 @@ def test_chat_completion_azure(): # test_chat_completion_azure() -def test_embedding(): - client = get_client(config_fp="test_config_no_auth.yaml") +def test_embedding(client): global headers try: test_data = { @@ -119,8 +119,7 @@ def test_embedding(): # test_embedding() # @pytest.mark.skip(reason="hitting yaml load issues on circle-ci") -def test_add_new_model(): - client = get_client(config_fp="test_config_no_auth.yaml") +def test_add_new_model(client): global headers try: test_data = { @@ -161,10 +160,9 @@ class MyCustomHandler(CustomLogger): customHandler = MyCustomHandler() -def test_chat_completion_optional_params(): +def test_chat_completion_optional_params(client): # [PROXY: PROD TEST] - DO NOT DELETE # This tests if all the /chat/completion params are passed to litellm - client = get_client(config_fp="test_config_no_auth.yaml") try: # Your test data litellm.set_verbose=True From b3600e9e8a1bdfc41fd6438965d365e2ede4a636 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Mon, 11 Dec 2023 20:12:21 -0800 Subject: [PATCH 423/460] test(test_router_fallbacks.py): update to use async logging --- litellm/tests/langfuse.log | 4 +- .../test_configs/test_config_no_auth.yaml | 12 +++ litellm/tests/test_router_fallbacks.py | 79 ++++++++++--------- 3 files changed, 56 insertions(+), 39 deletions(-) diff --git a/litellm/tests/langfuse.log b/litellm/tests/langfuse.log index 8596eab6b..f89a54d6d 100644 --- a/litellm/tests/langfuse.log +++ b/litellm/tests/langfuse.log @@ -1,5 +1,5 @@ Task exception was never retrieved -future: exception=RuntimeError('Event loop is closed')> +future: exception=RuntimeError('Event loop is closed')> Traceback (most recent call last): File "/opt/homebrew/lib/python3.11/site-packages/prisma/engine/query.py", line 112, in aclose await self._close_session() @@ -29,3 +29,5 @@ Traceback (most recent call last): raise RuntimeError('Event loop is closed') RuntimeError: Event loop is closed Giving up get_data(...) after 3 tries (prisma.errors.ClientNotConnectedError: Client is not connected to the query engine, you must call `connect()` before attempting to query data.) +Giving up get_data(...) after 3 tries (prisma.errors.ClientNotConnectedError: Client is not connected to the query engine, you must call `connect()` before attempting to query data.) +Giving up get_data(...) after 3 tries (prisma.errors.ClientNotConnectedError: Client is not connected to the query engine, you must call `connect()` before attempting to query data.) diff --git a/litellm/tests/test_configs/test_config_no_auth.yaml b/litellm/tests/test_configs/test_config_no_auth.yaml index e8125010d..444b91565 100644 --- a/litellm/tests/test_configs/test_config_no_auth.yaml +++ b/litellm/tests/test_configs/test_config_no_auth.yaml @@ -43,3 +43,15 @@ model_list: description: this is a test openai model id: 79fc75bf-8e1b-47d5-8d24-9365a854af03 model_name: test_openai_models +- litellm_params: + model: gpt-3.5-turbo + model_info: + description: this is a test openai model + id: 78ec9388-427e-49c7-bdf2-355f00a6b246 + model_name: test_openai_models +- litellm_params: + model: gpt-3.5-turbo + model_info: + description: this is a test openai model + id: cb373690-360e-4aba-8fae-71de12f5278e + model_name: test_openai_models diff --git a/litellm/tests/test_router_fallbacks.py b/litellm/tests/test_router_fallbacks.py index 3779dc09a..235a901f7 100644 --- a/litellm/tests/test_router_fallbacks.py +++ b/litellm/tests/test_router_fallbacks.py @@ -31,6 +31,12 @@ class MyCustomHandler(CustomLogger): self.previous_models += len(kwargs["litellm_params"]["metadata"]["previous_models"]) # {"previous_models": [{"model": litellm_model_name, "exception_type": AuthenticationError, "exception_string": }]} print(f"self.previous_models: {self.previous_models}") print(f"On Success") + + async def async_log_success_event(self, kwargs, response_obj, start_time, end_time): + print(f"previous_models: {kwargs['litellm_params']['metadata']['previous_models']}") + self.previous_models += len(kwargs["litellm_params"]["metadata"]["previous_models"]) # {"previous_models": [{"model": litellm_model_name, "exception_type": AuthenticationError, "exception_string": }]} + print(f"self.previous_models: {self.previous_models}") + print(f"On Success") def log_failure_event(self, kwargs, response_obj, start_time, end_time): print(f"On Failure") @@ -111,30 +117,29 @@ def test_sync_fallbacks(): print(e) # test_sync_fallbacks() -def test_async_fallbacks(): +@pytest.mark.asyncio +async def test_async_fallbacks(): litellm.set_verbose = False router = Router(model_list=model_list, fallbacks=[{"azure/gpt-3.5-turbo": ["gpt-3.5-turbo"]}], context_window_fallbacks=[{"azure/gpt-3.5-turbo-context-fallback": ["gpt-3.5-turbo-16k"]}, {"gpt-3.5-turbo": ["gpt-3.5-turbo-16k"]}], set_verbose=False) - async def test_get_response(): - customHandler = MyCustomHandler() - litellm.callbacks = [customHandler] - user_message = "Hello, how are you?" - messages = [{"content": user_message, "role": "user"}] - try: - response = await router.acompletion(**kwargs) - print(f"customHandler.previous_models: {customHandler.previous_models}") - time.sleep(0.05) # allow a delay as success_callbacks are on a separate thread - assert customHandler.previous_models == 1 # 0 retries, 1 fallback - router.reset() - except litellm.Timeout as e: - pass - except Exception as e: - pytest.fail(f"An exception occurred: {e}") - finally: - router.reset() - asyncio.run(test_get_response()) + customHandler = MyCustomHandler() + litellm.callbacks = [customHandler] + user_message = "Hello, how are you?" + messages = [{"content": user_message, "role": "user"}] + try: + response = await router.acompletion(**kwargs) + print(f"customHandler.previous_models: {customHandler.previous_models}") + await asyncio.sleep(0.05) # allow a delay as success_callbacks are on a separate thread + assert customHandler.previous_models == 1 # 0 retries, 1 fallback + router.reset() + except litellm.Timeout as e: + pass + except Exception as e: + pytest.fail(f"An exception occurred: {e}") + finally: + router.reset() # test_async_fallbacks() @@ -184,26 +189,24 @@ def test_dynamic_fallbacks_sync(): # test_dynamic_fallbacks_sync() -def test_dynamic_fallbacks_async(): +@pytest.mark.asyncio +async def test_dynamic_fallbacks_async(): """ Allow setting the fallback in the router.completion() call. """ - async def test_get_response(): - try: - customHandler = MyCustomHandler() - litellm.callbacks = [customHandler] - router = Router(model_list=model_list, set_verbose=True) - kwargs = {} - kwargs["model"] = "azure/gpt-3.5-turbo" - kwargs["messages"] = [{"role": "user", "content": "Hey, how's it going?"}] - kwargs["fallbacks"] = [{"azure/gpt-3.5-turbo": ["gpt-3.5-turbo"]}] - response = await router.acompletion(**kwargs) - print(f"response: {response}") - time.sleep(0.05) # allow a delay as success_callbacks are on a separate thread - assert customHandler.previous_models == 1 # 0 retries, 1 fallback - router.reset() - except Exception as e: - pytest.fail(f"An exception occurred - {e}") - asyncio.run(test_get_response()) - + try: + customHandler = MyCustomHandler() + litellm.callbacks = [customHandler] + router = Router(model_list=model_list, set_verbose=True) + kwargs = {} + kwargs["model"] = "azure/gpt-3.5-turbo" + kwargs["messages"] = [{"role": "user", "content": "Hey, how's it going?"}] + kwargs["fallbacks"] = [{"azure/gpt-3.5-turbo": ["gpt-3.5-turbo"]}] + response = await router.acompletion(**kwargs) + print(f"response: {response}") + await asyncio.sleep(0.05) # allow a delay as success_callbacks are on a separate thread + assert customHandler.previous_models == 1 # 0 retries, 1 fallback + router.reset() + except Exception as e: + pytest.fail(f"An exception occurred - {e}") # test_dynamic_fallbacks_async() \ No newline at end of file From 3e7604420e09572c9680357eab370762dcb1d191 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Mon, 11 Dec 2023 21:14:12 -0800 Subject: [PATCH 424/460] fix(proxy/utils.py): fix db writes on retry --- litellm/proxy/proxy_server.py | 2 ++ litellm/proxy/utils.py | 23 ++++++++--------- litellm/tests/langfuse.log | 33 ------------------------- litellm/tests/test_proxy_server_keys.py | 7 +++--- 4 files changed, 18 insertions(+), 47 deletions(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 2368994cb..31951155f 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -270,7 +270,9 @@ async def user_api_key_auth(request: Request, api_key: str = fastapi.Security(ap print(f"valid_token from cache: {valid_token}") if valid_token is None: ## check db + print(f"api key: {api_key}") valid_token = await prisma_client.get_data(token=api_key, expires=datetime.utcnow()) + print(f"valid token from prisma: {valid_token}") user_api_key_cache.set_cache(key=api_key, value=valid_token, ttl=60) elif valid_token is not None: print(f"API Key Cache Hit!") diff --git a/litellm/proxy/utils.py b/litellm/proxy/utils.py index 00797691a..96ba25c8a 100644 --- a/litellm/proxy/utils.py +++ b/litellm/proxy/utils.py @@ -1,5 +1,5 @@ from typing import Optional, List, Any, Literal -import os, subprocess, hashlib, importlib, asyncio +import os, subprocess, hashlib, importlib, asyncio, copy import litellm, backoff from litellm.proxy._types import UserAPIKeyAuth from litellm.caching import DualCache @@ -67,7 +67,6 @@ class ProxyLogging: try: self.call_details["data"] = data self.call_details["call_type"] = call_type - ## check if max parallel requests set if user_api_key_dict.max_parallel_requests is not None: ## if set, check if request allowed @@ -165,19 +164,20 @@ class PrismaClient: async def get_data(self, token: str, expires: Optional[Any]=None): try: # check if plain text or hash + hashed_token = token if token.startswith("sk-"): - token = self.hash_token(token=token) + hashed_token = self.hash_token(token=token) if expires: response = await self.db.litellm_verificationtoken.find_first( where={ - "token": token, + "token": hashed_token, "expires": {"gte": expires} # Check if the token is not expired } ) else: response = await self.db.litellm_verificationtoken.find_unique( where={ - "token": token + "token": hashed_token } ) return response @@ -200,18 +200,18 @@ class PrismaClient: try: token = data["token"] hashed_token = self.hash_token(token=token) - data["token"] = hashed_token + db_data = copy.deepcopy(data) + db_data["token"] = hashed_token new_verification_token = await self.db.litellm_verificationtoken.upsert( # type: ignore where={ 'token': hashed_token, }, data={ - "create": {**data}, #type: ignore + "create": {**db_data}, #type: ignore "update": {} # don't do anything if it already exists } ) - return new_verification_token except Exception as e: asyncio.create_task(self.proxy_logging_obj.failure_handler(original_exception=e)) @@ -235,15 +235,16 @@ class PrismaClient: if token.startswith("sk-"): token = self.hash_token(token=token) - data["token"] = token + db_data = copy.deepcopy(data) + db_data["token"] = token response = await self.db.litellm_verificationtoken.update( where={ "token": token }, - data={**data} # type: ignore + data={**db_data} # type: ignore ) print_verbose("\033[91m" + f"DB write succeeded {response}" + "\033[0m") - return {"token": token, "data": data} + return {"token": token, "data": db_data} except Exception as e: asyncio.create_task(self.proxy_logging_obj.failure_handler(original_exception=e)) print_verbose("\033[91m" + f"DB write failed: {e}" + "\033[0m") diff --git a/litellm/tests/langfuse.log b/litellm/tests/langfuse.log index f89a54d6d..e69de29bb 100644 --- a/litellm/tests/langfuse.log +++ b/litellm/tests/langfuse.log @@ -1,33 +0,0 @@ -Task exception was never retrieved -future: exception=RuntimeError('Event loop is closed')> -Traceback (most recent call last): - File "/opt/homebrew/lib/python3.11/site-packages/prisma/engine/query.py", line 112, in aclose - await self._close_session() - File "/opt/homebrew/lib/python3.11/site-packages/prisma/engine/query.py", line 116, in _close_session - await self.session.close() - File "/opt/homebrew/lib/python3.11/site-packages/prisma/_async_http.py", line 35, in close - await self.session.aclose() - File "/opt/homebrew/lib/python3.11/site-packages/httpx/_client.py", line 1974, in aclose - await self._transport.aclose() - File "/opt/homebrew/lib/python3.11/site-packages/httpx/_transports/default.py", line 365, in aclose - await self._pool.aclose() - File "/opt/homebrew/lib/python3.11/site-packages/httpcore/_async/connection_pool.py", line 314, in aclose - await connection.aclose() - File "/opt/homebrew/lib/python3.11/site-packages/httpcore/_async/connection.py", line 166, in aclose - await self._connection.aclose() - File "/opt/homebrew/lib/python3.11/site-packages/httpcore/_async/http11.py", line 241, in aclose - await self._network_stream.aclose() - File "/opt/homebrew/lib/python3.11/site-packages/httpcore/_backends/anyio.py", line 54, in aclose - await self._stream.aclose() - File "/opt/homebrew/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 1261, in aclose - self._transport.close() - File "/opt/homebrew/Cellar/python@3.11/3.11.6_1/Frameworks/Python.framework/Versions/3.11/lib/python3.11/asyncio/selector_events.py", line 860, in close - self._loop.call_soon(self._call_connection_lost, None) - File "/opt/homebrew/Cellar/python@3.11/3.11.6_1/Frameworks/Python.framework/Versions/3.11/lib/python3.11/asyncio/base_events.py", line 761, in call_soon - self._check_closed() - File "/opt/homebrew/Cellar/python@3.11/3.11.6_1/Frameworks/Python.framework/Versions/3.11/lib/python3.11/asyncio/base_events.py", line 519, in _check_closed - raise RuntimeError('Event loop is closed') -RuntimeError: Event loop is closed -Giving up get_data(...) after 3 tries (prisma.errors.ClientNotConnectedError: Client is not connected to the query engine, you must call `connect()` before attempting to query data.) -Giving up get_data(...) after 3 tries (prisma.errors.ClientNotConnectedError: Client is not connected to the query engine, you must call `connect()` before attempting to query data.) -Giving up get_data(...) after 3 tries (prisma.errors.ClientNotConnectedError: Client is not connected to the query engine, you must call `connect()` before attempting to query data.) diff --git a/litellm/tests/test_proxy_server_keys.py b/litellm/tests/test_proxy_server_keys.py index eb40c2256..f6a0599e6 100644 --- a/litellm/tests/test_proxy_server_keys.py +++ b/litellm/tests/test_proxy_server_keys.py @@ -1,4 +1,4 @@ -import sys, os, time +import sys, os, time, asyncio import traceback from dotenv import load_dotenv @@ -71,8 +71,8 @@ def test_add_new_key(client): # # Run the test - only runs via pytest - -def test_add_new_key_max_parallel_limit(client): +@pytest.mark.asyncio +async def test_add_new_key_max_parallel_limit(client): try: # Your test data test_data = {"duration": "20m", "max_parallel_requests": 1} @@ -88,6 +88,7 @@ def test_add_new_key_max_parallel_limit(client): result = response.json() def _post_data(): json_data = {'model': 'azure-model', "messages": [{"role": "user", "content": f"this is a test request, write a short poem {time.time()}"}]} + print(f"bearer token key: {result['key']}") response = client.post("/chat/completions", json=json_data, headers={"Authorization": f"Bearer {result['key']}"}) return response def _run_in_parallel(): From f07da60593561d6719fff3860f8936813aaa7235 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 21:30:02 -0800 Subject: [PATCH 425/460] (test) proxy - pytest correct usage --- litellm/tests/test_proxy_custom_auth.py | 9 +++---- litellm/tests/test_proxy_server.py | 32 ++++++++++++------------- 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/litellm/tests/test_proxy_custom_auth.py b/litellm/tests/test_proxy_custom_auth.py index 6b872637c..62bfef3c1 100644 --- a/litellm/tests/test_proxy_custom_auth.py +++ b/litellm/tests/test_proxy_custom_auth.py @@ -23,18 +23,19 @@ from litellm.proxy.proxy_server import router, save_worker_config, initialize # # Here you create a fixture that will be used by your tests # Make sure the fixture returns TestClient(app) -def get_client(config_fp): +@pytest.fixture(scope="function") +def client(): filepath = os.path.dirname(os.path.abspath(__file__)) - config_fp = f"{filepath}/test_configs/{config_fp}" + config_fp = f"{filepath}/test_configs/test_config_custom_auth.yaml" + # initialize can get run in parallel, it sets specific variables for the fast api app, sinc eit gets run in parallel different tests use the wrong variables initialize(config=config_fp) app = FastAPI() app.include_router(router) # Include your router in the test app return TestClient(app) -def test_custom_auth(): +def test_custom_auth(client): try: - client = get_client(config_fp="test_config_custom_auth.yaml") # Your test data test_data = { "model": "openai-model", diff --git a/litellm/tests/test_proxy_server.py b/litellm/tests/test_proxy_server.py index 8350189d5..4312f43d6 100644 --- a/litellm/tests/test_proxy_server.py +++ b/litellm/tests/test_proxy_server.py @@ -26,23 +26,23 @@ from fastapi import FastAPI from litellm.proxy.proxy_server import router, save_worker_config, initialize # Replace with the actual module where your FastAPI router is defined # Your bearer token -token = os.getenv("PROXY_MASTER_KEY") +token = "" headers = { "Authorization": f"Bearer {token}" } -@pytest.fixture -def client(config_fp): +@pytest.fixture(scope="function") +def client_no_auth(): filepath = os.path.dirname(os.path.abspath(__file__)) - config_fp = f"{filepath}/test_configs/test_config_no_auth" + config_fp = f"{filepath}/test_configs/test_config_no_auth.yaml" # initialize can get run in parallel, it sets specific variables for the fast api app, sinc eit gets run in parallel different tests use the wrong variables initialize(config=config_fp) app = FastAPI() app.include_router(router) # Include your router in the test app return TestClient(app) -def test_chat_completion(client): +def test_chat_completion(client_no_auth): global headers try: # Your test data @@ -58,7 +58,7 @@ def test_chat_completion(client): } print("testing proxy server") - response = client.post("/v1/chat/completions", json=test_data, headers=headers) + response = client_no_auth.post("/v1/chat/completions", json=test_data) print(f"response - {response.text}") assert response.status_code == 200 result = response.json() @@ -68,7 +68,7 @@ def test_chat_completion(client): # Run the test -def test_chat_completion_azure(client): +def test_chat_completion_azure(client_no_auth): global headers try: @@ -85,7 +85,7 @@ def test_chat_completion_azure(client): } print("testing proxy server with Azure Request") - response = client.post("/v1/chat/completions", json=test_data, headers=headers) + response = client_no_auth.post("/v1/chat/completions", json=test_data) assert response.status_code == 200 result = response.json() @@ -98,15 +98,15 @@ def test_chat_completion_azure(client): # test_chat_completion_azure() -def test_embedding(client): +def test_embedding(client_no_auth): global headers try: test_data = { "model": "azure/azure-embedding-model", "input": ["good morning from litellm"], } - print("testing proxy server with OpenAI embedding") - response = client.post("/v1/embeddings", json=test_data, headers=headers) + print("testing proxy server with Azure embedding") + response = client_no_auth.post("/v1/embeddings", json=test_data) assert response.status_code == 200 result = response.json() @@ -119,7 +119,7 @@ def test_embedding(client): # test_embedding() # @pytest.mark.skip(reason="hitting yaml load issues on circle-ci") -def test_add_new_model(client): +def test_add_new_model(client_no_auth): global headers try: test_data = { @@ -131,8 +131,8 @@ def test_add_new_model(client): "description": "this is a test openai model" } } - client.post("/model/new", json=test_data, headers=headers) - response = client.get("/model/info", headers=headers) + client_no_auth.post("/model/new", json=test_data, headers=headers) + response = client_no_auth.get("/model/info", headers=headers) assert response.status_code == 200 result = response.json() print(f"response: {result}") @@ -160,7 +160,7 @@ class MyCustomHandler(CustomLogger): customHandler = MyCustomHandler() -def test_chat_completion_optional_params(client): +def test_chat_completion_optional_params(client_no_auth): # [PROXY: PROD TEST] - DO NOT DELETE # This tests if all the /chat/completion params are passed to litellm try: @@ -180,7 +180,7 @@ def test_chat_completion_optional_params(client): litellm.callbacks = [customHandler] print("testing proxy server: optional params") - response = client.post("/v1/chat/completions", json=test_data, headers=headers) + response = client_no_auth.post("/v1/chat/completions", json=test_data) assert response.status_code == 200 result = response.json() print(f"Received response: {result}") From c2b928a286cf1baa50597426b29d7965f70cc328 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 21:30:49 -0800 Subject: [PATCH 426/460] (test) proxy --- .../tests/test_configs/test_config_no_auth.yaml | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/litellm/tests/test_configs/test_config_no_auth.yaml b/litellm/tests/test_configs/test_config_no_auth.yaml index 444b91565..7cd7d4301 100644 --- a/litellm/tests/test_configs/test_config_no_auth.yaml +++ b/litellm/tests/test_configs/test_config_no_auth.yaml @@ -44,14 +44,8 @@ model_list: id: 79fc75bf-8e1b-47d5-8d24-9365a854af03 model_name: test_openai_models - litellm_params: - model: gpt-3.5-turbo - model_info: - description: this is a test openai model - id: 78ec9388-427e-49c7-bdf2-355f00a6b246 - model_name: test_openai_models -- litellm_params: - model: gpt-3.5-turbo - model_info: - description: this is a test openai model - id: cb373690-360e-4aba-8fae-71de12f5278e - model_name: test_openai_models + api_base: os.environ/AZURE_API_BASE + api_key: os.environ/AZURE_API_KEY + api_version: 2023-07-01-preview + model: azure/azure-embedding-model + model_name: azure-embedding-model From d3bbf5bdff39e3a17eec5d477cfff4cfd71d895f Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Mon, 11 Dec 2023 21:32:53 -0800 Subject: [PATCH 427/460] test(test_proxy_server_keys.py): use global client --- litellm/tests/langfuse.log | 3 +++ litellm/tests/test_proxy_server_keys.py | 31 ++++++++++++------------- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/litellm/tests/langfuse.log b/litellm/tests/langfuse.log index e69de29bb..c78eb0911 100644 --- a/litellm/tests/langfuse.log +++ b/litellm/tests/langfuse.log @@ -0,0 +1,3 @@ +Giving up get_data(...) after 3 tries (prisma.errors.ClientNotConnectedError: Client is not connected to the query engine, you must call `connect()` before attempting to query data.) +Giving up get_data(...) after 3 tries (prisma.errors.ClientNotConnectedError: Client is not connected to the query engine, you must call `connect()` before attempting to query data.) +Giving up get_data(...) after 3 tries (prisma.errors.ClientNotConnectedError: Client is not connected to the query engine, you must call `connect()` before attempting to query data.) diff --git a/litellm/tests/test_proxy_server_keys.py b/litellm/tests/test_proxy_server_keys.py index f6a0599e6..db083c30c 100644 --- a/litellm/tests/test_proxy_server_keys.py +++ b/litellm/tests/test_proxy_server_keys.py @@ -1,4 +1,4 @@ -import sys, os, time, asyncio +import sys, os, time import traceback from dotenv import load_dotenv @@ -23,22 +23,22 @@ from concurrent.futures import ThreadPoolExecutor # test /chat/completion request to the proxy from fastapi.testclient import TestClient from fastapi import FastAPI -from litellm.proxy.proxy_server import router, save_worker_config, initialize, startup_event # Replace with the actual module where your FastAPI router is defined +from litellm.proxy.proxy_server import router, save_worker_config, startup_event # Replace with the actual module where your FastAPI router is defined +filepath = os.path.dirname(os.path.abspath(__file__)) +config_fp = f"{filepath}/test_configs/test_config.yaml" +save_worker_config(config=config_fp, model=None, alias=None, api_base=None, api_version=None, debug=False, temperature=None, max_tokens=None, request_timeout=600, max_budget=None, telemetry=False, drop_params=True, add_function_to_prompt=False, headers=None, save=False, use_queue=False) +app = FastAPI() +app.include_router(router) # Include your router in the test app +@app.on_event("startup") +async def wrapper_startup_event(): + await startup_event() # Here you create a fixture that will be used by your tests # Make sure the fixture returns TestClient(app) - -@pytest.fixture(scope="module") +@pytest.fixture(autouse=True) def client(): - filepath = os.path.dirname(os.path.abspath(__file__)) - config_fp = f"{filepath}/test_configs/test_config.yaml" - save_worker_config(config=config_fp, model=None, alias=None, api_base=None, api_version=None, debug=False, temperature=None, max_tokens=None, request_timeout=600, max_budget=None, telemetry=False, drop_params=True, add_function_to_prompt=False, headers=None, save=False, use_queue=False) - initialize(config=config_fp) - app = FastAPI() - app.include_router(router) # Include your router in the test app - import asyncio - asyncio.run(startup_event()) - return TestClient(app) + with TestClient(app) as client: + yield client def test_add_new_key(client): try: @@ -71,8 +71,8 @@ def test_add_new_key(client): # # Run the test - only runs via pytest -@pytest.mark.asyncio -async def test_add_new_key_max_parallel_limit(client): + +def test_add_new_key_max_parallel_limit(client): try: # Your test data test_data = {"duration": "20m", "max_parallel_requests": 1} @@ -88,7 +88,6 @@ async def test_add_new_key_max_parallel_limit(client): result = response.json() def _post_data(): json_data = {'model': 'azure-model', "messages": [{"role": "user", "content": f"this is a test request, write a short poem {time.time()}"}]} - print(f"bearer token key: {result['key']}") response = client.post("/chat/completions", json=json_data, headers={"Authorization": f"Bearer {result['key']}"}) return response def _run_in_parallel(): From 5e7b9658e3913a738949ba7ae74ea4ffadaa7de5 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 22:11:11 -0800 Subject: [PATCH 428/460] (fix) test proxy --- litellm/tests/test_proxy_custom_auth.py | 5 ++++- litellm/tests/test_proxy_server.py | 17 ++++++++++++++--- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/litellm/tests/test_proxy_custom_auth.py b/litellm/tests/test_proxy_custom_auth.py index 62bfef3c1..c96acb816 100644 --- a/litellm/tests/test_proxy_custom_auth.py +++ b/litellm/tests/test_proxy_custom_auth.py @@ -25,11 +25,14 @@ from litellm.proxy.proxy_server import router, save_worker_config, initialize # # Make sure the fixture returns TestClient(app) @pytest.fixture(scope="function") def client(): + from litellm.proxy.proxy_server import cleanup_router_config_variables + cleanup_router_config_variables() filepath = os.path.dirname(os.path.abspath(__file__)) config_fp = f"{filepath}/test_configs/test_config_custom_auth.yaml" # initialize can get run in parallel, it sets specific variables for the fast api app, sinc eit gets run in parallel different tests use the wrong variables - initialize(config=config_fp) app = FastAPI() + initialize(config=config_fp) + app.include_router(router) # Include your router in the test app return TestClient(app) diff --git a/litellm/tests/test_proxy_server.py b/litellm/tests/test_proxy_server.py index 4312f43d6..1e53c4d6e 100644 --- a/litellm/tests/test_proxy_server.py +++ b/litellm/tests/test_proxy_server.py @@ -34,12 +34,16 @@ headers = { @pytest.fixture(scope="function") def client_no_auth(): + # Assuming litellm.proxy.proxy_server is an object + from litellm.proxy.proxy_server import cleanup_router_config_variables + cleanup_router_config_variables() filepath = os.path.dirname(os.path.abspath(__file__)) config_fp = f"{filepath}/test_configs/test_config_no_auth.yaml" # initialize can get run in parallel, it sets specific variables for the fast api app, sinc eit gets run in parallel different tests use the wrong variables initialize(config=config_fp) app = FastAPI() app.include_router(router) # Include your router in the test app + return TestClient(app) def test_chat_completion(client_no_auth): @@ -57,7 +61,7 @@ def test_chat_completion(client_no_auth): "max_tokens": 10, } - print("testing proxy server") + print("testing proxy server with chat completions") response = client_no_auth.post("/v1/chat/completions", json=test_data) print(f"response - {response.text}") assert response.status_code == 200 @@ -84,7 +88,7 @@ def test_chat_completion_azure(client_no_auth): "max_tokens": 10, } - print("testing proxy server with Azure Request") + print("testing proxy server with Azure Request /chat/completions") response = client_no_auth.post("/v1/chat/completions", json=test_data) assert response.status_code == 200 @@ -100,12 +104,19 @@ def test_chat_completion_azure(client_no_auth): def test_embedding(client_no_auth): global headers + from litellm.proxy.proxy_server import user_custom_auth + try: test_data = { "model": "azure/azure-embedding-model", "input": ["good morning from litellm"], } - print("testing proxy server with Azure embedding") + # print("testing proxy server with Azure embedding") + # print(user_custom_auth) + # print(id(user_custom_auth)) + # user_custom_auth = None + # print("valu of user_custom_auth", user_custom_auth) + # litellm.proxy.proxy_server.user_custom_auth = None response = client_no_auth.post("/v1/embeddings", json=test_data) assert response.status_code == 200 From f8c7528bff09c8a28a0ff1e1b43e4c31cba048dd Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 22:11:55 -0800 Subject: [PATCH 429/460] (fix) proxy : cleanup router --- litellm/proxy/proxy_server.py | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 31951155f..a6da29cf3 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -874,16 +874,6 @@ async def startup_event(): # add master key to db await generate_key_helper_fn(duration=None, models=[], aliases={}, config={}, spend=0, token=master_key) -@router.on_event("shutdown") -async def shutdown_event(): - global prisma_client, master_key, user_custom_auth - if prisma_client: - print("Disconnecting from Prisma") - await prisma_client.disconnect() - - ## RESET CUSTOM VARIABLES ## - master_key = None - user_custom_auth = None #### API ENDPOINTS #### @router.get("/v1/models", dependencies=[Depends(user_api_key_auth)]) @@ -1467,4 +1457,27 @@ async def get_routes(): return {"routes": routes} +@router.on_event("shutdown") +async def shutdown_event(): + global prisma_client, master_key, user_custom_auth + if prisma_client: + print("Disconnecting from Prisma") + await prisma_client.disconnect() + + ## RESET CUSTOM VARIABLES ## + cleanup_router_config_variables() + +def cleanup_router_config_variables(): + global master_key, user_config_file_path, otel_logging, user_custom_auth, user_custom_auth_path, use_background_health_checks, health_check_interval + + # Set all variables to None + master_key = None + user_config_file_path = None + otel_logging = None + user_custom_auth = None + user_custom_auth_path = None + use_background_health_checks = None + health_check_interval = None + + app.include_router(router) From f69653c126d75989a2e42ec114fd5f69abfea9b1 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 22:22:52 -0800 Subject: [PATCH 430/460] (ci/cd) azure test --- litellm/tests/test_completion.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index 473e08599..967f69603 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -611,7 +611,7 @@ def test_completion_azure_key_completion_arg(): os.environ.pop("AZURE_API_KEY", None) try: print("azure gpt-3.5 test\n\n") - litellm.set_verbose=False + litellm.set_verbose=True ## Test azure call response = completion( model="azure/chatgpt-v-2", From d563e53948423d459b64a55096f933a20e7c78dd Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 22:23:11 -0800 Subject: [PATCH 431/460] (ci/cd) reset azure api key --- litellm/tests/test_exceptions.py | 1 + 1 file changed, 1 insertion(+) diff --git a/litellm/tests/test_exceptions.py b/litellm/tests/test_exceptions.py index 67298f019..892a1f7ca 100644 --- a/litellm/tests/test_exceptions.py +++ b/litellm/tests/test_exceptions.py @@ -189,6 +189,7 @@ def test_completion_azure_exception(): } ], ) + os.environ["AZURE_API_KEY"] = old_azure_key print(f"response: {response}") print(response) except openai.AuthenticationError as e: From ab90a66a8e91784bcd956fb30b1cfe79109ba747 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 22:41:14 -0800 Subject: [PATCH 432/460] (test) cleanup proxy --- litellm/tests/test_proxy_server_keys.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/litellm/tests/test_proxy_server_keys.py b/litellm/tests/test_proxy_server_keys.py index db083c30c..ace3c5527 100644 --- a/litellm/tests/test_proxy_server_keys.py +++ b/litellm/tests/test_proxy_server_keys.py @@ -37,6 +37,8 @@ async def wrapper_startup_event(): # Make sure the fixture returns TestClient(app) @pytest.fixture(autouse=True) def client(): + from litellm.proxy.proxy_server import cleanup_router_config_variables + cleanup_router_config_variables() with TestClient(app) as client: yield client From e49af2272d19f332108583cb2458372ea90a8269 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 22:46:49 -0800 Subject: [PATCH 433/460] (test) custom logger + cache --- litellm/tests/test_custom_logger.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/litellm/tests/test_custom_logger.py b/litellm/tests/test_custom_logger.py index d24cf5757..1d373e0da 100644 --- a/litellm/tests/test_custom_logger.py +++ b/litellm/tests/test_custom_logger.py @@ -317,12 +317,11 @@ def test_redis_cache_completion_stream(): response_2_content += chunk.choices[0].delta.content or "" print("\nresponse 1", response_1_content) print("\nresponse 2", response_2_content) - assert response_1_content == response_2_content, f"Response 1 != Response 2. Same params, Response 1{response_1_content} != Response 2{response_2_content}" + assert response1.id == response2.id, f"Response 1 != Response 2. Same params, Response 1{response1.id} != Response 2{response2.id}" litellm.success_callback = [] litellm._async_success_callback = [] litellm.cache = None except Exception as e: print(e) litellm.success_callback = [] - raise e - pytest.fail(f"Error occurred: {e}") \ No newline at end of file + raise e \ No newline at end of file From e5bc7b338a1de7d36e967673acb45fb22eb250da Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 22:57:39 -0800 Subject: [PATCH 434/460] (test) stream - cache --- litellm/tests/test_custom_logger.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/litellm/tests/test_custom_logger.py b/litellm/tests/test_custom_logger.py index 1d373e0da..03d6410d2 100644 --- a/litellm/tests/test_custom_logger.py +++ b/litellm/tests/test_custom_logger.py @@ -110,7 +110,7 @@ def test_async_chat_openai_stream(): except Exception as e: print(e) pytest.fail(f"An error occurred - {str(e)}") -# test_async_chat_openai_stream() +test_async_chat_openai_stream() def test_completion_azure_stream_moderation_failure(): try: @@ -317,11 +317,12 @@ def test_redis_cache_completion_stream(): response_2_content += chunk.choices[0].delta.content or "" print("\nresponse 1", response_1_content) print("\nresponse 2", response_2_content) - assert response1.id == response2.id, f"Response 1 != Response 2. Same params, Response 1{response1.id} != Response 2{response2.id}" + assert response_1_content == response_2_content, f"Response 1 != Response 2. Same params, Response 1{response_1_content} != Response 2{response_2_content}" litellm.success_callback = [] litellm._async_success_callback = [] litellm.cache = None except Exception as e: print(e) litellm.success_callback = [] - raise e \ No newline at end of file + raise e +test_redis_cache_completion_stream() \ No newline at end of file From eb8514ddf68aa3d7f2b9fb461ab8c7c4b3870968 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 23:17:23 -0800 Subject: [PATCH 435/460] (test) run ci/cd again --- litellm/tests/test_completion.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index 967f69603..1f58668b1 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -1067,7 +1067,7 @@ def test_completion_chat_sagemaker(): temperature=0.7, stream=True, ) - # Add any assertions here to check the response + # Add any assertions here to check the response complete_response = "" for chunk in response: complete_response += chunk.choices[0].delta.content or "" From 2c1c75fdf0fcc1de3d7ba6a90ae97b219fba13b3 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Mon, 11 Dec 2023 23:18:25 -0800 Subject: [PATCH 436/460] fix(ollama.py): enable parallel ollama completion calls --- .vscode/settings.json | 4 +++ litellm/llms/ollama.py | 66 +++++++++++++++++++++++++++++++++++++++--- litellm/main.py | 8 +++-- 3 files changed, 72 insertions(+), 6 deletions(-) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 000000000..242c7c86f --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,4 @@ +{ + "python.analysis.typeCheckingMode": "off", + "python.analysis.autoImportCompletions": true +} \ No newline at end of file diff --git a/litellm/llms/ollama.py b/litellm/llms/ollama.py index a24e47c07..40ff94390 100644 --- a/litellm/llms/ollama.py +++ b/litellm/llms/ollama.py @@ -1,10 +1,12 @@ -import requests, types +from email import header +from re import T +from tkinter import N +import requests, types, time import json import traceback from typing import Optional import litellm -import httpx - +import httpx, aiohttp, asyncio try: from async_generator import async_generator, yield_ # optional dependency async_generator_imported = True @@ -115,6 +117,9 @@ def get_ollama_response_stream( prompt="Why is the sky blue?", optional_params=None, logging_obj=None, + acompletion: bool = False, + model_response=None, + encoding=None ): if api_base.endswith("/api/generate"): url = api_base @@ -136,8 +141,15 @@ def get_ollama_response_stream( logging_obj.pre_call( input=None, api_key=None, - additional_args={"api_base": url, "complete_input_dict": data}, + additional_args={"api_base": url, "complete_input_dict": data, "headers": {}, "acompletion": acompletion,}, ) + if acompletion is True: + response = ollama_acompletion(url=url, data=data, model_response=model_response, encoding=encoding, logging_obj=logging_obj) + return response + else: + return ollama_completion_stream(url=url, data=data) + +def ollama_completion_stream(url, data): session = requests.Session() with session.post(url, json=data, stream=True) as resp: @@ -169,6 +181,52 @@ def get_ollama_response_stream( traceback.print_exc() session.close() +async def ollama_acompletion(url, data, model_response, encoding, logging_obj): + + try: + timeout = aiohttp.ClientTimeout(total=600) # 10 minutes + async with aiohttp.ClientSession(timeout=timeout) as session: + resp = await session.post(url, json=data) + + if resp.status != 200: + text = await resp.text() + raise OllamaError(status_code=resp.status, message=text) + + async for line in resp.content.iter_any(): + if line: + try: + json_chunk = line.decode("utf-8") + chunks = json_chunk.split("\n") + completion_string = "" + for chunk in chunks: + if chunk.strip() != "": + j = json.loads(chunk) + if "error" in j: + completion_obj = { + "role": "assistant", + "content": "", + "error": j + } + if "response" in j: + completion_obj = { + "role": "assistant", + "content": j["response"], + } + completion_string += completion_obj["content"] + except Exception as e: + traceback.print_exc() + ## RESPONSE OBJECT + model_response["choices"][0]["finish_reason"] = "stop" + model_response["choices"][0]["message"]["content"] = completion_string + model_response["created"] = int(time.time()) + model_response["model"] = "ollama/" + data['model'] + prompt_tokens = len(encoding.encode(data['prompt'])) # type: ignore + completion_tokens = len(encoding.encode(completion_string)) + model_response["usage"] = litellm.Usage(prompt_tokens=prompt_tokens, completion_tokens=completion_tokens, total_tokens=prompt_tokens + completion_tokens) + return model_response + except Exception as e: + traceback.print_exc() + if async_generator_imported: # ollama implementation @async_generator diff --git a/litellm/main.py b/litellm/main.py index ddeff3414..828497820 100644 --- a/litellm/main.py +++ b/litellm/main.py @@ -8,6 +8,7 @@ # Thank you ! We ❤️ you! - Krrish & Ishaan import os, openai, sys, json, inspect, uuid, datetime, threading +from re import T from typing import Any from functools import partial import dotenv, traceback, random, asyncio, time, contextvars @@ -175,7 +176,8 @@ async def acompletion(*args, **kwargs): or custom_llm_provider == "deepinfra" or custom_llm_provider == "perplexity" or custom_llm_provider == "text-completion-openai" - or custom_llm_provider == "huggingface"): # currently implemented aiohttp calls for just azure and openai, soon all. + or custom_llm_provider == "huggingface" + or custom_llm_provider == "ollama"): # currently implemented aiohttp calls for just azure and openai, soon all. if kwargs.get("stream", False): response = completion(*args, **kwargs) else: @@ -1318,7 +1320,9 @@ def completion( async_generator = ollama.async_get_ollama_response_stream(api_base, model, prompt, optional_params, logging_obj=logging) return async_generator - generator = ollama.get_ollama_response_stream(api_base, model, prompt, optional_params, logging_obj=logging) + generator = ollama.get_ollama_response_stream(api_base, model, prompt, optional_params, logging_obj=logging, acompletion=acompletion, model_response=model_response, encoding=encoding) + if acompletion is True: + return generator if optional_params.get("stream", False) == True: # assume all ollama responses are streamed response = CustomStreamWrapper( From 85a14d45e559dd53af71005671b6accc28af2eab Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 23:20:48 -0800 Subject: [PATCH 437/460] (ci/cd) print verbose --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 8b92a2671..182735bfd 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -61,7 +61,7 @@ jobs: command: | pwd ls - python -m pytest -vv litellm/tests/ -x --junitxml=test-results/junit.xml --durations=5 + python -m pytest -vv litellm/tests/ -x --junitxml=test-results/junit.xml --durations=5 -s no_output_timeout: 120m # Store test results From c89ed8f4c8011d795ec0ea59ca4f5f9910f72f8d Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 23:22:40 -0800 Subject: [PATCH 438/460] (ci/cd) test --- litellm/tests/test_completion.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index 1f58668b1..b6dc82e05 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -1024,6 +1024,9 @@ def test_customprompt_together_ai(): try: litellm.set_verbose = False litellm.num_retries = 0 + print("in test_customprompt_together_ai") + print(litellm.success_callback) + print(litellm._async_success_callback) response = completion( model="together_ai/mistralai/Mistral-7B-Instruct-v0.1", messages=messages, @@ -1032,7 +1035,6 @@ def test_customprompt_together_ai(): print(response) except litellm.exceptions.Timeout as e: print(f"Timeout Error") - litellm.num_retries = 3 # reset retries pass except Exception as e: print(f"ERROR TYPE {type(e)}") From 1d42967725113ae2262d09ffb4c74dc2b266770e Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Mon, 11 Dec 2023 23:32:29 -0800 Subject: [PATCH 439/460] test(test_streaming.py): add testing for azure output chunk --- litellm/tests/test_streaming.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/litellm/tests/test_streaming.py b/litellm/tests/test_streaming.py index 38af89631..b7f3dae62 100644 --- a/litellm/tests/test_streaming.py +++ b/litellm/tests/test_streaming.py @@ -230,7 +230,7 @@ def test_completion_cohere_stream_bad_key(): def test_completion_azure_stream(): try: - litellm.set_verbose = True + litellm.set_verbose = False messages = [ {"role": "system", "content": "You are a helpful assistant."}, { @@ -243,17 +243,18 @@ def test_completion_azure_stream(): ) complete_response = "" # Add any assertions here to check the response - for idx, chunk in enumerate(response): - chunk, finished = streaming_format_tests(idx, chunk) - if finished: - break + for idx, init_chunk in enumerate(response): + print(f"azure chunk: {init_chunk}") + chunk, finished = streaming_format_tests(idx, init_chunk) complete_response += chunk + if finished: + assert isinstance(init_chunk.choices[0], litellm.utils.StreamingChoices) + break if complete_response.strip() == "": raise Exception("Empty response received") - print(f"completion_response: {complete_response}") except Exception as e: pytest.fail(f"Error occurred: {e}") -# test_completion_azure_stream() +test_completion_azure_stream() def test_completion_azure_function_calling_stream(): try: From 01d58754265e73d087708021c9c247ef2b282324 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Mon, 11 Dec 2023 23:35:50 -0800 Subject: [PATCH 440/460] (test) reset callbacks in completion() --- litellm/tests/test_completion.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index b6dc82e05..19473cf48 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -21,6 +21,13 @@ messages = [{"content": user_message, "role": "user"}] def logger_fn(user_model_dict): print(f"user_model_dict: {user_model_dict}") +@pytest.fixture(autouse=True) +def reset_callbacks(): + print("\npytest fixture - resetting callbacks") + litellm.success_callback = [] + litellm._async_success_callback = [] + litellm.failure_callback = [] + litellm.callbacks = [] def test_completion_custom_provider_model_name(): try: From 0dd1111cea7ce3b5c0ee632a71cf4691ec36f9bb Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 12 Dec 2023 00:12:57 -0800 Subject: [PATCH 441/460] (fix) assert streaming response = streamchoices() --- litellm/utils.py | 1 + 1 file changed, 1 insertion(+) diff --git a/litellm/utils.py b/litellm/utils.py index 2aff72812..73eb1ca46 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -5463,6 +5463,7 @@ class CustomStreamWrapper: def chunk_creator(self, chunk): model_response = ModelResponse(stream=True, model=self.model) + model_response.choices = [StreamingChoices()] model_response.choices[0].finish_reason = None response_obj = {} try: From 8bb01422eeb1b7173bafc58783d5fae8f131782b Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Mon, 11 Dec 2023 23:45:42 -0800 Subject: [PATCH 442/460] test(test_streaming.py): stricter output format testing --- litellm/tests/test_streaming.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/litellm/tests/test_streaming.py b/litellm/tests/test_streaming.py index b7f3dae62..b718d00e0 100644 --- a/litellm/tests/test_streaming.py +++ b/litellm/tests/test_streaming.py @@ -58,6 +58,7 @@ def validate_first_format(chunk): for choice in chunk['choices']: assert isinstance(choice['index'], int), "'index' should be an integer." assert isinstance(choice['delta']['role'], str), "'role' should be a string." + assert "messages" not in choice # openai v1.0.0 returns content as None assert (choice['finish_reason'] is None) or isinstance(choice['finish_reason'], str), "'finish_reason' should be None or a string." @@ -365,6 +366,7 @@ def test_completion_deep_infra_stream(): pytest.fail(f"Error occurred: {e}") # test_completion_deep_infra_stream() +@pytest.mark.skip() def test_completion_nlp_cloud_stream(): try: messages = [ From dc148c37b0d32ca83621645ae915eacd721ef43f Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 12 Dec 2023 00:16:37 -0800 Subject: [PATCH 443/460] refactor(custom_logger.py): add async log stream event function --- litellm/integrations/custom_logger.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/litellm/integrations/custom_logger.py b/litellm/integrations/custom_logger.py index d0efc2fb0..9d878a039 100644 --- a/litellm/integrations/custom_logger.py +++ b/litellm/integrations/custom_logger.py @@ -28,6 +28,9 @@ class CustomLogger: # https://docs.litellm.ai/docs/observability/custom_callback def log_failure_event(self, kwargs, response_obj, start_time, end_time): pass + async def async_log_stream_event(self, kwargs, response_obj, start_time, end_time): + pass + async def async_log_pre_api_call(self, model, messages, kwargs): pass From 4fc2e7cf4cce2255b2a3a55d1db37a0bbaa6c78b Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 12 Dec 2023 00:28:24 -0800 Subject: [PATCH 444/460] =?UTF-8?q?bump:=20version=201.12.4=20=E2=86=92=20?= =?UTF-8?q?1.12.5.dev1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index ea09088af..6cf094b1a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "litellm" -version = "1.12.4" +version = "1.12.5.dev1" description = "Library to easily interface with LLM API providers" authors = ["BerriAI"] license = "MIT License" @@ -55,7 +55,7 @@ requires = ["poetry-core", "wheel"] build-backend = "poetry.core.masonry.api" [tool.commitizen] -version = "1.12.4" +version = "1.12.5.dev1" version_files = [ "pyproject.toml:^version" ] From 29c579e9ca91910ea0b9eb0a5835231388c729de Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 12 Dec 2023 07:49:06 -0800 Subject: [PATCH 445/460] test: reinitialize litellm before each test --- dist/litellm-1.12.5.dev1-py3-none-any.whl | Bin 0 -> 1513567 bytes dist/litellm-1.12.5.dev1.tar.gz | Bin 0 -> 1416998 bytes litellm/tests/conftest.py | 21 ++++++++++- litellm/tests/langfuse.log | 33 ++++++++++++++++-- .../test_configs/test_config_no_auth.yaml | 12 +++++++ 5 files changed, 62 insertions(+), 4 deletions(-) create mode 100644 dist/litellm-1.12.5.dev1-py3-none-any.whl create mode 100644 dist/litellm-1.12.5.dev1.tar.gz diff --git a/dist/litellm-1.12.5.dev1-py3-none-any.whl b/dist/litellm-1.12.5.dev1-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..395d5c567aa8d44754f3955c3c296e9ee568c346 GIT binary patch literal 1513567 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 z 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

o+Xc_ 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 RP6evX^Kg?Dk0^ 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

SP(#YQs$iXtHu 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%0DT39`NIG|oR=)W{WJIC22QKu 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

lZ5~gLtUR`#xWjO(Q2Jp*l^czw7pEj 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

|cc!cqKMpGaGXC^!lSXO7c~!YG+>**ro3s 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%0An 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 CVTe-z literal 0 HcmV?d00001 diff --git a/dist/litellm-1.12.5.dev1.tar.gz b/dist/litellm-1.12.5.dev1.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..8fdfd9d5e3684f4074fb5db8f55d4d1890da80c4 GIT binary patch literal 1416998 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

4V7|5UV8BT+jnj4 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�^-dz>`HT2ji2$xeQtIMtl$UBA(&yWxsRSdm;i_ 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 z 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%0Dsol@(&YYwf} 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�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

R>WW5vT5N6fh+dsAV%O*04`u}N% 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�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

Ki4Y3yQ_S(75wfHKt950vwB##DJ-c>4HW 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�-3M5WRpJv0VGrVjycAk`i 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�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

C>8 zPprd3uHP}NArU=!#rkWQ8q9dvRBORQGexVc0ASuo!oHYFM~%dlRx~l*m7)_Z z7GotVcqcq-$0ieRkKCHH{11ibiy@k;hx(#-h|kJdCmUSk1^eW08e(q%r~@-EZ6AF~ z;YlrOBuI^z8s1oPSMOXGn^>QZ<)~HDI6yjmJ!!m#Xw(cc32{+X@HCrGT$RkM^cb3F zQY@6(>A9~Q`d2>)Qp2+-NGGlLbYD`|v!Ij&ktt2F+MdbmwGONXG=Bq)#4709lJnL6 z1FWe_8qr82E6kHw0Pu|>V>FKp$o>Fr-wZ;H?s9(#)2az^xV0{0dsCh%p2_a6E+X2JhWrNIwpk)jxdH2COHu{|79io~ zhKHNhvtYDd`oe(kKRZmIb^AT)Fk}BKvjYES^Jo(C`KR7gM~(MSzUhw)QQGg)u@|S) zo*I9wxfYxURspI!EWU?gt%p@3z8uV4lo3ykaGo`8`jZ=$-4NQC%>o2;V}9Vmbi&uQ z^8sn3a(*lpx>bS9e@bxL*TmTQroa?$3t{Us?!t@Abxdh1OfW0fVXtEu6%|A7hVHV8 z-jccP14_ZDJIB-=RnagS>M-;`pouK)OC5urd{=cCzvoB@oQmZgEx1zg`tfDzOkfvG zfvNha`6qm4L!fpCWs3t8Wm@!Ha1V)9Pjzn0-BmF+kU_$VKN%U79SbXCWbp}s^@60` zL* z4*-i=HgI&I17nVwDjL1eT~`HFb<3pS*F&~tEZF=!1GY(DIA)K9G;ID=r6UCkstpHL z6`Don!S4AG61$;Yxi_Z=HEzxkx#qGwx%63i=yvwqZdg)XXDRS@txNW}fc4yjfIeD5 z1=%4n)>c0V|Ft(of{_cPs0#haW~?j)e@A3Ae=is4ni3aVI2xAJqDnZU4o{`_ewgGK zpuST%`UKp*$x-C}-X4}F(uon23&S=)m#_P-m0AgqSo{RTb>@p*xXfeIuz$=^Z>i zs@bEE`H)Q9eRVDOjd1OTLFxfMvhaoxDH)7x!x=9R)kUio7vO~ircA*Hacl)CI3`cXH<_hkuw}kmy$bwDI8$4uZ z;vpMxvGy912xT;}R@HR6L!A7+)OGh9skm=&Gz0xx?%aBu-toAPv3;Hr2_f%xE_&`y zRmC3DIb8uqA#6wPiH6_V1wDx-s88pB3&op?gZ=d+581urHG&~X5e^}MQgxN&g)J!2#S^ZXs#mTBZX za~k@vo>!;>vF37Ft}HDXduxP;G^WDnQ?`UxZ@X(tG~-lM!{&}CnzLz94pga&Bk-Ce zG3BxFgqI|zpUh?jgCIpyX; z+Y9w3Y$-ITk=DPpWC2NDk-iP)=44h2^+shth7 zfjqzk*6Ht7*TvyvSKJ7M=z983?(A2}g@_!)BwbSC*jKO>-7yV(I zT@^!kw^v~^5VdT>o`3nj_)Eu2wrU4HBo{cV|D)dD^6o3fn_Jc;Fs9FmQ>l-Kb(iV_^~Z^sUVYCSlT_0`#QE`n*qX zjwMn(Z~QH&*kLe}N6)=rCvMB%@To})Lj)0De-*mRH*VcA>vXq>teW|U^Z)0Ri;62$ zWG$POecz7?VCeKa5U0X{ymjlg^WQpr=a%cZPshJG`6ja*tC>!UG0EI$2zPJ| zx6C3YMV(t!!Ob=ChO7RoQPj9q@zpX}{YM-hzkCt=__+LmSiGw!(9=lu3JkY z?Sl_f=168A`*bf5c?sURR=olOYiEUM3@@-}~>OT67oPC4vP(IW^|3edNsp zsoqdXQL5hVNJ*QPk%npAxVx+i46s(*1B_5)km_^Rs~1eUT?@oDx0qQ<63(rH_ZonN z8Y6M4^%gkt1t1mpr;7%zeOHIfqk$mWfRMOh<)tr{@k2Jk`1#6`nA8HCcPORvMpyKB zMIJ5)OSRk)wf=c(Zs`}Ek(@OPq~^@OQ*Arpf_t@55RxYiXuI5OZPkWchMB=-V?+@K zo`pw1-hbBoYwL-HSKx)!y0|t}XU9iy2vaFZ@n|>?^(b&YKsZ3rr&}{LUY7Fsa z+9lbov=}Cr=x_9w!*7WBtu<^Ic$Knh(%q>flc@0%hI|~o#zFhH`cxH!Y>l-Q)8MXq z4(E;@Yj`jbb@i?aAg%4WdqPHiS7HjT_lRUWxt_~A(yRT!P}TgOLYgJ5t)4@06RZY= zc&>jCKW)zE?z($JEk8gwvS9*!)I)e>S>cYtNH>{JDWogOwxp7QfZG24HBA&oP9^XXSay9tBPJG|aP`-~A%G4GkRrIqotw91q3NZm8mYuuPp~(kd0PYRAr{Gx*EMTKroQO_C^K zc59Dg)yyv=)SQXA6Cau^rBVOUzs0`jNmXAqQ|A;3QvMj$Vr%FIv2LHnMp_OjRn6p? zQ!~yX@#qKnSrOC=qx)nM9yyv5i4d(aEBYYe>SssN7UR>EzRAbe0solk9KK^|@X(}v zeGQnP|Ir23%#FxxPIE%duQ6ed?~QX8voZFNt(&(w@5OM`3-Al4=* zja;OA_+>teKm3g8(wjiNsp77=dmAg-jUJL=B+!l`@XgU|=$BzKB)SrSUzel=rJw@F!>IsIEYyV3EouMbjfMX}=vxvo3)kI+mx zUDSy1-=i?qLCyHUP*Oh`jfmXdyl_w2pvquCHPQ$VK{x@dPJCB2G*0Zu2ahms_Q6o^ zh;%ppUVl5|oR2RLLzHtbmWW4k14}c>JHT~iby97Lq%hJbR}|yvhiBh6M2*-BKUKru9~r*mCsb(tM{VNncQ)O< zUQ2c34}&nj-rA9GZfrY(^7lK-x=8bd&ClJ*k4@{#hNS&%YT87#@6NT3&c(vb_G^1l zFg;w4io?Je=@v@3K{KV>W}t{TG&LL46k};q83c?;G?MQ16^gwPc;C|7fvjdfc)7ra z;m8~?hD99+3~%@wDg>96-m1Mf9TYKRdwz|@uYJfitR zV~;a}ID3O=1@@G$w~X1mP-l0ven8KZ>b!a7s;GYmulGq1v3)}@IZ(y8s>u1P(i86g zcRGlit9fz}=icaA{Rw;pi_hOJ0|n(qDMRU!JALPCOuY1)H>DJmwc0glR>}5w z(Bvi+3zC^lKK0cBd}@MsoVoD9IAkuEr~N%AO0NkboE|xF-*k=9Kt1BB@vAwvhFi}5 zKjz;2xsmHU7yehywUx^mEu&d9n_@WuL2%I!Bt(!i9!nFs(P#iYY@ji{ki^JJeTnP) zs;;Z@Rq|7Qb!2O`yh>grOH~~D|GMXS-uFEX%Jy}XIH@~M2+W8Cf$nq8yFH6b0$e|j z>*+EWlai3lWN_sG5s<@QUinYCgfLCk%x4pEN_!29nGyG^ z3C8yLsAFHDa;63wYykAE1kHR!;IC;fsv4z^kv}Ju-%hE z1on{mQKC*{V*&0xl$@_r!NPxX%}M;R<6QM^Ln?}kW}%3Dv=J&jB>xB3=E7+n8>a;5bE8k_sczS}Vs;KRhACHZ_}(Ox~nK%usj-Pfav554%T zyLeH^a3|KwEeHp{eLbPq16kysW5*?GW)SzDu9(uC@$ zuBg@7{7d?X)2^BBiMwuVYfF?qebfm%Eg$f|BaUCwE#;;vP(mq0$mR@%4tLNO@bh%x zj67HmAn;R@c}R=kMmYgO^D4mq-xlo!IJ0fx-UK@KWfHqTv5CV#!lNA|gCGr-*A<$w zN-l4;-6mrp^KV{;eOx{yx&nGZ@fYXgS-9|EU>AWv=L7C24Ux%j>oPVfk}nS@IZ&%a z`(y2Y8f~Y95}+hOg(($Hgq4 zhGL_hvsa++d=Qxy(qP0shhK95d=4YiUewt<&!?e^540x*n&_#qy?ySi6=i$Z-PPl5 z&j;UpI@P&TX*u|`4%!Dj0E5Ow(tl-}w+CeMiBQ9rsZ=GMrb+H*^Wcy>!H1dOI7*WH zUzOq*E)+wvCe3LpsUu%-H%UvEP^TkBwiG%>`qxsz>ptpj;ynN#Y-ts5!o&L(50TdHY3LkRvM)tCl zhQ$s2Zv&@kYgDAMHejUCS9^p70C>_yxaVt1 zMeH4n4Rfy$sR4*z%mpsG6-p3amtO64cl8S6o%|YE`)xO`IV2Rt;ZTaQAc zqX-ogVj4F{dsU`NgAAMwhJk=-{8F)(86|0sAdg70v}O!^P$02KoN!7*5s&Hw#F4Ea z_8EEo>Q}owL+P~L)}ClrMN8e#z|=%Q)1`IQ-Mpzde*32#*K2Fz6Jt}kylm>vOhY6x zu-mrVpg-LOAE8%Fj^v)(+TPY@yZ1D5&iVOABV9o+nqc8I_ri5`*LB8=eL1)U)UaiZ zvTCw0W#C(8y)|SbG7{y~R4^mZg=4)POiB2za zxUMJ#tnRvlowXp|Zz6<6By)flpL5SsuGI%C*bgep0mKLbmY0mUC|}IIsbNow?EMxy zeixs9nvI~=x>~e}7M3-IIwz=CrIrQ3_Ur@s>f}K-^sb}0AEc8hWi8S1*HS6|mM$P$ z`&-s(1adLdJHm7qiT>Y70`o)ZwSrhK{q>X5bXV6PM?W)=!!f%U(otm=RmiSsM|0QA zjY~be9@aiD)=t3(;@x@wz5>O9jEhCGS>l6NP=J~GGLNOX_Dj}V{scm?0y%ULn4byGCv1vd%`p;!RC6e+}K{gf6)^M6h|)y>h?`bxRxtSYZ3y zm}pvt^?hOC9r$c^#z)??yG{g(Uv3eb?#9zV;`ATK)K%aG!eL^MyZorfH*%*Vu&t5HyF2LW_$Xt=DhTzM>95f1! zcP~B=p30j~xr-t{8`2;+hzJ2R54rZi9GJ@h3d!dJ0Y&?EF^dHMO(+psF}EmlGVzD{ zCNLD0Uv&-9_v&?;l=*TiB_4-*A8tDz3x4s!%JbS16fr}kr+tB)HuZUbtcoCj&QAyB z63q_Dmc({dX@r+&;S+`$}*+U{TVHGut5_Oa9R%)c(Y(=`iw$A`lA z1tv)~Msf3f`|NXf_H$j8c-2yh=WL;hZr$A8&bUs8p%vbb?3-x}mV&>x&`Q)F4_fo2 zQ$Q|9BD~bgt44PWVWdeWr*xNlm`D%y7xs?eD`NuY z{|~3{I{>E`yQ4uoOh)5L`tUGw(^)=$RFqYHbbPXSOgHG4s4aF)BE_ao6^}Ut?Kqkf zZ@RU0i5YV~ECf9&SR}>^3WncxC#_BEW6BmM;qWKIo;xlNQz|iATPCqUiYl z=h!6&nP17Z0e}?;>T&D_nVoMTFyyY%Ygq=KgI@=F?~j*IxacZWP3e$Z3*6-KbByi+ z*pxiuG`J+TgH%e}MXITF1D0l=6zyqZ3p2>?fKb=bSXChgup-u6OwbN~8?XrZ8O*F%Y;cW@&3%uC=|p5t^K) zDLN=bfK*%|by*IfCt)M9i9dIp2^kGQ6GO($HqGviTi@F2D#|8Y?!=!k){XU*1w|o! z?L+*Lo_jbFvp_HB5VK`k;S>)RFJxm5njk(%Y?L6CH@udXnsdBTWBS7DBU~@5u@FT` zRlTf#9KPUs_6#lg+E*^AG|MC%n1uY=Ib+o1Nb8gyHQ6Qg@F~@=oH|;9Jy=e7!q1TG z!zVnbatSgA2n?%xHi}4>;AU0L&nca>W(y}{BkJ$UsVyconJM&BTt}f%<^Nipe&2M5T?tJbP>h{im9k3z-(si_tI~VT5GP&=-7@j zC}7h8dSNdkht7{PCq~U$Wfa4XEK)gPXl>dWR!?0&_- zpqZ23(bD zffNJlLX_Shmb#FEVKQf%Rm1`Od*DGjl$h&t{*kopC@Gf_$8*9eY<99+Nh}@k>-}%A z67%0rgPf^&Lk~02>Ks=Qk8(6#Kc#54HeUb9eQ6)JFXKrn8E2&Y4v>SD0Us$p#E?%q zOAex)q{M5(E%8gunzBw2;91aa&IQFPA}Fz`d0x2aF03dx^`Na0ytYx~=B~+zS%?2f zWcHC~nYg*rsojo0oh7nlE;19-?mev^543#rnP92$S!@Gh#U)?9A`}ls8dJ>muk@%k zpC^Cj>b%c?4xi2nLL%4G>5i|8CmMyPAsUOasZSRpi^=J1lyjH}Rtyt!WHw0aBA$QKc4;5w)`YXX)p6)*QL#D;F zQ@oo%$*VHs3d+(2;Irc7nSUF|b4vh=DvHKlR{4kcm*hxP42byIw}Z)l*Ia^SlvNA| z6yuD2sj1oN%yg8n$1OG=^xRr&-{PkN#&-vrlrzUnc!fr-myl z7a`(Kc;$Qv`BOfsLwZvlF$wBdNCC}HTATw+dnaFFAc8iS%w|g*6n}p-vdu^WH*mqc z=4eb`62VoZcsf&`w=T5OP2pi0hNU)qn?*$d)`mFB9tG#gUOmY8nnjbYNH;_@Ukc&L zEeyVvEXj#a2@vpGLzG?4SPTDLA-5j`b_T?mvLJoZ<=2nwz&6a?zZ;amNsFtl*-=nlKyJ5TiI>xv^Fd)=mG|wO1d+kP9Hzg^AZGaiWu1~clEM7 zQ0|_T`(4>mceOoukBju1(ip}rVn~z#2x^!JvlzW9@Vll?CWn5f9i?ME9v}%WO8J;V zjv0AMIUxW=<(WoTMc&3E9k!mZE!Gf!D;56&9c*d^R_roDb|OH+3hk#r)WxD1421)~ z$_Vg-Fgutw{_iuf`ti&ABp0zTz0csoRKaFDNksDBsSI*o5(@Nl0vChA;^{JVdXNYq z6YZVh(hxG%yc9luQK3HF=7J&(4}Xw9FpqWbF(g;>QUztP@ho|JCMv(qQGb`G4$91`f-2a%vDZH34l_$Xkz~h zea`mLtZ_@ok`rTBT*REVKfUe+F)y~FDMGv)6(eDU{?RVSPsFf=FexzqEXQ2v{YNB(pG&@uZ>TfboPsN zHq#ny1UF8I)@VVJoGZQ7BrjnT^z>I+uU0a*YGmNjS;C*q3L&QfbQ)@OTQjsd`Uk7(~B#K2Sl5d6XJeW?tkt8tfBvRHG># zFt+)sz#q3|nAm-86T6Qa94u~eCG%8B5DsUg(bK$}lNzAPk2bLzB4fv5) z)3IySRc_^+hW;P~L;tyf=F0;r;jy^d&YM!Nb7T-GfTd#-QQBPUVMORan@s7{S6up| zo4X?R)IZnOo}jl?^5A&dU3gAMAwCNlxv)%<6e{b9mEk`0^*PvU-)&Gk3(d%;OMZ1# z+OR%-Vns@QmFHTLqbCJ%;v!c5{zs?pVetQ+rZN5=Bn4J$Avu_wkQzCB0`)6L(yGSj zcg=o8pMU(P{@s1q9}rNr3Y5|`WnpGjqa~%OHuMQq5;)EP@+>u9s&PVSi+VrK+ zSmuZ+p{zS1O7#k*)WENs>B00(W(^PAg^P^f^+51R)R_{U8{Rf^kAofTP}8)Jqy?Xf z*I3{uLrGb0HAZWh(ozHv=M%30MYfr0*-h+oefgg(qj|Df%oFoA%+urS}yjfwOT{K)FcG*DPh>!K3Q}~t|7(pj| zPped@dz*~F!c;n;wDYDJ8;z1-qFyfVr2^jkU+9#LX?DN>{V ztEFT#W#_9UuBR;#lY8@`Te&0-;iMe-xzB3nl%JS_kf0HVUD_l#@0wqbzOgp5Lj6k*5*Bz* zeE&1$>et5fVjrTko{$v$w&pv>xqPh7OKt!~H&`&-M65xhTVq+*Bo2gxj z8H7+0cDCFrB&uS}DOU|c6aWze-}uS9r*8|s!c=-HBftLh>8D7^ejQYeu!}0we{ZL3 zf$>FpG`morh$lbvJC>cT3L++EA~eE#3|uCxbn%~&RN}4E56^!0hhN?DUqWyBm*Wh; zYeR^G_;i9^K+pxP>Xbt}k;y&S-|XywAKb7`eTFEtQ9xte#VPFeJ4E{a4*>+-5^07T z4D+`{8;A~Uw*)M7+g-iN2fB2BootVmdqkk!vQG4t>o8@w z`%ZF(yNG!~&;Ii?K*%NFLe_FxBE zq>>WJzahTI*pDZ($P`=Ii^$8WvDtXhq_>U}y$p~(P{XLGP}ROlJgu#if=uV3p{BB= z@rBnneO)?1=y4N9@T4K*&WR#$%W4 z6<4$DN8KR}4f;XN11R;&tB2SKddVXQ_`-%U0!Y;h;sPJ3w8Y#sqC3lF##CiGI|0X3AgGruUKXdkP^M zJmb^L*I)a}GfO&Z4IOP~*L6F(CeVNKk%5Iv*Y*4NL?J8muEwnLq@`{i=4^dnGuRet zVQ8F=HRIQ`LLve5@~Xi0ALV9HRl@Fj!B@(}$NpV^(u#|~_g2*cMe<|?1Onp}^1Z!e zS;Px^NQJh)39-;2XqP_3L@>rkEQNaxl{3~OsM*jom2Cdrp6~^IUI{XzYQSd(#ef*RKdsj|{ndvyW!ezN57(XSRP7iMua z^M~(|!ks1{Ly52ve55Gnri%FJoTg%&Ff?l1I4_`t!b10sFID7CW;y#Q!Aqt<5-y&e z!vs>BEQ6@-ep#aZP3gV2)puoG@R}R0#iU_VWW;xjlCk6H=LIPY5wMlPra#Ms6X<`M zBeoF&>!%Zz^Ets%6LUmLB`8f@DK_@2{3?o13#{d&7;?6H`fmaWJAFsmcTkB*H55YD znQKFn_l3mp+=Kz#c-qLS=hgy9FhWnQ)Sfz@{2N;+Rn^*|sO^d|hri+C0$f^8Yu}_+ zYUquI+Fx39wKBtBf87Tg>69;|Bg4b;yDBx=4M_AI7ee=3pD1Gq^GLteO_`~h*eSQ_ zcK5dW=43y$X22rY*-x$XPYlhRNKE#xxSpQa@KtIqOr{MSx8agm^E}T+LgfrXrX4`0 z^}l!gojBBfNjOeZQ4}crwPdy?tKXVX z*Aiq8c)lhlEO_269iNjACE{KXq7`#szpA7x4C)(Z)O;M-En4Db30g)n%?7ipVoEdV zCo0_U8(NsdidiH&S~`Au%~t|%gciqOAS?3#W(A7(17Z%ch=zHE4)K*G-FubqXB$AO zy}r*AN2AQ(voVWU-p*yqGO$aRNIG$ri+cjziO-yZ65+cRSXZ;9rL5A7sIS}-e$50A zy6AW$(HvG7y6=zt^~QgE{Fp)CKV(Z{_Pw2O;VVH7$saU9^N+TguxyLpSEow6Y5t(odm|qYF~HLqJna1*OzgU8~EG-w?=cIy=dSDOf|QB`r|`UiwL0A z$Y(-|*@sr;l3ry2K%9DNL}=OQ)!*%*6X06gS}h{1Rc5kq`jMzQJ$e5O+>wq?=pt7zE$euu2R)P=)REf=ut4g!R)=q!RtrAw++uMQ=*8Y8V6K>ozr!ko% z?`Uq+b2_Q%x%%+Y{j~zB!w8zk% zfw~}-%r78jO5q2WkH>Og{JnI5|7-LigM(P@E1{vJDY?v4rPv;-HKwiMIZU}jFBf(o zmCY%5QYMuR$ui9u;F@VxFKH2Omz&pmknIDjR*0UXDl^PQK<$WBm9mj|WNPh~;c+4i z=1E8(TdqE_C-I^3-t)OBQu=3yTE9TVLDL)a!CRO5_2Na<(OL7!#@OZ6*xmGSJ@^wU2X+5y)m5cPcg^J!*KQRWpRJ?|4%> z1uz(UfyWNo@6tHMkZi3P`)9e%V0_drw1ysKLGkGox8`r29^`v4^HQL)X)n=!Mh}u@ zO@?%a(nrUUD{mU=qRlxGuEX`~46K3{XypIt9YgayP4DX11!`v&EnLn{3RI>n+5irA zm~g_{-gE~$@JP6mEU5Mwv>+p${`w1smm%4WrW>Ib;QnCox9M^gXhtmAg(jy-%&qGb z)Zq9%xc{~)x8Fl0wOUsYOIoG6LmbVQ<{zNxur_R(1#@*P@_}EJd0=k_fG|#{piKCK z)8AS<04Rh>!g=MBcTYcYbWl`P4wWmwgn`5Cp%V54Fi^ufl7SrKW+(4cms456AggRp z1oj4@08*3wBOk%M#;gSoG4e+F|F-|*ZmaZH?FPXM3sKt`qwiY}JBrEW2(s1~c)24> zmwKBVsqCM7uMeJcul}vllBSBM<}+C;e<9-mH6QTT_qXm;G@$p;qA{~lXa>sFee(9{ zuiWX+h-aySBV3;<5~ziyHotrF-s#7pX*otmh=P`zd1>&Xi7&Kky;{9{)Lrt??(@^P z8XfA%f=n=@3BlJQ1?UkLV*1D7OHdFIMZ{%6E{ce*x|cheyTO3qQ1$u8HPBN!_j~fr z@4s{UeJ3tzs+#HxfrUZw`aTEnSwa;c@;w;_!$CT2^4%j~F;vzGX+veq>N~R~Dg9_Z zr^k)1f_6Qy9?Ov64@-WANtQHDZ@$FbPb*(X?T$t^xn1&glW*EPa`E)8nhZw7(z$zS zHR+<(knr^6!?RCJG!o6oO3`=iXa=zjf3wzYIz>aiRQ%yiKXYfFD2V0@v~HZ3N69id zzrUEyeH>tm?-}InE?i;w2M%&_llWrd4Sq+UIXawJVX6F;R3ra7J13iBs80erdYBv*AY3nVy< z5>xGVY_wUT6LLWYw9aqV!mwj)DaR9&?Mx~_qctNH(EW4GUB9AkqN$Ecovt090OZUa zz-N=`hJT`ACQY<9yBlOy?h+WP^9KVX`!d(?=35|<6m^iNEb}nyB?e#8xH*}t0aXZy zpo~$o^VLzfm_0173gOMh;GxDl|!7JHL=ZD7R>m$W@-t@GdQ73LpEq9nS*OQ+4aS0oBA8w z9IUqxrZ2p@LN?@4rl3G0D9ecHRTa-Gd2Laxta1_k9oLDm$b9kqOQ$v#8>H%qfcuod zrdh1`%_6TAp%51f*gEm(!mKTw+HrQ`p9klLVwfu5crcv$gw{;g+BNj0N^@Ethl(O9 z25D75Zj85Vg%#klS|wj{uReH#b@#O^G(UZcZr}WGU9s`(DG+%N@KO=qb3)tZKl_6F z!3D~E_|5n;R@r%6%hYi!aImq9XM(Di4yZY$`}*~Wq%&b^8-wvks@@})a(?mTJJQL2 z@~LNg^cs-ocBZIWS;VARv0 z)le54THw!WpbXk@eIt#v+;&?8!1BzNXACfxt)wU0U7gnY67!mY3V5l=jtjcdq{=1AM86pXH)rB;jcQ`Zjm~19 z|ArPk4i&V=uM=;G@u!FGs5VXHD?6|JM;2>#;E_x+1-T9l zmRUKUD}o9ApHFlQHk2wooN9$kvu(fyMNJ$3gAg1N8IhSNnl3%jHyjE?!9@XbjAbpY z#10F2JCKf(V^XNDV{)bX(}MMg!=eUhj%uBHf5(>EZb87G+)JPMux4Z4O+V=?u z%c*&OXJ#)jIuH#LR(FeE%<(;fOGfh+hhZ18wX~1__jgfj&m5WiY8? z25j)zN@|AjGO4YRwHATm5Xgn8qK>zSWdYe$>2z(?sJC_)6!7Qf-E_sYx~KYNI5Hxk z6`NhxZRwM{Jkkd3dClFrtseCQovj@E zc%*OaWfv_8!>Nga{v@%E(8db~PCeH%@Qz#JLX^uM5ipLwY$$|EdIPX?90cL;p#q95 zBKrJ=EHCuD`|`N2AqBD)rcMckx9ciy><xnq-zDwI$aoV z{nZ!Uv$&+x2a!^E#XU{^&6yh8qs5>Jtqmf|pd~lYYN1J={=#XY-dZ!?OEs7Jx0!G+ zWd&Z@lUJ|7!^xHEkOuOA6k1eV23n zc7`m`?M25+kkZ88OSw_4Vyw)giXK&C>B>~c_}2v|)QV9~PR;SG<65=8qgap&z7GGXW8K}K`1RinL}I}G8f%9VIx`N|ih6gS{0j!p|Ez|L z$T6{8){1icVS_9%U&dyJNO2L|)NUeB!l+39DX+yiLYw(lTX#1~c zpMXLxh|Z0OVqgA+K0EsjX7L~BMR`RiHJS+pb_D*qF{PkbqZemwDM%YYMNDPCqf9gU z9UoWw8{KW?z@Gj5-~ZKp*&i_8s1y;heE!mMs#=R+x}`wyjI#{$de}^&qlKftrqZrb z^^$A1_B$K?M7d9BYCxtUYxa3Um9HOhp=9kbH9&&nY+%Rh3}&aNw$B;6xMv zeaJSs7{6`ID$mX9rEdQZtlO`r$}vO`g3~Iwl-l>0Y9Jr-$JESJBpL`YxcI7O0BPVh z9;&1O3Q5(=vB!XLp@_~2XVpNwi4p_m$FxH%%(!u8TC9(w$PBwWJ9jm7ha0;s9cJQ& zV@Zvv-J&6xv!D6I9~%a0koap)AJu~AVnrNJqS-7l`(v3G@PHL~HZHOr*LPe#G5OZi z*dXXv1}+o2+d*j)esxms{e zg}E9O19+I?+fg9t_Mc0;6|;cD)I@lQ6$b?Gh1=J!8D?SVwk6W+LrzmfXNx{v8mls1a~ZwImXP{-W3x%_^%1^Oj!sfsdKlrE$YR$+%464O-Bky zSH!@&BozS{(2mTQa=pRt@oAqU zrN&hZ%?;VnNQ0cQ#qnv1(Cgc$b{#kKo>}Y@HkwNi>d-ltcEx$;+lo~_#0}kEXIv4`I6~2sYN?!}7RgnL~cO(H4 zDK$_d@;F2G^0q#$SX!d5Y%LB^4Vr{|x^JoazDDMY771EzU3DsXa8<^bKMDm(&#kTM z6KF}=L1T#YS5;TwRrfW`ao7&w1V%n|;;N-l%(nGEaKM#3f|3TMu_o3rc;b_vd=``+ zxELV#@cQdv78C0Pnk(U!cjnAUMc*&Kz)S z=0+JWO%QwFP=zjCTt0tjqWIOXDt}WLb$cDA#r{Ew^ngVSO!{H0;)D|ATYGL#ZENrX zqA^;P!gncrYQ>zu5S9U5S?EL;QiVE&DFyD-On(4e5YV{k4i9<$$UFzRmP|alzP{{g zQ$C|Q79o7Qj{6i?@;q3Hn#xaq;w;+XsS+eG@tMn8{5Ntdx6zF?=4D!?A~mR^5e6Cg z!Pj1c4>~8gI279ldwU&TJN&J`OX&3%bd2DgAr1^tMoA|XR!~hl=9wuj4nIvqu?O7C zL+fS?qSD&TUDRBng1WZnwuq9@VMxXmG!2%R>xsNhKwfC$-URj#82|vAHiBf!k`Y2; z2_w`IK#4L^T(4)b!WHn=&6Z6dl6p=A$p4=NLxdg+-h-qN$EcTstWc4{Fd*a_kohc> z&v4xg>mi)_E&-s2syV&2(=iu`XbK$OC=DKhWx&9;G=b&vvR2tP25>s*h$DJN$Chgp z^B{(p6l2@rZ~zbJqZU8|megPNY4x@11}d6!>R<&5iXa#Ebcx?8AJV6D(;&`Li5#G* zGc5yJSJfFbp^J+ubG19$uCph;FfCt?#OacBA-uIXD0tj7lziUnY=&v~LBNv_F$$d7 zRD2r6&~^;4#Z~k_O>k>>eW~}cU(XCH5kvM#L?L;tAV)PzT(_tD*Qb}C3QBPll@lx` zy-UaJuJSUJew~-762)}>=FO`T!|!Z&-Og^$B$Aax9cq!i&MOE0u+~=VW}drXnuY19 z7^mL&!XNRoD12rQ3xcEYj`4;?IN^e0n-BAARm%vu&KKy z?05k^PB`J1P@sWZ=Z?GEB^QHY!~P+WgYT|}d7qi7QNqZXP>_!$nPdv`c^^6XN|A<2 zt<@eYs`H-}qVuor>=!x#`D0SS|D>SCch7#Q5FYpB|NZ?xNTMLd&bqB5HxWf&W)8|l zQGc?MdX21^(qMOsnSAJAI`g(rUl^Vtjbwv}KTY!>tN2*d7ff}d?^Ket@9wrW@LP|g zXaB7inulFXjvr4B^P}>R0ui$z{Ft->97Y)Hu0Av+#cZe&|1fzl{BBNHiqeb?wq=P! zJ1$oO<`FYm(fH$7Kw+7U95kCBQ=>IrH=tu#McV1eiHNx?xVrz$+Vft8CU4rw}z51{Zq;1!{2w=|X=l znLMF@Wd6qe&EJTxOUriooT_uj(h(cQ+RbXii!5{nnlmCAqh~X=qwvBTD~kUFkYH#X zxz13TO1no4gmV+~LvvqBwI}bM{?4f*bToh-HdQ+)y4zp_!X)7Adl&vn)DG@T&sojJ zpmX$NO+ChHyY<28PsI?`SITiLt)$6f2sRsj#bP0XSkU2`Sjgn4eUM_t8%(i%MLMPG zG4cjA(Tt9?^|47y4M^TAz-?x;LyX`HpB(G<+C>@~3VjG9{Yn@Q*`S^}WBex}rDmDG zx#>1HHP_MD)ulL-KNQ*%=u?`0(*Ex5w(EEH%{wMXZ`SlSiU50U4WlW?&(olc-CQSX za6ug+nKk{@qX;)^pv}wHES)OYYb^nhyEL>yB8YU7aB>%CVOH3S#)RK%ggZ<#idUPL zcl*A(qvoqKQS1%Si829RHS7?d*41SriZow5s$4(Ig`9Bqv$LPMC-0qp&e21=psT!! z)75~a;>5H(X6Wyo#E<^|UQ7Ledccf|ZgCe5UTV?iPqF-1W9u{S;@=RP2#A~@^+jG# z2Aj7;f9RIGef<_Oi+?MwqY+2;sn7>yIM?RbT+g(wkZ+Jxs^iw*OH4fukN){og!goWAn@%WJ$EsWmM%)WXd}BfDo@V~4RprbmMVz1e)n1N_=gUbs z(0w=L@!E}L8Q)1{1s0`CO1(|M00v#>X|8VMH$}DwgYk(71zub1PZm-Wpw!$Z z_fMqjO^`!X^&}-&d3HrzHvsxmH6RC`b}v#{Mube}X}bdsQ#887G9?y?lt!Qc zUOP$ASj3`ej|P;zhA&cN>ideC!@O42|1u~94p`r#J1Hpoe^H7L3gKBp3hY;w;fUYc zq73o69<$FoMoBf)0sYduYeR67-5d%c@_2_RKs6K@5wHoOhCoOSGSs|xRR;+2S>ln? z>M9F!QHh?jHqNK(o$_+s2BKEvMl{E!c*?j z)7C(O4xa0q@+|r-=TKP*1c$W3@hRRQ9cn35`zt@Ud))B}aIsJguN@yIFz6KBXSluj zbZRM8q)gS>cU?f$j#5Af3SI-BSH!R@6e@{-6%nQJhyMqT6Ks6UBl3qh*MR|^@>BLY zMkJpfI_={61ua$Rg%!yuy1p9Bhc^DXa`}q8EWA`vbGRoKF3^n31>g0VFfd{H;?CYz z7v4g7yzm(S!>Z-~I6(~E1N2sNi(X<~HX5&?71Q8t3w#VQ>LE|!Sp}OU5)hJXB;scD zIcLP{`odYGU4}!t4DzEv$NgV;-&ju@FktJ*Uvcg4MS2>T zL}=-BqJqr6F_qiSYroL#HZy|iXu@A{|80=C#!~C1Cpz_vsSS*`zv@elQa{=6(E9iJ zogyNGj1t$mVVg$HQ{Bgnn`V2mpwEDll@|@2@_aVw8tv1sM69#6HiDtx9$bY4&R`0RgPeX0mQSsG-L1UH z8UFURTWz)P{NbSFi$=SD_*G|`V>K~@zxyLixIv%S)O9_{D9AanF5M3rImWe4zrD95 z7JH(mvtID*n?yq*uJ#fh^vwDo9F$@%rLlGcSH%p-TUl~KZyC+C67dz$+z;qU;Y|t5 z>d8B&-v{J`+!>j;mVj9csN}uVpTN@kz0)7_mhUCV1dOuWsgc*qih6tu!DA!n?9Q=X zb-fRGw4G4*>HN205OrO zOM(wXL$h8kRZa?#A`}bP+~pf;w?Mn<*;|r#{u?ml& zonZ=xv_Il|As8aS?$Ge?MYbGQu%(aeL{r`eNZD#Z2=dKVTWs`DaV0@b6w?Ns0w*?N zLc&-3@H!2&fdCap&%$`GAe3P5?V|~!$7VFq_WIM$xu;b=KQoBw5Xw)LsGygJ4jQ-k z)^X`((HyWnzUxGFCi?OOlnT}Jl6>nOQ=LBhwKjR37&VN7^g(@S?bWR{4a&$*v?@b- zZ+25nDxy!c$5*j`K*@v#7r&PC8~~bOWQHK=bP6`URCOC0guD4%2RJ=lqq|fplCuxZ z+|%EjGkqrqEeIdc#`cx%FhC%cmBs)|-Px{sAPyN@QockZI^`kO?d+L!8R!~v=0wv4sto+PMd{Y_ zSrr6}DQaw5w|*;|9Auj)4;8)12ZKfUF6)n21cM?Bm`C<6G=#9+sx>@9T&}HqvVTtt z1)q383`WSuKRWxhQ&#;dvJc+K?!mU(-_lbEO4N!5hhFB1hF_3M-#L4m1EFaG0m^Jn z$Cdl8w@>%eS(6%OIpi(*`JQrr&2~Qh>2JHsSJ?PyZ3tIElK(AXaO|)G?TI6MpNx^a zuC>?RQgj|n6Rg_(2}cMFkygUtjxK}W!c@>4)o(dJ7E|ut-p#_^MQI+T9bDWNk$xCJvYmR##7DjKc-l)eIPlIjO*L0@(< zZ3LzuMJ0z8km1(2*H(qi663^VbA=9M7RB9YraE5-eYa=xcEuZRCvE`!5z8nNDqBg0 z=+Dl29B43CuL}yzXZ()I?b@naZv}>)U6b<2E%6i0YYx4IzIj&`I#-V^4VgwkiAVMeiCZwU(|9iH&)9@mW@uxJoeGBsv=G(==> zlt=vs(HS^0T4kJ8O>5W${z~eAgu|MRsUtCVd6>He4dNSG-cfKN_l442Q&`h3{@9@U z<&v#?a|XmV-nLV`i-a;#;qk7IGsjVV$nMdT?;*^7EQ={@k=PScN()Iv>W|>afbOCv z1UEG^k)1E8-;7L&e(@EB9(68~gsZiy`+!wXE#=pF9X5P0At0hH}U9wlY=URP{-^+Ect7Vz= z-Id&eF|a%s)b%*X=|y1{>$9w72TAp}O+qnAIzZWA&AQVNg z5^o5L;mUOhe71!mo;KqBqmA$1%Gk<;39tIN)tIK$5^4# zk8eB5jcowICWa)G=1q#K(eT8i$xdwy-~)yFMB7UeJW&PqO~hf!wuySTOlUGK<53u~ z;wEfaW4+`YV-YIGj~WMht!MqUoFze5*zzsEawv1J^VC~6*gRkJb=_>4)i0aPm&(gA zVN2MZ<2lP$NL)A_R2`{~y3J(cEW(^Mc)U}*uNgFSYGe#5yxrS#Tiq66OFL+l+wgr4 zIKc6&Av*hbeQ0&lOl?(ysnZPSr#^Ka9P3^g`s1q!i++J?!jC#JG`c4R z8$||zp8*@ z(K?c(e1Mc={6)OllDl#V@F;3(}y1*zx7SFtlZ0&mLLJ^Z>53 zV-Z&9N8809XdNoHc$ zc(m+A+^0=s@V3FvN7cEhls_3K=+OiNCZG2DB#S2y4tZ;CHaPpxtGRpoVGnQ(VqZ&#r0U!@M;B@vb#tJWCtNuJx)9f`uNc+Tp_H{lkDDpGx0=H7+a* zj>TcPves+n#0dZjmzBWT<$Hjb5=kk{u(@K3G~i&jv}L#DUeS~znOpDKpUKkiESO@6 z6j4aPT|G6+``F-X-_XZ)TP+Iin&P^%*7B-f%T>rY491@78L{mGh&?Yf3E2z@FzgC5 z?P@bKLxHPG_n_(PjCEH+A%>0D4M1>Qh8!f*p7qO$e7ki^k#9X?+lQu7=vK3hTnHI5 zDB}3cyJ?7_N;bd&NhY=ILW$UvcS>2vi(rt!KLIUQ#aCC(%`}*>)X1hoY5>^$1<8}O zv`Gf6=VgOzSKPoeRzAm*Am$KTl3OIO$W%-cq3mIFFo$01vGGQ0kwc9oKcK9yfaE9# zbk8SR!8CTsC{d6TA@ggQp$o))CxX!@=)`>eo#z+7cW2;8tf?cVk^EIyLKjE^*Pe{*zm(H7vAhk&xs})nEBOWSphvX zJWCKiruw;a|0)CP%ajweU!(vP4ST4u<$6~|$8XV0u1A?(KABis57Oq>iFx&cSYIk3 z+!2?qE$dzEey~+**Q% zCDOiHA_YTB>1F7D1r!VfS7QT+D&%`lK0NzCiJT4fP;IFJFUSkEc=UHRm2^s>2t_?p zd}wdtlU9hE*#4RMj39Gn+c8Tb9b@;X_`>_>&owQASN#PaDo#bxEcx|YFS|S2U4zK4 zr`2P$*P_h2R8=%a7R%&0n$7YW{LV0Zgb2OMI0Y$Fp-?O=BTk~)#f9|SKN8ePSp&*f zt1mQDB$_U5(+kn9?X~Xl{o5E`ASb_u5;R9TjHEa&r(x_qg3pWIf0zLO4cY&~*t_Ib z9!Pn7Qy^r3Z42C#EVDbjvU?~j1^gurt$lwP*Vy&wbO2lUJEBrXCIB}RT}Yo8i{!Dt zBXc@Fl;Tw26Jl|a1$Ty@0j(byy=a#5o|Iug%tKv9?u0*}gew=J-#HAHhC|arJWLF5 zDCJ{byDT&9ps_hyx?`VF%d{7?Wol4FCG&OWC5gck!!ZCm93GqghSZTw$<2wkWqOG1 zW=8AZX=TsGH3RGGue(=OFm=J~Toa_L?&eh!7BY1VDl}@^vA3&7tMfIjWgAg2NQxdW zG_x=miZ8FGbG2~Vb^AS&B+S%7K#CWPfaj5VZUJmir?Xs1S?;2BE+m(MO?RSM$L;Gj zy$-gLVDDSGkh@XTI3h#lLwDZ|am`R!U@3_V8FOebwfT}j9TJ9-9vUMbhmZfj%(!f* zaOpsM;{wt5mt12y;EG+!jA{8co=IZg76d^7()>v>B{133Gnr6QAUfGZmtKDEX#iY5&HRSmZ54gv?TAG%Q zt;?`qLhR4a$DvJg~pC4!yM|7E+DyD6o7ESInO?V!C+O-PN1aKYl|! zi1@(i(3+F3j3GnzrK3HT@;+0oU=)Ny(da2v!&qZ6O93cC|59h?Ki5I|d#9hB{UR7E z`K7}+ge8>K=z)u!suOAx+6Y#5NY*h4QnJwcL3zFieFQZThH-FWoGVOt6PvD|DAEmD z*#Yc^l2-2`YD`tt8Y)2A$D@blAXKE}J2v85aUur{FpgPb77T84*CruQ$QqM3hS~2t zOw{W_$a+3)Kh`K-PsAJ`wbnu;e(D!i+@(v;`~TAr9*ls*fdvhLZr=vu!(l|_=13=s z7<7eLd`&p&HG1Iqrk7T<_s^ld_|BBeES(obBwGgONoWjEV9y+Cj)F-%g7mmvq7IZv zyhM$QW*Xz$gu5)a)(Wf1(Eu38iOo=G6uW^Q5U?V)7+zaE16>G)o{1H6OuVYB;lNR6 zSd3-a$rpqttO8PU8s`NR(1y|-DorB{2aQhv(7O+mgHa}2x~h~hCk$Wb0#|M?bw^q~ zx78-5H<*t|f5AxO2{Z|rRQf|*3|zK)Zs9{O!Ax6juhR~OiH-U>=S`$Dz-jM zmzWTy9!KRAot`>ms5%K2_@@%bsl^l9-%P)cjS6C=ecl+t7Jidy6|JyS%A=q)xw#>VY1q}(WGO$VNJN{4~gj-tcUB@_>u zAu5=4l!~OHOakM8lLrd@u^)T7F^o zP@l{)R~-u1HqZQ`gdWw*G$W!x&HkJrh44pd zsb0>sS6PQ#0IqNI*K}A1tL4eL2ETQdBp{jaecV5RWGSd{*Vc;9{7~G}e#)BVvZ7Ov?dcH{QfosRDdM z+~97CM^KAv9Xi0|#g}Xjxy{GK*~!TKWjCjU?zZdUh}(6ogZ)hw_6lLJ>YnV@eWgC$ za~pk@^@3}bQ*2_RsA&k~Gq*34b-7uko6TA0*Tq0ed!2-T_s_Enmy?ZmRrp4k^q}^f zLby!Go$o65fnwqkqW_)FyCOe$C{n{PdeRybN{sv?M=OHn!ax_+(mxh4WIj>tet211 z6V*Q-x}u8+VA2t`0)D8IBQzRuu#A_n%}v*({a04zi`eDJzDLH zU|&Q718D3Jlj}CJe4r6_ggLbFh1MWgp8LfbF9{#dN-iB>-oTF3h&ciqzu;oN^xA9g zRqfgXts#pt9x=azbWI$Z>GYuEnf3e|9F{>^L0)hVqIuCWDAEqMHMAubrU`>WRYF&W zSX!!@zI*YKq@&-rNzBhpZ4g+ZLsmAI+zN$S(xj02l;l$NKujfrY6kiw3Igl%Cb+e9 z)X+Phym$7~(_c9e3N`{T3_SD|dQj8uFA*WXfN9uXxP~D)YG45Ky0NwPHBeb;<8l@H z%hAv#vUj2?m?KRhK$bb$9u$V3?A>wgzRo-Ps*CaD!?Vwo%DcaJ;F?s{A0h(`V3zcN z))ET#ESB^U{WT53QNBD*X5(sNsMZ2z1k)g6Ue3t{^7)szC?>Oj0P^d1QkN-utEL}u z`g1k#`(A&)qtoEBF2F?61NM&3JPJd&_8(=9JZ>TpaM^|&&8_J&zP1|yK^xno31}E8 z;PaV6ET16r+S98JRMT;l#EpU>1^SqXxiE5z^4RtPl#^MLJ90EA}%QWyxUhe zk%*bWC>f8@X4jpJ#4PU>*BX?R{}y%Ph+fNEEg|Gdz?(Zc*B%Kmt1#irBNxwWK}@K^ z+d>OZa%_yxT{X_zp5lG3ME?*p0lXgkDo1B1{2NCY}QcbT{m z=d}x>fsMHLihHo4atk8xSDOwLG!}-5Qu5{ZsM*u2E5->#-|<5w-~LF{VfW=LHk`QTu3smJv2ce;rV=kg zM<|s$_%%a(TJ412){^r&*Xr;E@$T4~Im0mQqgAcP(p}fl$Bhl`&`>N(wX*2S$gx+_ zXhVot8nAZ@V*yST^;wVeGSh~Q_E+1J#y7W3eMr4~gPe#7dw$gT#ab!+EjE}28P6ih zXtE8gr%#sKDB4HfD>`3UO=oSt$g~od zLIl)Qdpsyjm))cwGv`+;o7J|I=qsZ>=lwZq@nWk|iG_1aiE`--YzLt{24W|K9T_)R z8$5yWhW%uiVI<2kzrirde1$^KN4#}pS&s)w+JVv!UuImJI!Sx4qispmDb$~T@8p91;7GN`mDzyc>mM3P1I)p&qQn+5*>bu@HL5Zu0Wnlijy(fM> z4}5v>ZN-<3v)mM^wuzxE{0%+3805x%5 zPM5*fPu@EF&Dqc7t6Tnyjs~+~0N<6!%n$ACQRueI`Pi$|B>*H8^SKT zCE?+gdqEmFIb{b1I=Y$EyzX667<<6M$P5pMDcdvrYiuVGbayyHaW$@)G9?)BLRv_t&7D!J!{6@kkerMi z-flYxgodX|mxC&yrX#PY;-Rk>4Ls~Z|n?LiK4EofXB8l_c$vY4q{r;pL4dgQ{`Ny?NK!oJ+dr+nED zboRvuG^!@6F7p+ZgR+<@L;F|kaP_ol|tOa>m}bmD%MO?-cp(`rHX9| zqoy*1n9BzltAuIA(qu@dAcRZO@(7y+WNzOGIsjrvne|7Lf(kK;``z&uZY?>IdT~9I zBn5U@qsWqs5%fFSxw*8L{@gNEhV$77m?-(7Zn3Ly4dc6uYX*-v^iMI30i?4sIWm-< z4eXWuA@nK?j9ihvDAz`NfOg^fK9@)&-VuMNFvUSV^0$&ch5ilsI@Y$e-(}7F7$yVd zvrNbCvFbynma~tb3QFizVm=S_h#DFwer#tPG5|(x%@OAo$ zF|>w>AV%y2PBIMnb#OjS$Awlc{tjdZGj7Jtqgv93cg{XI`?Y)W-q~9eIM_mMGUk8U zn}~RguRqgx0_aWXGXXozU$z4)rU8^A+qm^jXj$Fecl*0gi+niJ?$2Z~&$)@21AcSD zil(=>+w1JP{VhVAO5hY!uLp{Qm@jMDy$ykjTvqj%)EgZnKI<-By7a816jzxI3d!fl!IVe2j(vp0pO^6l5fA$z7IR>m!V!uhx^3EV>o z6+D`c-9&N;jy(NB;}jPu#7{JwEa@ssy98ho z!^|`S>1Z~~FvsMdkO~>CLES@$CNVBsk-K2hM1h7d!3h=&IvIfzso#rHz>HGp%)}6U zxgI>TlSa$(-wbq;7J>dcq=}0h=)STWX<8yX9+*5U4P3FXY=0l9wn))OZeS1<#cuVT zg{{6*R$N;KcL>~ySGekK+_EP(4PB~`K%dq80b@5R-6B(B%(}iQBs*euQ-`VKQZ3}G zE%#8b+nzIbU_4LNq;pd($MCGBC)qt5UXxsE`I0r41)`3#vl|U`MK->!Z0KEoO6H1W z6(tN1PJ2{Qy|lC zvYduPs(3poawbYY^Mwjnz~_NerYl$674}J(OmQb&xh>}132uk74WIUZ+|y70_oq|; z-M^7FybEZhfiE%6L;ak-C!cTv*&QTDLuhfi}bGt_$t=tdG)5EPQNLKBlvCIRg|B?3*soM7WJ zs>IqZo|saHHr_5gtyr&B%jx~ED6D(*#%o`pbiow6RFm{cpl2QXL}Vf;C^|}NGQtL; zf+6=Ppb$r_J|hxwvJ+EQJZ>Dz;-zWEORs(9 zt4=}pU9t%6fP~MPBe^a)@1KRq%o0*|q7uxC!+G-lsn3i)^RXXD)bhoE^D4df;s zDIWSKu;l_UPTm`%lntQw=Uwuyg z=j@4=Ipax{KyoNBzH#kgiGwMrS)P5iBy0l3Sf(kD7rN2zCJdxnU4Uei%(Saj0#^_j z{~7e8B3LN(VbeUxRVw$`FDR(;2hc(6kF6*)6X#K50}I-u&*fF5U<*5V33;8&K^zj~ z-bME<1lQ+OYvZ<=Z4hAmqDZ2&Ao9n&Qu59M8|ndKqRq(iNRjX|{_xb`uDNj@i3CI1Q^UOl$Rlo+ZMxlo|#r2GT()(LFH zk!t=CM?4M$xO3xq2t`6XVo7{!V2PVgO-i9A>#WItu!s7j*At->3UJo}E#7id?Lq;N zHPWoopETChInorcq=7l_wLkGv(XNjgBfEuyb{ow;;EYXD<@Qx`DZi-$GcL(HU1t>i>9Z18a8 zOeOHR(rL*XZ|Y|qrD5#kvon?K8^{xXU(x^w4uXl`2d6{bugB3MWT?adW2hk>N`6;O zb6s=abWBdoMU)&!U$;pcQYKcvkZVP)hfHA>zy$o*lIcOF*sFGnlFYZRQ%|JTbz9r_ z4K8UzD}ZMPcI@saRBpeEin1f4_j0C+UKlQf7xf3Qlw>>Egn4LP85kQclrIo5|eK=;r8s z7H*^^-yAI4riZxdgQ29YZMq?t^H!9NlL2bHSXU2JKYvT}bKsS6$8xyHt%o!N2%4k{ zDv_fEA6&}8wN4w-JKMxP7rrz#aIC+tpZxwGM9KQ!bp1m9whH`b79_x2NiqSv$>xqb zX>EQ%Zx`|y2**EkF`bx=k{_Ru?`}`_Y|OPSeX((s#E&t zStbhDmt{A<&{1VR57+#U7^Yq#)GjF&sOPQ4);XCopOJ;}Kiy0JlYC?T$Y&zPeM7WY z#P93s4Nk<^wpexhoNshoJdxQLdqpohG58{`l&k8%ZEO;$Z0OMY{FVpQTKPLcs=UtD z`ar=zBL=)uSjlmvjeXh&gvhkXzQFR;FxO90k}QyPfHw zwr8IfMk)mTfNI3t2&yJGRn^4EEi%6fe~}I(3Nub60a~?pkBvKwhRKq!=ez-D%n8UH zs($B{Ab>VZ{UK`SA2n><%4J*)@A!a$6$t98au7Li(yVPtN5ecBRHKw8ho`=IDcJ2fB^~M$jx{bkO2O!(v z7PFeWWTL?g2VPcB^~26Z?rDRqj)o;Z#3V^SXZldHD037sLlN1xib*4c+k(?*6pU1v zJ@MVidc63IiYbt8WaZlyqDPZCkYHp;nhPt>xs{8r+FZ^~kSq;a);%&~bctHbMk8G& z>I6xvpqJkVPI6*EG*yEfD!dTN7Ndo;UqgTP-Lp^0KBE*1RXtw%PyTUV{0ED_NucET z45+L6jeo+q^tmAPV$EWNBxDB^^KQ4s_Hk6fm1fK-ngzue{Z3IB=@d%Jy8*V^3P`<<0XD%)+vc9q!NAe7Tv;s*xXlO zpXai*Hla%2X>cKb5UBUoVbHE_9PXXG3br7b)vpk(AIIpOO7lKnZans8}zMXhl7SDH9`ktBzq z88owJ+-yGNOy_14J_yrYpC3MsbleA7_C%lMV#ivala$VM;+fl>ZHU4NLkqYD){@<4 z@6V=ut-TFB4}GLpc+L@-Fp_^?xab~SvgE9?I;%|&1c@!ah$K5bDHLpc)!n+SNt&X& zC~kKmx}$T;(;n4&Wvp`D&t0UC+8hYGS4E+Us+N$Bo?qt!9BnVUMLQv!^?(9#8X{dKX3SJ8JX zKdkx)`ZHFn&E}jgqSv3e)(J~XCSj3gjjH~B<(eX?Q^Teh+M-f_U6NVzMwX^*+S_R9 z;e$=8%Ky4ZmJT|?x<+Xo@<--LWS9+fg6|W;J!N@7isv^U2boS z@PAC3d(AkuU2AJ6V6saSuQ90{zVN=r%c5z58Lla>Oz4$#>QFvSAb`m$*57sO`}bOV z9kRHyplrX}XC@!h6^HcdohZ2Z_jX^*y80}i>9I;v&L%;6wuFJ(Ps$oKj56t$Mo-S3+>tW?m&cH5!GkE^cn6S ze06{7Kd5O9^P;n#DRX?zhIy*}zAkF}^^WfSyD;a8gYYipqOxWR?B7W`S~4y_LW<{0 zhsd-ukIN;?hYGj6Rw+tK9D_V05>Xf3$|d%>XoF<|##cq`Yuy+875Vlr%b4j7Cc|7A z+mw3Uk>*!l?N@ysH5V9o%ud(Wo|p8gepItR=XcUbi259_OeL|J%l?`xU9-~TkaNk1 zpe*vr7EX_QOu5nY!j$;kv!9DS)W1q23?hA>t3r@u^iMu?XFnkQ@5zru`#YUAdLEU0 z0I-2ncSF$2R7}7oRL9Wa^5rm@v_w+&Wqza&)q2_PN(k}67 z|6eoX2US;mbc_{Yz$&Qx#s3aK%%A1|Y05Soni)dLjx0jAzb3h80baOx(YkC$ffygM zv5;!6!oX9Xy^Qn=+yZml$&Z7eav>Ozm5c7pXH73Kni?RT$!SF8Bo$^Mdn}Kav)T^X zLb+1@s$8pQ$fgF6)!fK$L_T5O$2$<`G@hL{5-u}m1~tSM1jfB|EJ6bc{{r@WZ8Cu` zh$|ynQzbZ5Q$yN5<^ERZhC(Og(1CigQ`#-a!iJ*eMBycf*QvmUh65eDP9yoLD@tDj zqiq~y;{G>t@7mtTb)AX+l^xr0cS~}+?`p}Jct8Lop(aQ+0Ft_Olmbuys#&Ols!$}+ zit7i=L-R{jb^YyVlx;RuboOoH*^RhM^1VL2Z-BSIe{bBN& zM7r@{zH#lE_E{R0V9v)tWBHnx-!u4CwrXImx-CP`e_g;p4Yxv=!XERL^b2LY)tB2#so)bQOXlyCk* zs<}MrO1jwFFZwERU(;Lm;n!?ad2GL|llX9-2UL7?d~M zZx7soG)_k`M%0?6gzrks;hEQr`nT^t=Co#wE9vBqUa|k)N=`zjHS-i#2`Pwm(t$a9sP!Kklo)fmQIFZ}`a9%amXZ4x1%lvf;(uO+sW}IZ765x}Zsg zL0L}mR%fRrA#-?`fG4gIXR^Rp*o-wH)^`QFZQpsR(!T(!AeGC%)!uFQTw|dBDL#`d zaD9RFCtH4nP}54nc=5u7HETzbO5vL|ec@=;U_bN$YJ%!Wmx=BrKG z2aCOqf|tJrHNjYCzf&s+=sz~-Te?+9o^2mp=v)I|AhNZVE*Zd|O@~K`Z{B=&n*@Wu z*c>`gO`~W7`1OvEk0g}WnuL}_2l}&a&ONNH+O9Sr7{1z88<`i}o`eeaHI6~}@B6|l z>j|&t6-M7gk^wN(`eP`g8%ZpiOFl$mS@J*1zZ1=0p<~ zekmmohnKM#Oh@iCKh`8cU*V|(QK-0Wzgz^-)xwe-@DhU8VXA*7H$%nT%@eaGGDCZ< z+=u=fuEZcw_xnrk@}=k16##^(Kw?)Rm#>ljNI|U1MB!341(L7#&p?pXi=- z!s-BHp-WogD8zch-8F~f13fUmQbTEh(=jRCnLR13kmkJO^6}IJ{Y@J(>PYj*Z5j|I zenuln_5cpG{m9tmxONk!jL`NKx6X`AeK(wi1mT4do$l(3o44%6bqx~srH;hyLP+Pd z&(FospYDdG#!(!&{eGPnCAzv3aUW!XvWI8m_jS(Nen!W<+Tdo)wNSco!$7h-W?)1R z>zb?~a-U)Yw!vYCir$x6T615~6sTlQ*vjVBn8}GnS$o&DI*nabQac;HJ+jB?5%5b~ zgAAlx9f}^sy4Aw7Oac20XORD%K_NG<$-2&d8=lK(jmlI($+~(+1=ANqJ(_7TI^vnL zlB4aKP^IA4?+Wfq;;uXsejstT|LQcgm&HpFUV_6#4~S>gN@y$=bW#j-RU|(_OpsY2 zzxp+szXAo2Mro~P(H!VV-zl0SD6tc&P`OiFeTqJAko~LUTtfb%Rdl=3`v4;2X^)zu zCbx(kLmA>9hHB*R@`auBzD`j=Zr>M^r<64=t*lhzVVjI@RZ<#dD`(+jPLi@(Cy+OM#gm%2VvI5| zG;dQ%)JL-<9SfXao+k2fR1+d>?hpr=EED<8iYe{7d%Jr_c#?bm8~F{OzYJvIA3352 z91^A)%pm7%j@WK|OQ`-~r{wEAJKKGUPz~MCAb_K7M^CfHp>i=c3T-9M|L5Zm-1+}v z1MS<2(>M;r$1YuMXK@Aoqu zI*CALQjIi}gpN!r0f%~u40Zj2dYA{EI`Nlsz2I8QaDY=!U{jQEl#Xr8JA(_281!N? z3d#F>{)?bhXQ?~YIfImSRS~cg%=H5I*6(r6vY$_uP(|{0{_G8ngUJ$rO0k&s`;v)! z7%{j{1o8Qmm9u>G?1}>YTLx3b1@SBSY2_2)Q5y%&7mV7uWcjK#2)+>BL9tAA|cR`NAGsb0) zqMSE9KL6gAe}!7))5!ULrHHI>NgFP2mX-G$;;~Ov!c@LIF%F6*H1)3 zQ?atP435Gv)bf$QLWP(!GW5(iR6!{ZJzS-{D1W)vuo%?J1X1^H+jnjRs<+MQwmNjsvtSxHWJzW{ z6?mDw+8d~$5$66TwhLLxz5=TB=kK^I1U+ccgSndDd~7oSEE712ZB7GFYnUVzUOQIV zS@(@x>%iYYsM`rgt`9lHyo%#Q^xs zt96Gz(xLSsf`gJ_X1QZvVjR+?<%9nJ&r@If{4hp}vRGhDlyjC`QbDMMki-xM?fZS& z=NZF!%DhYq6>Q4p#OPWy3O`x~%I z2hP@qTLEt$)>TLaix*cAfB zUJq$st2_Q;Zpr+G+enswMgSZA&K0dTzuw~)^qv03~`yH)tO)jzO?zF`|_{k zs;fjT4>%}%BqfM#Lp>}+zw>Ra$i}dD)>CXcgL<*jyY5f4(#ncvKA-z4W@MwN{$LOO z-7UgPC$;ZvOS%*Zk`shgml2}bLZ{&$ybl5vm}E15u|qoBy@a(zrbt+fG&ssv`k21D zAlQeQKpSBmNEe#fbpFo8JCEPTuNUvb4g6gW{QZUf1Vs0bFMfFO z1N^F7r$rhirO@m8zKAqpHx|GY1}336E;E$nRxz~?U3-T`%(G&l6p@_7>vYexds48F zb>Rz^9iffShkWku(`|U51_6h`z3@mZv|sWM>oI+mlA)p2W4Fs+i=1sPx!x zG>u3Gekc0CopRe=SuXuwsF+vv5T*3Vm_kZhnZ_D57(2^P9J*u6(5yzn7|+Rzmfmdi z_d*#4pvD{NXrWy2MXoP=MZgbOKYGxmW=qqUeqF5%o9f2gw8s@Xu0XzCLE1p*YHY%) zeOwNGy{k1E410Ox z(m{|zp5-dUU$K-4mSym4A#Qm6hP!=@D_BY8^W5s8K={@TSpp1T>-f@3FUg?l+AT(( z3aNS?ovE{b!=&WC65^HZv>azC$&y9#R8qWY#)#~VLadT}5iwJPq`qm{*0MNd^mV+{ zu~)9O_H#Ct6W0a$hDa$@859vAD`KiS2K0;(P^_2=U<6tuX);5V%Ymub^)qamnT zVmpU?OK5O;2M*};WIV1sqZdaS$mI360yE3x%5jFxGGs-3>da+0FwU;sv8WUdt7ru@ z4>uM2u-fNh3TU*prr+A9BFqr%=ZBo-EJI|dFJcPuD1O=()qlYg;CcV*>6#@*a*M64 zGzp={@P)N@hFNaTl!ha-?R)iW-!iAL!q;|Lz=3860S|j6DQ6a8JA!u*9-S-SaNi=o zhk&0p!3D~!B}Xo$QcgE^e8YFI&Iu=RV6Gsx{~3J0Xa0RtW^{n4=3c*!^UO>tp{d_> zi0hiBTMQXxw)=V&jq81sgp$Bi?6V9~u^%p*c|Z8G_!mM$5bC(_%RU6Z>{mqJ3a1;^ zcr7HG`6PL&tj#XiiT+{M1u=j}hYTeyKC)@e(wEYqRcD+e8G}VMP88_efeb{?Uh%L# z)@vu@A4wz{seS1-Og}9KymA6`H1qs8iQNmlV}n!mTE2GeS$FfM+H3mG2NMEu0?cf8 zA6Lpr^X1Z43UJ>mMYXDRj+4xCidryk%1n0(1&FTv(6O+G`JpXu6*qZ zldqNXvwcf@l9=Pqyecq|k=kT$cVJ`d0~ihTL_ymreOJPVvxoOr8;QKsaGGd8Xm>#& z9JF;)TlwuK3Hc@;IEgv2{I3XsZn=nv@)M|?q-}#w#KrGmF!eDfXHSW4>$YGncSK_U zoETkim^Jsd6fF12e(i~4sz1nu$a~-#eU>ZIV)&w2Oa{kpr2b54&W8z#dg+kTz^ZXY zMYd0($k?d{WS+XwGG%e{O|^6Uxz;9`5_Og#XH!S>elM~az1hykD&|xmMkQ@yS1xqe zRH=pZ!W@izS^AEZC3`zMO)83Yr;mm%ucm{^mucp$p#&FFk*}_T86P)Fe*P0kn6iCcXW>u@`?b=d zYYVl%&@t99ji|^1$M;1glBZGVd!TPCf+Zm)>}rQqPKj2;vNd=5t}j#Wsrkm^z?jg_ z(9*qkqLs0IC&=W8i}^U{@IN*`=-h7{{3{)48-{S+4F1nCE;ejvY@Tg+MlLJEva9xI zL6)~qNsG0E-6#_VJu$3WLhiSn%)+nH2iCEa;OHsaAufbcGm2TRunnKaVF*TRA?*XB zlVluJ3`yoI74{bkNmB?MT3^)Z!a9FnI4pBfKQSC-F$+|@X;f-C+tG|L!<9tiZfP3$ z946v~Y?UdxfWVbzpy`L5vWT!NN?{X~lJ}?uTi;imO1QFa|JQ18g9wUu^iIrzBc#ME zXfGni^v|^ZVb%k_Z3j;l+YDP%92{eW+3lA{@ulIpG=6*2{y+!Bm3c)t4WS1&%Pyi((n^9E{bSf z10ooWeNjTW;!?e&O80t|ECb2*)8I`>j}#Na$G*=s@2$(1{)1`|8L#wnN5|$*)#W;? zLo@vkDPl_IV#A~MHrxyC=D_TzD`(LV@d|)Kng+BzbE7pGDm2*arg+{;wz6igdUX+?K2-Sp5WXREo%;nzqkM&zxDEs06DU2+_0 z4G|udnaj)=(0%g$koHg)P^UxOR+* zly%v5<7%{CcKLEP5-I()>%x1Xk@Ud)qHnsJ&kA^gdS90!{iv&WtxD2$h?$dqAZ#I{ zREXIO=~QcG!B;Gw`<9F$1xXo6WO;_Y!b+eV4m>K^0*bTO2C6%ij73iDMS*x1)$eW^Lm2(W-6Uz|*qQEhSbGHaz= zNHXKxBz#hm`p11a(_OcTx`Jm_EGb)DgJPKt79WSChc)BiHLX1R9)JDPDh#^i z>`(w8Mka}T#KE>-r5o&aK|@-@yUk{RvB6f!)&CN(wN;%g+KbhWkUPL$L1d``()lt} zEXW?hT^e+R5(qODCzU?9QE&-WHI=VN{duMYPxxU+a~i$(ac!s3=o^<+V?=R0`HMj zM>Yt;kz4@cIw7omCaMOw40rZgs;nE=S?3FKdV)L15`o<=ws}Mv%J1{{5rzavp*j)P z#nz^)Ue?8U5*l7EaB3w>n~(Va*3K{#C4&+gA=@#I>&b)v{y%pYpN2%oKcMPNLLI&k zLCSR_9os!dqp()o?)&ScMB5h57W2wS%M=-9X$VLsO6&1!5!E5C+ZBc0Q_<|6e*!!<3~*LYGG)wM1Dtj1_APU8@f~&)<|~8kUc1rKZLU8LHm3XH zE3X&H_pA_2E(4vze`r90(hT?qXwA~ncNE{d_?=2>!800DqZJE@;$ek~8O(?8zWTLi zNXEl=18sqm!TY`b;NZ|5z4+40>NUDb(V0tE1A^r>2Cy=}<2gAepA&_bFD{!bD$V4k z>kbM=|Kocu9!JX&9A(di>VtVqTPNP`I=-4P$;|jlb z4ToebS5vX-j`&4LGY=iT!&0%}Ug#vDLY5d+ZZ4ZpY5$OuEBwee-SgzV)B+1YtZ(b9 zcOQRo@x}Rj{sH=2rCx^YlxAJxA6|bGrWR_Zgq}s{_5BVh4u3c|blSBn?1hybp!Y?= zfF*M(D9RwARZs3!9gq4woq-9D+pl|4oGK(lDt6d#jfU2HQo*iNQXlD%%d%2e>S_6U zWh$ruJ8aewu?P$*jK;G|6dkYBRZg-(v@(FYOA0fCV(?;Q#GeYH-Qch7S6gCa*&Tmp zgSpaTVNB@lkdIngf=FRf{3HvnQagl*_y=l`jFj9%3!A?wq!lT9N;;YAE|?4(7aU6g(ecbY~~j7*zG7uI_G2EZP)Y7WLuQa{16{QikuTPc@}VTHGC$i?b4lh;XLX02Tg<@a zSKOa*J;3~Fs*h&SjV8yk7$M$4*(^h$10!4d-x8{N%6UhDv&Fs=;gluA)}>rW-H{MbQtWyx?uLzC6LA>QE^M#hRv=M4>t@!dn4FTE zn=}?pjrYR&&^zkm*@6f>cHrBu*>KXbR2JaO&9rx)LBJcC|5fC7;Q7j;%p9`fEh--K z!xQZ*GzNn|pA0%dw8t!<&t$duGcUaJ5*FgDSXB8{hs%HU=8kk$CK@6_=4 zBj=)EJ^6Z-00f6otKE6uo@t`N`TM?Z)b;JlWJF(71{ds=7TGx=Lo>B3wowSmi7K>e z_DuQO7EP{TX<{#69(71@PJ)eTF?JKRm&y#L4H7lp71HYPzmm@=2h zzSnki8YOCN-ohNbUzNr)K=}4l0}1@cPe#OBV)JgBAfiK{;C!@NifpkoHEc*qg25*C z@7fh?$*u`JEj%7o;X-efPbBcsZY4d|^wIYZPkvm5qJV?bxi#ypy{4l+P~;9jxcE#6 z^Y5^|-Q99~ERk;eD)!EG(i*<}>&JhGKl4+T`~XN&+Nn_j zmT7AC;(jf>XS2|8qOjsHbc=30*D6)a`bxt@ea}*51{0=A3r|wDruF-0FgLTIOV?Rl(Opu}o`d-*AfOxIbQwrRw#yjTW}{Ec;eJ zJJwg!v7xFRn0wRdY^^42xg>ODc`yj}U7m))_zHDWdqhpGRt?M_=qkYuZqwfJ!S4-Uad;RmLlBG+l!>e-Ej9TSpi%S1yIb^X{7SFhc7L z2^m5(8{F8X`t_~onm+l;19$oBM5k9_8y`~#5=gIbxq-oub_~nY9Nv94_H!4Y{_bg- z5Gvy<4gru?U;Ww@b^10fUazt1j3l+vwh>Hj6Y|W#c2anwWlTA2SHXn6jd0r671lw% zN;Ow%%0kWCFZo-eE+x?v3Pkx(Fd9(t^Z8qk-?hMAVTLmdPQJg4*++SPTuaV;Ju;MB z7(7x{xvU|8*;aab8xudb$+*_f3hK7x*0t{B@J@gekNv?+-41;2!^iPMf1+|F)aULXy*c zGgXW0Mj+iySBfMv)^BS5<-4%^wOaX*Dn%&@giAKg7iI9i$d(}LadNS;m}2qZTFj(* z0>fjfN7uD$H?Fxm*VIfg!6@4htB8K38Xk83KAgB{nIJ7%=SA_Fc-`-PC;8-IH5zC0 z;o>ZMRHVnt({j4{$N!7_*Zd_tM#`|*d?oUW$%JB~Byjr0r1qz^ToD{%E~a^MR(r~K z+x@<4Z0SG{Ij_r7`NNcd4G`qCu~KCdA`jS1ece6v2mFUQG_TYa@xKtyERiNs;NB2= ze#5al+i;D+fL}XLeQFE`1SgdLOOybr&d~rFxsVRWcIQ=sq>mR1xD^K_+qtr_H4QCRF z-F?eY^zHTBM*I7T0=ar7Z=-BAvHVC?oZ#d5PpTZgJy(~;0w53dE#4GDDUsY~88o{B z8a<4Qtu!Bs9o<#oL^2u?@@UerN4ZK$g8$DgVXBh#CAO!&xHXx=p-Xa!%-;kq zT3NpWJQwY+)FWC#OFhu=^+m56&|F^21T+0QBwIXOZM07+z{(^nocx7yJ_nx4?c(~g zvOE3LCAJ*hIMwZ#2CZPzR4OnrtpboihJ?Yi!Ac8$8Ob~(vQ=xJeJeH~t@I0bQS-{= zNPY9wSKSp_b@=i}2g`8nS8~SdszG=ijgXAU@n0o#tIsx1-r2#fniRFMZKxHYDk$b5 zzmSg-NIpf4g8QvkxHHMb|JjK!rY(>T$VYi>UL_6T5gBe(70NmsMGNx*jzg_R8EF{Y z<57{`ctUl!SOC@5VyVBFKo)M_ayM^SsL}%5hQJ&f2AZ6bItU8MbBLx=R*Wy>Ee0Yn zMsz9h$~AzxS%6Gan5Rd~WzpBQhI!vO$f#vz8ijZAqaXhGDW=6Kbw%glno3|XJd9)G(i|~oGNN{4IRMdqRIWkPbc{59f`j-j#axi@Z z6XfgHxy9|_>VX?(I7nU%mm1nghW>Brp|yw%Gkel}dlhD2=N~-&?ZwYvm;Qb2IA`p+ zEyGJWXLvQwIYVQHqpqJ+g&O!EAjw5M>{ctu&U2B4~ocvjy&^MwiN>PO`RvLr^V{< z^3|uldqqrN{k{tE^q$TL&p&?rj^rh7#8I_O{9YM5A|EEd_4N-1u41(|wmf$%fdGZMaHk zj7_?dHPwW_>4Nia&xyP3h}tK4GXou1A8}2+NDrnL3HgG)ca;uq{#|_Uj9>}wf|mE4n{2ml3&vjs?qJA+k0WC{z}-S2<&H{OPlN!0qE`2o z8}9BMEp2r!v2SArylgZTs|s|{uFEx-9im;rJ*ag9xVs50j6TI{JPcnm!WUI*+QyE) z2*CqA*V8&SAql@6x!fRPV7!KU?+KWKIU?zw0}NPOTMqHa~@3jPL9yi2N- z&KHhQjQvcyX03#s%C*q&YnZKPbmrGjnauP5GlAP8_4S`e^GqU5fQlFu-1p!MSxdFaWYu!&YzVck`UKLK zL5NL=c|H!7v{4!SXhYCe1CzwePOdo4 zM;bg66}23disCiP*rtjHeO;nKMBRq#57baJJ`n;2Dw?ILY*k8|$uk|BjSW;lkuWYCiKI+{=Jxap;ooc$F&ifl2U;0IM#|<3EF6M8oSxj;N;P2gpzzLU3SP+ zU(Z#K&!|L|3x2=S*^_wX^qiKG48HXHL&VEFxAqbjHU&3Rfh6xQ|#L7%0=ZqoDx?{uE-=v<<#@ z_GFNWuKjuj)nsL;vVREE7K-g=z)_+ONCpp$RkLnx?`lxpvC{+6$c6uFWD(-up6XUBE+ z`<=exy)ZXmgTVGYwregfj8Fcb(^ZKM0Y|Q0heoL!Ik>0%DOWOV;rsz{rab#pc}-I5 z<5zd_u^|ny36f3_USOtFg(#@4bv{W>T&)XROW>jHS}yoGf)gO)t^G>G{x<}79lNbK zAID`fYK*X#G*KB>#g4E0Qs3V5k&%p$x+^MccXvARHJY-q^wwSdNO50~Y^W=Jfj4YG z)jS!~n%SDbs3eQS`U?DQ5i7#qXTj}sDk215aejR91Ay1R(+6j#!Z67k4%&177FSB{ z@$axmf}_^M%Kr=DbVK4g*-37(bLa2+Ug|@9OIzAx>SU(W(NYbE4=gTTpwBkp)8T%tqQ-fhv&_=xhBBjEwO z#9H|!gf~<}5tPB)fH1Xe)@%?Z;UTp^^>QRxoM;c;)<9EJiG381=wDy_WUV$?xB9Bn z8<9$^MR61c{}U0%fvqZrPYDbe0tI}{NM#6X42l?_;Uqb@bQYQ?VOwh+enR%~o5$Hw z-28@0^qm#_eqfxKAFKPf$hOluz0&zWng^SgzUv+6iw3PPAe%0PWO3tW2wBx_yb0O8 zb`yvkpYv2L1XGH{SOY#LfpKhkTQ|(vcR$2Y?fX-AG>b|z+vy((H#xFkugC;0n?b^X z*GXL%N49rjcB;mKth7t@aeCWb{L&~Lh2m|!HIh}&?RWLX?tW7l6tOr`CyPMfqlmQl zSCKm1|7jNJzqkKW2cw7jbsV&JH}nOql6~(kt7yUDGJL81n$J~t7pq@mOCKG$#>JMU z>K3u(ZCrmgkYKbOJXB+$d*EJxTPm786zWPb697Ld1J0O=K{`n!uKl*#*$j3C8Ww_uVF}FwYs%>M`fagL@|C*vEE6V()j@2Qw@c@5c0AL6ICKry zDt023Y(WYs(k}|F#8u+=B%K=T(?kmA|HGEci*95jgXV&)S~7;bcK;Gn)oS9_CP}pd%O4^J%i2RYUY=g+}n1sIsVuVEsKO6UskP*N#)28Ym4s-pjD*G zYk$Tsi(G?r@xI#qeYdx(YESUVVLMbP^TwZR@0dB+y7y13<9fa_v`UwcX|evw`X zG@^87TGfW-^CEEFkD{dJNBifo8Ve5GZTB1!*anS_&Q53W(z?}>N=`M-Pm<{xyDbxB zcc5p9)XNxI<1z(HM(dF~-A=ddy1aHqzHUB>;Y376erHRQ6i}q4skz1bBJcByA4=8+ zAl}BK+FDC-YHNK*V8%!4nSyQsZjL}o_Zu(y1*=)`17FLosrKuC6=Tm%S6DGESj`+I z<0-4dy&m4)uF?g4Efd4JXc}l`Juo*PX`UO1$iAOoY07!dFU7>=`#NdNr;y z=enSZnyc(+mLZ+MmM}%v;SM(ZrZ9{W_mHc_H{AZ@T*iF*6%$#Xu02hL+%x)k=;ZgV zdsdvYpSwohGkWMhb#J`E_F=?d>B`e~=l`8pz_z>Beu;g=ed!&HaJffXbjjX9f){$O zzt?B;&~30;kXh<0j6m{5_?+GC*p>1nQi2k~N3q~uXV3AvWnwSUbf|L#fhvXbPMzEu z_&@zlg5JLTPtq79s;yAfQj@Y!xY!lyVWxuzG zvsomJX&`mMP`pGmFhA34uZj0F3T_fJaCB)7%BDJaCXWzmvCiqB8FyjY)s{Qj>$UV{ zC7DvSvQKqog_+1%QNujt5G&xKkgJ=|)Ubikz5c0p)tY5PU?u=#FUX&%ruw~a%9F|Z z@s1Ix`2Ya61rI~dCui!uJ+-nL8Eih*7d#}YBK3c3>35?O(~GaE)0kT;6HkDc8iX<> zBe75eOVfTbd(AkY;)ZaNOa5+W-zvkxw0L^{<&z08d$SX^e*x6kd$^ih0Dx9wFVi(V~@`0ON#AWn7L?ShZ&z{r?>41X>WP zZ^K-tE^LLxSa+TaGQs!HH$MmXr|j5d!sy9mFx!obB4pD6fMQMm>@6|lfcK*>aU?2s z$+)sYxEg8)Cd^yXeQ2W96~7e!95PImKY_VvPlQ}EOw_tLdWq{bxb`gLR@PCs{gs=} z1H0G%+aNEL3I?BG4j&a-r!A@&b8OQ@)^uvB>TTxhs-qbK#CVlUA_eQCav;;vE92zR zieM&0SCgC~%tJX@07T(x$cOEr%6W&V`83iZURDctAdBX-@cp=)=9r1vEO`TF@TPb~ zJD_%fjEH5zJ=UFtx3t)hGNYp`r;7UCkMdH6 zD~CyGA1@AZ7p+cTsqane`=Pj7(B^E3)hMyXGNj33K?*}Ci{<7`LmmluJ!|x3{}z9t zP!$=he;2}b!N$oLh#`pTaK6#_w67jjOZe8~Uzk}| zxrmBD+n6UA8-}nC`!nv?x){I7`1Yt)yZBF8+h#KDwlLmgl!;@g{ZW5M=P@}!;^ISD z!7FAth9tR*PgvWWCQD2I6Xro`Jo*KiJe>{gBqQVY&}w1ns(`(~@y6c9B4(yhpn>F- ze;%iC5C*c>pgqY_{RFRFmvpIeHD6%*Y;=djO2)%>uMZ|zKPb*Xlvi3xUeX?DCV>n! z1+OzWaILn!b>Hb=#YeizAqc1}-fRfIdsK}y;{Y8Dm&z4?DhuJ@h7b;@Si9?PaMtRm z-)XtQOZ#n6oQb|{!C%|r%CNObK5$g=;_f(^cy`_PfF2DEdS={LtTtMSXY~N1iIgM+ zDZj4rS2_s|t-2a=x;z$NuTx3eC6A}THY%Olotcn;Y@_ntc%9Vx0X<3g2pG-4mo(KDd@GTKft8xHVK&iiG z6k$q(1SKLrQGgcS3Mabv`KoiQwb^21I4oUGlWBd9L~{){zzaaH>DO@N)AkN71$!z zzwjR&sNxKGSOm6VRT_6B@%5y*+YXs5qeYr-EXSEYfAu+v!x%qIKv-g7>i=XQi#!+@ z2tB0l^wQPo9>X+jpY#s3*#(QJ{Mb&+VN9@Yrrv6bKKLJT0_ITA17YGi(+~QFZAM z(#{vYk}|UFa;fG_ZZV5>Lx#K6%r1#A3-qH7;*jdBg;f1IF@6fjZU&jb6iTYo2$My( zPuQ|lI*l*k-Zq6uN(#s*GGrKlT+ECA;AwJ)rwkCIQZ>=ErCv_WZHUuVz9ovPd?ZQ7 zuo_o6C@PK+byCFSgV-INCu08sLjpIXOoQ2_ED5V(xMlMK7ONx0)HM@Inxx0qW}9#_j0AoYDBQ3di8e@(`)Jkj&FP1(>5Xv(rS#KmgtRDkqBd zbLnIJ!-&wK_Q%NvuLQE6^+55 z*V#Bw%FWfQufFQ=OE86sxKGFHxU;Za?1*ys<_~xNxc^IF@F#i?ENoPVF3DvT?uS>3jWHeoMm!3g} z?k)G+U9pS5%R2YE;EmMw{0Rf(H&jdSzhc`ErmeUnwOm6=-ZW=rvgJeyH)s-rl*V~C z7s~qU>ro}|F5tTz)twBdNBOlDq=$(HRA;u3|ZOQAYeo})bo1cgc)LH z4S+ymv!5LWBvLou(xr95%Op4$dMFs+x2F@6y%|aLlHMcKzm*NE+{BnZQ$seV<`Mzg zilUVI_WKr6+!t?uyr4rSUi4e~!XH}MIQ)%lC718=755Cg2mj*FuS%9rZUARt@aINL zD(FPvSwR8iTownmY|0nUWV%`a(-o6iGf0(FgEm)nxJd}1nL z=KqakU5UxqbWNo;$Fi}3-kL#e@TXPdH(1nOBFEiV0j~Z7@w&&%bK>Oz)TSz?`pB(; zo3wxs2SX?-9}l=Psowjp4+=85OR3S@WD(%e$1#aVm=UF z^a5&PxWD5oJ|(7?86<8ZMnoR2rstAa7tXN_zkp+3cd|Q0YR@Gd93fs@{FDprFgm=I zlW1gvxRKitPzex70_jjJA|dP;spUei8S$UZQ&(ueyl?JcrGImI9mYJa)s53aB?dyP zQ`;~Khksy_K=lSNx7TivW}(Jw5J3zRU_lY5R&__?hgBK0Z?FJ$K{6HmsAxw|bFb z!#m?2?IKeVOapGt%h3#N0r{6DgLgA=Hn_|}?-^nucg4^3Ph}F=5U0PUWY=wqnc}8D z^X9CkguJ(d9U~Dyk*PfQWn3Y)1BWC}9=g$-j81c+I`UQXfaMlfhCdku1|5RtDfiAX zVU{Vh;_+IF)``8mzf8<7Q{T~t{ym5-mTCkTBA>B76Ra(B2g=1-=s=;;q%*{i{+t_u zHHe5V{~+LzHj4@p(7#tJ`3t^aLW#~H63K)|n5)GH*+?_^31WJhSr~wsEBdZjQ;g>R z%&qO9F1c@9){KB8xL2n&eF~KQ$jY)<9hJqZ6LZpqe1+#jW+UUmpaPdqcy^jC?p(NR zzOvFLwBcUXug6Lsa9jI3#?`!K3{8s!fM{c?3EkB~BbO?QDCC{fE!N73Z@F)%QS4-r zhv39Q-)Bo4XYjN_K2RBcsX#W4=0%tW&&9r9Tgqb?-jpKS(RH5t-(z&>XlDE#t$FBP znuZkkL$_h0U(-;LpnN?LU40dF+vtInh@I)rGL+myB98tmOQjN(cVI+g#K;tfaxL#U z#0k>%LGjJ`njLrF{}`eO*RQ+lx2dMkAV^Fw^18q(t70OC1+#dpxiGf&S*9|%n zk;siWIt_auEe-2fdQu8cq`5jpxL+Nd$kSaS8zuDU`x3|vTLDWF8i~!I4pq^i#wRu@ z@jqO16*&(^z?oSEE}^uRi!s3uQDuS24VQI<#?0@6HCaz1){zJ=i8As|iS7jhMFb7h z6vEp2Uu{G&K24OXDNChjb=YGVj4_!8ySJOy+;g?qKP=gP zpp`f9v-k`$zGx&RY*eQ*)@l;I61_JdQq0AIj{}r4s!xW+!ZJ0hiBNE^AvImjOuqbH zWa-kmrSc{&pIewrO-h|1bpL-l)LW@BS}m|qP|>~^t8VZVV#a2n3fLxoKg68A z?~6JeXSWdIDmDGZhZmeI+XTH|jWDfR^J5)=PPlh4s8h+D`a66Ie@yZQP>?+2WQqp2 z?}*Rs`=-MOevDaBJvr(6{c2{ic!G>`^EO*nh|LaoWS{;Ug%Y3+fB-Mn78UEH$y$V( zjJ=g4F=fd+$v452)Ir9=hlWK8z5vag%NfB@x@PN8O~$m zu3AuNF*1?hRuPRWOL&6sgWso3XYGIb>lKpJsQ2vc9d=sIG@}6Zbwa-1*+)FXF40nC z6nNk)ME8#k}IGEX06dh*@@odGZ3jc8b`zPNWPNQE9ycwNh_`P zBd#rx1N)n!8h#t#*7-goR~9lSf03uQuQ`B##X+s)y9CRQ1BtSBg;A)HV4!9_j%&3t z3e&$-eNt+bXl^dW(k(<|B-YCreCZiAA@HXoi+jIyO?5a%TGPcxo9aWWA@PEjEtSQyhv3t?squ+=PI*1(32c}zHLu_4=i#WF&{0Q`+N-V_Uw z3X?2_jWsQ5kh>Os=OMUTf>bS{wX9H-o`pCAC1X+)CrZm#&36%?ks-)(3n@@c3=QOO z&~^v(u;1L&Cxp3-^43bsjh*CX&EcwitSlgB`5#Ys0qn%V)7<1hB|;fh=j1EFCX92R z(CFLS3*`MWe%+;UT@NZOkIa*w^2qf&Ar?fltI8;7_fbR`wzBk{X0dXOGj2i6lxeS~ zQs}dt=r8j{hzg+Q-d`y`@Y5;~Vw*EjdKjPH*Hop*-tTk%MzbbG*-$Jn2^jR&W0lf3 zU2ktku}>(bm(j44AKYa)IwkT)awskR#W7zGC>927xhrKJrlg0ylRGBxC*~($d1xR0 zbp!G?AmKT(YeyQ-BW=P)&VW+Q4~Jh(Py(QQCYf)ns`EO(Y7>uuV)Xvxw>rFW0zzyM zGNR#wGk{o901wOz3*U;7J8wx{+bd(2mkeyOBDq${7oo6R$Ustj*=u{@&;La-`ZX~< zVtTVUbuHaCB_e!nGPR5>^O75tFOdzH)}d&gYF)gj<_lFAy?62Bi(ew5^v9%&oy5R2 ztZDZ(Wof~3r?@4LbnK6^%>t5WCos_mEkTc_8x@I@;%X${?uBTkFhmPgn2~>`P|=h! zV)%g&FNg;EW6!|co^L?Mre^K?drx0`-_813d0Y>qcPeq^j^?>zz!DKd(OGHLPSv@v zY#Y6MR#X+Um2t|NzJVC#t8y(6RiBy6FF%HEMNEY>+Ype5=0GgQ+6he6h*AgMDzO_u zoTAwBAp=wRaT=vxB_Ue&FjfUcms18svu2=fjN>zo;GWDwZ}j{AGYs@DuS!&!X7wNb zRio(Nx%h?i-Qmw3|62XUtUkYZ>z?0A(uF1aaPgTr^Y~4qz%WD%fjaPIwpoXWcbrakZ8c=H(!x6g#a*%Qo_#pt%9KK=!_zr`w; z&CxyAk#H@(vwgE(=~Fx2mw5G;$W(dRy+97~DSKP#($V8?}ou|X4a~>$lE*i}P8e2x` zT)kk0q#0=Sm|tc=urpH8r&h%c{ra+govWv%uP~N{R#&rNVea>#m}}ENM9N>Y2vU_r z5>Avh8rxc;b@Gk@xJm_c%{}`aKF|nRx~Y|MSI+GOLE$`1@&yB27Yfz-4M*qMv3eT4 zUe)tOWZ%w$UU1V5_Vq=t-8N1A!vBHF==!Lo_YF-kpjV6xIO;ym^_6d({U2MJN+@Kd zGC@IiM*#U+XgADUOVyevy)!~@Fb5eMqbeNhTdvvE7l|=`x7>WVErs_V8)EEBu6n!0 z7@g&*--OL^c87wvW$pfc?2ZgkW>5RzihKH!kSOQ#Ft&yn&S`9LB+@cVE6rb1_&MT@ zMGamqgHU}Obm}&Ah>qPMQL&Yqh0uU+xWC|!L>^1fE+%s~jMA{x_O0@l{jrpQuF?wH z>(9As&j!p`w0>q5&fxYm&%>O7m8E2bDc1?q(Qkh9n;dbJ9Ce^H&v+`pk!5UIv)A;+ zom-@hzV?RBnn0IDMAMN!D%dSwzva|{9Jq5Fj@xgtzobkvl<}t;66$}n!gU<+PgceU zSjfzQRN8_SWa-Q0aBW_cPOB}+i*LT^u6)C6d)CM^%{^nKppOExNin=PuefhKV}}y# zoD`jY+07~w+Jc;6n~Tk&^^k_(BDk#j`?{E!Q2k*pNf2*aI14xgSDtd0FOy(^nrLK`~7-jLUVU5vo!UYexi5YK?o zLZ-Ye3~SP$$Z4m+2mkIhcUP8LXW!YZB*HdROPjM%U`S1Zt>rdl>-rY(FPVJK3X>rH zWP{UCrRAfM-wT4lN;Xz>25|!xW0{<(^MP2{g5=iNR>-)A>HbuX%-wy~B8Lsvwq~7v z4_tc;J)}5($$@UEASr}|AuYO^j1LgU|j5o=d$2ZH}n zxyZ55(fzdsIaAuCW@FzCs0GTT*nYya%3q3^%hsc5d4*awIGnHGjpJ+R6%(mrTd12= z-Sr^x9)o-t=WO`BwM(EgLFrvtUd1F=1YE3zixA!eu2nfrP6CC2wtRGC@SodSk-X*w zcbbjq`v2Tle?x5c9?DVR_!#o7BIjaDjz1dmWhNavRr9{GnoeuOv$y(|hRufZ%fI&9 znUd}M?cSmPv2w%H3RAPVFk7E}k!uPD|K(p@{G`U<{RgSsj5=CgvXyx=6coYQ4{qYn zirouQa7n;7)NT9g|Hl6~%^#5HGm)G=c>2n>-8X0mGb((mCY{3LU!uwW@bMQHAL%r5 z33>+tEXD=`Zs%jIm>>V>@kioR^()P9qfr}jR5W?bZ(?MTlP zJx*NHH(;Cy>WIQWlm3x(=?UJ_9}#U=S

)ox}3m?(VaaDtw1dWWk`U;rkbjx`@~> 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

b6M@{|hlS|cc)E%v8kXI2)YQKo`!cY)Dw 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≪#8Ch7P@@3#r2`EMaa0%^+xNrT|x!%R;wDJ+`Cs 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 exception=RuntimeError('Event loop is closed')> +Traceback (most recent call last): + File "/opt/homebrew/lib/python3.11/site-packages/prisma/engine/query.py", line 112, in aclose + await self._close_session() + File "/opt/homebrew/lib/python3.11/site-packages/prisma/engine/query.py", line 116, in _close_session + await self.session.close() + File "/opt/homebrew/lib/python3.11/site-packages/prisma/_async_http.py", line 35, in close + await self.session.aclose() + File "/opt/homebrew/lib/python3.11/site-packages/httpx/_client.py", line 1974, in aclose + await self._transport.aclose() + File "/opt/homebrew/lib/python3.11/site-packages/httpx/_transports/default.py", line 365, in aclose + await self._pool.aclose() + File "/opt/homebrew/lib/python3.11/site-packages/httpcore/_async/connection_pool.py", line 314, in aclose + await connection.aclose() + File "/opt/homebrew/lib/python3.11/site-packages/httpcore/_async/connection.py", line 166, in aclose + await self._connection.aclose() + File "/opt/homebrew/lib/python3.11/site-packages/httpcore/_async/http11.py", line 241, in aclose + await self._network_stream.aclose() + File "/opt/homebrew/lib/python3.11/site-packages/httpcore/_backends/anyio.py", line 54, in aclose + await self._stream.aclose() + File "/opt/homebrew/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 1261, in aclose + self._transport.close() + File "/opt/homebrew/Cellar/python@3.11/3.11.6_1/Frameworks/Python.framework/Versions/3.11/lib/python3.11/asyncio/selector_events.py", line 860, in close + self._loop.call_soon(self._call_connection_lost, None) + File "/opt/homebrew/Cellar/python@3.11/3.11.6_1/Frameworks/Python.framework/Versions/3.11/lib/python3.11/asyncio/base_events.py", line 761, in call_soon + self._check_closed() + File "/opt/homebrew/Cellar/python@3.11/3.11.6_1/Frameworks/Python.framework/Versions/3.11/lib/python3.11/asyncio/base_events.py", line 519, in _check_closed + raise RuntimeError('Event loop is closed') +RuntimeError: Event loop is closed diff --git a/litellm/tests/test_configs/test_config_no_auth.yaml b/litellm/tests/test_configs/test_config_no_auth.yaml index 7cd7d4301..f934f21f4 100644 --- a/litellm/tests/test_configs/test_config_no_auth.yaml +++ b/litellm/tests/test_configs/test_config_no_auth.yaml @@ -49,3 +49,15 @@ model_list: api_version: 2023-07-01-preview model: azure/azure-embedding-model model_name: azure-embedding-model +- litellm_params: + model: gpt-3.5-turbo + model_info: + description: this is a test openai model + id: 55848c55-4162-40f9-a6e2-9a722b9ef404 + model_name: test_openai_models +- litellm_params: + model: gpt-3.5-turbo + model_info: + description: this is a test openai model + id: 34339b1e-e030-4bcc-a531-c48559f10ce4 + model_name: test_openai_models From f5d64a49923c1e8499c25ed97987acb115eb4cce Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 12 Dec 2023 09:50:44 -0800 Subject: [PATCH 446/460] (fix) test router --- litellm/tests/test_router_fallbacks.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/litellm/tests/test_router_fallbacks.py b/litellm/tests/test_router_fallbacks.py index 235a901f7..513caa7b8 100644 --- a/litellm/tests/test_router_fallbacks.py +++ b/litellm/tests/test_router_fallbacks.py @@ -101,6 +101,7 @@ kwargs = {"model": "azure/gpt-3.5-turbo", "messages": [{"role": "user", "content def test_sync_fallbacks(): try: + print("Test router_fallbacks: test_sync_fallbacks()") litellm.set_verbose = True customHandler = MyCustomHandler() litellm.callbacks = [customHandler] @@ -112,6 +113,8 @@ def test_sync_fallbacks(): print(f"response: {response}") time.sleep(0.05) # allow a delay as success_callbacks are on a separate thread assert customHandler.previous_models == 1 # 0 retries, 1 fallback + + print("Passed ! Test router_fallbacks: test_sync_fallbacks()") router.reset() except Exception as e: print(e) @@ -195,6 +198,11 @@ async def test_dynamic_fallbacks_async(): Allow setting the fallback in the router.completion() call. """ try: + print("Router - test_dynamic_fallbacks_async") + print("Callbacks in test_dynamic_fallbacks_async: ", litellm.callbacks) + print("Success callbacks in test_dynamic_fallbacks_async: ", litellm.success_callback) + print("Async Success callbacks in test_dynamic_fallbacks_async: ", litellm._async_success_callback) + litellm.set_verbose=True customHandler = MyCustomHandler() litellm.callbacks = [customHandler] router = Router(model_list=model_list, set_verbose=True) @@ -203,7 +211,7 @@ async def test_dynamic_fallbacks_async(): kwargs["messages"] = [{"role": "user", "content": "Hey, how's it going?"}] kwargs["fallbacks"] = [{"azure/gpt-3.5-turbo": ["gpt-3.5-turbo"]}] response = await router.acompletion(**kwargs) - print(f"response: {response}") + print(f"RESPONSE: {response}") await asyncio.sleep(0.05) # allow a delay as success_callbacks are on a separate thread assert customHandler.previous_models == 1 # 0 retries, 1 fallback router.reset() From a5dd8b1d4a41ecf9bd59178d203036a0fa53a691 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 12 Dec 2023 09:53:52 -0800 Subject: [PATCH 447/460] (fix) use deepcopy for model list --- litellm/router.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/litellm/router.py b/litellm/router.py index e1522719e..47ede9110 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -17,6 +17,7 @@ import inspect, concurrent from openai import AsyncOpenAI from collections import defaultdict from litellm.router_strategy.least_busy import LeastBusyLoggingHandler +import copy class Router: """ Example usage: @@ -81,6 +82,7 @@ class Router: self.set_verbose = set_verbose self.deployment_names: List = [] # names of models under litellm_params. ex. azure/chatgpt-v-2 if model_list: + model_list = copy.deepcopy(model_list) self.set_model_list(model_list) self.healthy_deployments: List = self.model_list self.deployment_latency_map = {} From 9cf5ab468f00815d4db206de2bde0f3026da8797 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 12 Dec 2023 09:53:35 -0800 Subject: [PATCH 448/460] fix(router.py): deepcopy initial model list, don't mutate it --- litellm/llms/openai.py | 55 ++- litellm/main.py | 2 +- litellm/router.py | 3 +- litellm/tests/langfuse.log | 2 +- .../test_configs/test_config_no_auth.yaml | 6 + litellm/tests/test_router_fallbacks.py | 314 +++++++++++++----- 6 files changed, 280 insertions(+), 102 deletions(-) diff --git a/litellm/llms/openai.py b/litellm/llms/openai.py index 33d3504bb..9489e44c3 100644 --- a/litellm/llms/openai.py +++ b/litellm/llms/openai.py @@ -1,3 +1,4 @@ +from tkinter import N from typing import Optional, Union, Any import types, time, json import httpx @@ -195,23 +196,23 @@ class OpenAIChatCompletion(BaseLLM): **optional_params } - ## LOGGING - logging_obj.pre_call( - input=messages, - api_key=api_key, - additional_args={"headers": headers, "api_base": api_base, "acompletion": acompletion, "complete_input_dict": data}, - ) - try: max_retries = data.pop("max_retries", 2) if acompletion is True: if optional_params.get("stream", False): - return self.async_streaming(logging_obj=logging_obj, data=data, model=model, api_base=api_base, api_key=api_key, timeout=timeout, client=client, max_retries=max_retries) + return self.async_streaming(logging_obj=logging_obj, headers=headers, data=data, model=model, api_base=api_base, api_key=api_key, timeout=timeout, client=client, max_retries=max_retries) else: - return self.acompletion(data=data, model_response=model_response, api_base=api_base, api_key=api_key, timeout=timeout, client=client, max_retries=max_retries) + return self.acompletion(data=data, headers=headers, logging_obj=logging_obj, model_response=model_response, api_base=api_base, api_key=api_key, timeout=timeout, client=client, max_retries=max_retries) elif optional_params.get("stream", False): - return self.streaming(logging_obj=logging_obj, data=data, model=model, api_base=api_base, api_key=api_key, timeout=timeout, client=client, max_retries=max_retries) + return self.streaming(logging_obj=logging_obj, headers=headers, data=data, model=model, api_base=api_base, api_key=api_key, timeout=timeout, client=client, max_retries=max_retries) else: + ## LOGGING + logging_obj.pre_call( + input=messages, + api_key=api_key, + additional_args={"headers": headers, "api_base": api_base, "acompletion": acompletion, "complete_input_dict": data}, + ) + if not isinstance(max_retries, int): raise OpenAIError(status_code=422, message="max retries must be an int") if client is None: @@ -260,6 +261,8 @@ class OpenAIChatCompletion(BaseLLM): api_base: Optional[str]=None, client=None, max_retries=None, + logging_obj=None, + headers=None ): response = None try: @@ -267,8 +270,21 @@ class OpenAIChatCompletion(BaseLLM): openai_aclient = AsyncOpenAI(api_key=api_key, base_url=api_base, http_client=litellm.aclient_session, timeout=timeout, max_retries=max_retries) else: openai_aclient = client + ## LOGGING + logging_obj.pre_call( + input=data['messages'], + api_key=api_key, + additional_args={"headers": headers, "api_base": api_base, "acompletion": True, "complete_input_dict": data}, + ) response = await openai_aclient.chat.completions.create(**data) - return convert_to_model_response_object(response_object=json.loads(response.model_dump_json()), model_response_object=model_response) + stringified_response = response.model_dump_json() + logging_obj.post_call( + input=data['messages'], + api_key=api_key, + original_response=stringified_response, + additional_args={"complete_input_dict": data}, + ) + return convert_to_model_response_object(response_object=json.loads(stringified_response), model_response_object=model_response) except Exception as e: if response and hasattr(response, "text"): raise OpenAIError(status_code=500, message=f"{str(e)}\n\nOriginal Response: {response.text}") @@ -286,12 +302,19 @@ class OpenAIChatCompletion(BaseLLM): api_key: Optional[str]=None, api_base: Optional[str]=None, client = None, - max_retries=None + max_retries=None, + headers=None ): if client is None: openai_client = OpenAI(api_key=api_key, base_url=api_base, http_client=litellm.client_session, timeout=timeout, max_retries=max_retries) else: openai_client = client + ## LOGGING + logging_obj.pre_call( + input=data['messages'], + api_key=api_key, + additional_args={"headers": headers, "api_base": api_base, "acompletion": False, "complete_input_dict": data}, + ) response = openai_client.chat.completions.create(**data) streamwrapper = CustomStreamWrapper(completion_stream=response, model=model, custom_llm_provider="openai",logging_obj=logging_obj) return streamwrapper @@ -305,6 +328,7 @@ class OpenAIChatCompletion(BaseLLM): api_base: Optional[str]=None, client=None, max_retries=None, + headers=None ): response = None try: @@ -312,6 +336,13 @@ class OpenAIChatCompletion(BaseLLM): openai_aclient = AsyncOpenAI(api_key=api_key, base_url=api_base, http_client=litellm.aclient_session, timeout=timeout, max_retries=max_retries) else: openai_aclient = client + ## LOGGING + logging_obj.pre_call( + input=data['messages'], + api_key=api_key, + additional_args={"headers": headers, "api_base": api_base, "acompletion": True, "complete_input_dict": data}, + ) + response = await openai_aclient.chat.completions.create(**data) streamwrapper = CustomStreamWrapper(completion_stream=response, model=model, custom_llm_provider="openai",logging_obj=logging_obj) async for transformed_chunk in streamwrapper: diff --git a/litellm/main.py b/litellm/main.py index 828497820..f2b1a1fc0 100644 --- a/litellm/main.py +++ b/litellm/main.py @@ -607,7 +607,7 @@ def completion( ) raise e - if optional_params.get("stream", False) or acompletion == True: + if optional_params.get("stream", False): ## LOGGING logging.post_call( input=messages, diff --git a/litellm/router.py b/litellm/router.py index 47ede9110..6c2a9baf0 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -7,6 +7,7 @@ # # Thank you ! We ❤️ you! - Krrish & Ishaan +import copy from datetime import datetime from typing import Dict, List, Optional, Union, Literal, Any import random, threading, time, traceback, uuid @@ -879,7 +880,7 @@ class Router: return chosen_item def set_model_list(self, model_list: list): - self.model_list = model_list + self.model_list = copy.deepcopy(model_list) # we add api_base/api_key each model so load balancing between azure/gpt on api_base1 and api_base2 works import os for model in self.model_list: diff --git a/litellm/tests/langfuse.log b/litellm/tests/langfuse.log index 9311e915a..bbb757738 100644 --- a/litellm/tests/langfuse.log +++ b/litellm/tests/langfuse.log @@ -1,5 +1,5 @@ Task exception was never retrieved -future: exception=RuntimeError('Event loop is closed')> +future: exception=RuntimeError('Event loop is closed')> Traceback (most recent call last): File "/opt/homebrew/lib/python3.11/site-packages/prisma/engine/query.py", line 112, in aclose await self._close_session() diff --git a/litellm/tests/test_configs/test_config_no_auth.yaml b/litellm/tests/test_configs/test_config_no_auth.yaml index f934f21f4..47b83d71c 100644 --- a/litellm/tests/test_configs/test_config_no_auth.yaml +++ b/litellm/tests/test_configs/test_config_no_auth.yaml @@ -61,3 +61,9 @@ model_list: description: this is a test openai model id: 34339b1e-e030-4bcc-a531-c48559f10ce4 model_name: test_openai_models +- litellm_params: + model: gpt-3.5-turbo + model_info: + description: this is a test openai model + id: f6f74e14-ac64-4403-9365-319e584dcdc5 + model_name: test_openai_models diff --git a/litellm/tests/test_router_fallbacks.py b/litellm/tests/test_router_fallbacks.py index 513caa7b8..22b5f121e 100644 --- a/litellm/tests/test_router_fallbacks.py +++ b/litellm/tests/test_router_fallbacks.py @@ -21,10 +21,14 @@ class MyCustomHandler(CustomLogger): print(f"Pre-API Call") def log_post_api_call(self, kwargs, response_obj, start_time, end_time): - print(f"Post-API Call") + print(f"Post-API Call - response object: {response_obj}; model: {kwargs['model']}") + def log_stream_event(self, kwargs, response_obj, start_time, end_time): print(f"On Stream") + + def async_log_stream_event(self, kwargs, response_obj, start_time, end_time): + print(f"On Stream") def log_success_event(self, kwargs, response_obj, start_time, end_time): print(f"previous_models: {kwargs['litellm_params']['metadata']['previous_models']}") @@ -41,67 +45,65 @@ class MyCustomHandler(CustomLogger): def log_failure_event(self, kwargs, response_obj, start_time, end_time): print(f"On Failure") -model_list = [ - { # list of model deployments - "model_name": "azure/gpt-3.5-turbo", # openai model name - "litellm_params": { # params for litellm completion/embedding call - "model": "azure/chatgpt-v-2", - "api_key": "bad-key", - "api_version": os.getenv("AZURE_API_VERSION"), - "api_base": os.getenv("AZURE_API_BASE") - }, - "tpm": 240000, - "rpm": 1800 - }, - { # list of model deployments - "model_name": "azure/gpt-3.5-turbo-context-fallback", # openai model name - "litellm_params": { # params for litellm completion/embedding call - "model": "azure/chatgpt-v-2", - "api_key": os.getenv("AZURE_API_KEY"), - "api_version": os.getenv("AZURE_API_VERSION"), - "api_base": os.getenv("AZURE_API_BASE") - }, - "tpm": 240000, - "rpm": 1800 - }, - { - "model_name": "azure/gpt-3.5-turbo", # openai model name - "litellm_params": { # params for litellm completion/embedding call - "model": "azure/chatgpt-functioncalling", - "api_key": "bad-key", - "api_version": os.getenv("AZURE_API_VERSION"), - "api_base": os.getenv("AZURE_API_BASE") - }, - "tpm": 240000, - "rpm": 1800 - }, - { - "model_name": "gpt-3.5-turbo", # openai model name - "litellm_params": { # params for litellm completion/embedding call - "model": "gpt-3.5-turbo", - "api_key": os.getenv("OPENAI_API_KEY"), - }, - "tpm": 1000000, - "rpm": 9000 - }, - { - "model_name": "gpt-3.5-turbo-16k", # openai model name - "litellm_params": { # params for litellm completion/embedding call - "model": "gpt-3.5-turbo-16k", - "api_key": os.getenv("OPENAI_API_KEY"), - }, - "tpm": 1000000, - "rpm": 9000 - } -] - - kwargs = {"model": "azure/gpt-3.5-turbo", "messages": [{"role": "user", "content":"Hey, how's it going?"}]} def test_sync_fallbacks(): try: - print("Test router_fallbacks: test_sync_fallbacks()") + model_list = [ + { # list of model deployments + "model_name": "azure/gpt-3.5-turbo", # openai model name + "litellm_params": { # params for litellm completion/embedding call + "model": "azure/chatgpt-v-2", + "api_key": "bad-key", + "api_version": os.getenv("AZURE_API_VERSION"), + "api_base": os.getenv("AZURE_API_BASE") + }, + "tpm": 240000, + "rpm": 1800 + }, + { # list of model deployments + "model_name": "azure/gpt-3.5-turbo-context-fallback", # openai model name + "litellm_params": { # params for litellm completion/embedding call + "model": "azure/chatgpt-v-2", + "api_key": os.getenv("AZURE_API_KEY"), + "api_version": os.getenv("AZURE_API_VERSION"), + "api_base": os.getenv("AZURE_API_BASE") + }, + "tpm": 240000, + "rpm": 1800 + }, + { + "model_name": "azure/gpt-3.5-turbo", # openai model name + "litellm_params": { # params for litellm completion/embedding call + "model": "azure/chatgpt-functioncalling", + "api_key": "bad-key", + "api_version": os.getenv("AZURE_API_VERSION"), + "api_base": os.getenv("AZURE_API_BASE") + }, + "tpm": 240000, + "rpm": 1800 + }, + { + "model_name": "gpt-3.5-turbo", # openai model name + "litellm_params": { # params for litellm completion/embedding call + "model": "gpt-3.5-turbo", + "api_key": os.getenv("OPENAI_API_KEY"), + }, + "tpm": 1000000, + "rpm": 9000 + }, + { + "model_name": "gpt-3.5-turbo-16k", # openai model name + "litellm_params": { # params for litellm completion/embedding call + "model": "gpt-3.5-turbo-16k", + "api_key": os.getenv("OPENAI_API_KEY"), + }, + "tpm": 1000000, + "rpm": 9000 + } + ] + litellm.set_verbose = True customHandler = MyCustomHandler() litellm.callbacks = [customHandler] @@ -123,6 +125,60 @@ def test_sync_fallbacks(): @pytest.mark.asyncio async def test_async_fallbacks(): litellm.set_verbose = False + model_list = [ + { # list of model deployments + "model_name": "azure/gpt-3.5-turbo", # openai model name + "litellm_params": { # params for litellm completion/embedding call + "model": "azure/chatgpt-v-2", + "api_key": "bad-key", + "api_version": os.getenv("AZURE_API_VERSION"), + "api_base": os.getenv("AZURE_API_BASE") + }, + "tpm": 240000, + "rpm": 1800 + }, + { # list of model deployments + "model_name": "azure/gpt-3.5-turbo-context-fallback", # openai model name + "litellm_params": { # params for litellm completion/embedding call + "model": "azure/chatgpt-v-2", + "api_key": os.getenv("AZURE_API_KEY"), + "api_version": os.getenv("AZURE_API_VERSION"), + "api_base": os.getenv("AZURE_API_BASE") + }, + "tpm": 240000, + "rpm": 1800 + }, + { + "model_name": "azure/gpt-3.5-turbo", # openai model name + "litellm_params": { # params for litellm completion/embedding call + "model": "azure/chatgpt-functioncalling", + "api_key": "bad-key", + "api_version": os.getenv("AZURE_API_VERSION"), + "api_base": os.getenv("AZURE_API_BASE") + }, + "tpm": 240000, + "rpm": 1800 + }, + { + "model_name": "gpt-3.5-turbo", # openai model name + "litellm_params": { # params for litellm completion/embedding call + "model": "gpt-3.5-turbo", + "api_key": os.getenv("OPENAI_API_KEY"), + }, + "tpm": 1000000, + "rpm": 9000 + }, + { + "model_name": "gpt-3.5-turbo-16k", # openai model name + "litellm_params": { # params for litellm completion/embedding call + "model": "gpt-3.5-turbo-16k", + "api_key": os.getenv("OPENAI_API_KEY"), + }, + "tpm": 1000000, + "rpm": 9000 + } + ] + router = Router(model_list=model_list, fallbacks=[{"azure/gpt-3.5-turbo": ["gpt-3.5-turbo"]}], context_window_fallbacks=[{"azure/gpt-3.5-turbo-context-fallback": ["gpt-3.5-turbo-16k"]}, {"gpt-3.5-turbo": ["gpt-3.5-turbo-16k"]}], @@ -146,30 +202,6 @@ async def test_async_fallbacks(): # test_async_fallbacks() -## COMMENTING OUT as the context size exceeds both gpt-3.5-turbo and gpt-3.5-turbo-16k, need a better message here -# def test_sync_context_window_fallbacks(): -# try: -# customHandler = MyCustomHandler() -# litellm.callbacks = [customHandler] -# sample_text = "Say error 50 times" * 10000 -# kwargs["model"] = "azure/gpt-3.5-turbo-context-fallback" -# kwargs["messages"] = [{"role": "user", "content": sample_text}] -# router = Router(model_list=model_list, -# fallbacks=[{"azure/gpt-3.5-turbo": ["gpt-3.5-turbo"]}], -# context_window_fallbacks=[{"azure/gpt-3.5-turbo-context-fallback": ["gpt-3.5-turbo-16k"]}, {"gpt-3.5-turbo": ["gpt-3.5-turbo-16k"]}], -# set_verbose=False) -# response = router.completion(**kwargs) -# print(f"response: {response}") -# time.sleep(0.05) # allow a delay as success_callbacks are on a separate thread -# assert customHandler.previous_models == 1 # 0 retries, 1 fallback -# router.reset() -# except Exception as e: -# print(f"An exception occurred - {e}") -# finally: -# router.reset() - -# test_sync_context_window_fallbacks() - def test_dynamic_fallbacks_sync(): """ Allow setting the fallback in the router.completion() call. @@ -177,6 +209,60 @@ def test_dynamic_fallbacks_sync(): try: customHandler = MyCustomHandler() litellm.callbacks = [customHandler] + model_list = [ + { # list of model deployments + "model_name": "azure/gpt-3.5-turbo", # openai model name + "litellm_params": { # params for litellm completion/embedding call + "model": "azure/chatgpt-v-2", + "api_key": "bad-key", + "api_version": os.getenv("AZURE_API_VERSION"), + "api_base": os.getenv("AZURE_API_BASE") + }, + "tpm": 240000, + "rpm": 1800 + }, + { # list of model deployments + "model_name": "azure/gpt-3.5-turbo-context-fallback", # openai model name + "litellm_params": { # params for litellm completion/embedding call + "model": "azure/chatgpt-v-2", + "api_key": os.getenv("AZURE_API_KEY"), + "api_version": os.getenv("AZURE_API_VERSION"), + "api_base": os.getenv("AZURE_API_BASE") + }, + "tpm": 240000, + "rpm": 1800 + }, + { + "model_name": "azure/gpt-3.5-turbo", # openai model name + "litellm_params": { # params for litellm completion/embedding call + "model": "azure/chatgpt-functioncalling", + "api_key": "bad-key", + "api_version": os.getenv("AZURE_API_VERSION"), + "api_base": os.getenv("AZURE_API_BASE") + }, + "tpm": 240000, + "rpm": 1800 + }, + { + "model_name": "gpt-3.5-turbo", # openai model name + "litellm_params": { # params for litellm completion/embedding call + "model": "gpt-3.5-turbo", + "api_key": os.getenv("OPENAI_API_KEY"), + }, + "tpm": 1000000, + "rpm": 9000 + }, + { + "model_name": "gpt-3.5-turbo-16k", # openai model name + "litellm_params": { # params for litellm completion/embedding call + "model": "gpt-3.5-turbo-16k", + "api_key": os.getenv("OPENAI_API_KEY"), + }, + "tpm": 1000000, + "rpm": 9000 + } + ] + router = Router(model_list=model_list, set_verbose=True) kwargs = {} kwargs["model"] = "azure/gpt-3.5-turbo" @@ -198,11 +284,65 @@ async def test_dynamic_fallbacks_async(): Allow setting the fallback in the router.completion() call. """ try: - print("Router - test_dynamic_fallbacks_async") - print("Callbacks in test_dynamic_fallbacks_async: ", litellm.callbacks) - print("Success callbacks in test_dynamic_fallbacks_async: ", litellm.success_callback) - print("Async Success callbacks in test_dynamic_fallbacks_async: ", litellm._async_success_callback) - litellm.set_verbose=True + model_list = [ + { # list of model deployments + "model_name": "azure/gpt-3.5-turbo", # openai model name + "litellm_params": { # params for litellm completion/embedding call + "model": "azure/chatgpt-v-2", + "api_key": "bad-key", + "api_version": os.getenv("AZURE_API_VERSION"), + "api_base": os.getenv("AZURE_API_BASE") + }, + "tpm": 240000, + "rpm": 1800 + }, + { # list of model deployments + "model_name": "azure/gpt-3.5-turbo-context-fallback", # openai model name + "litellm_params": { # params for litellm completion/embedding call + "model": "azure/chatgpt-v-2", + "api_key": os.getenv("AZURE_API_KEY"), + "api_version": os.getenv("AZURE_API_VERSION"), + "api_base": os.getenv("AZURE_API_BASE") + }, + "tpm": 240000, + "rpm": 1800 + }, + { + "model_name": "azure/gpt-3.5-turbo", # openai model name + "litellm_params": { # params for litellm completion/embedding call + "model": "azure/chatgpt-functioncalling", + "api_key": "bad-key", + "api_version": os.getenv("AZURE_API_VERSION"), + "api_base": os.getenv("AZURE_API_BASE") + }, + "tpm": 240000, + "rpm": 1800 + }, + { + "model_name": "gpt-3.5-turbo", # openai model name + "litellm_params": { # params for litellm completion/embedding call + "model": "gpt-3.5-turbo", + "api_key": os.getenv("OPENAI_API_KEY"), + }, + "tpm": 1000000, + "rpm": 9000 + }, + { + "model_name": "gpt-3.5-turbo-16k", # openai model name + "litellm_params": { # params for litellm completion/embedding call + "model": "gpt-3.5-turbo-16k", + "api_key": os.getenv("OPENAI_API_KEY"), + }, + "tpm": 1000000, + "rpm": 9000 + } + ] + + print() + print() + print() + print() + print(f"STARTING DYNAMIC ASYNC") customHandler = MyCustomHandler() litellm.callbacks = [customHandler] router = Router(model_list=model_list, set_verbose=True) @@ -217,4 +357,4 @@ async def test_dynamic_fallbacks_async(): router.reset() except Exception as e: pytest.fail(f"An exception occurred - {e}") -# test_dynamic_fallbacks_async() \ No newline at end of file +# asyncio.run(test_dynamic_fallbacks_async()) \ No newline at end of file From edbf97adf22f9515953847f33e1c3e8e9ace8538 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 12 Dec 2023 10:57:51 -0800 Subject: [PATCH 449/460] test: testing fixes --- litellm/tests/langfuse.log | 2 +- litellm/tests/test_configs/test_config_no_auth.yaml | 6 ++++++ litellm/tests/test_model_alias_map.py | 2 +- litellm/tests/test_router.py | 2 +- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/litellm/tests/langfuse.log b/litellm/tests/langfuse.log index bbb757738..0546ed7b3 100644 --- a/litellm/tests/langfuse.log +++ b/litellm/tests/langfuse.log @@ -1,5 +1,5 @@ Task exception was never retrieved -future: exception=RuntimeError('Event loop is closed')> +future: exception=RuntimeError('Event loop is closed')> Traceback (most recent call last): File "/opt/homebrew/lib/python3.11/site-packages/prisma/engine/query.py", line 112, in aclose await self._close_session() diff --git a/litellm/tests/test_configs/test_config_no_auth.yaml b/litellm/tests/test_configs/test_config_no_auth.yaml index 47b83d71c..1dd01d619 100644 --- a/litellm/tests/test_configs/test_config_no_auth.yaml +++ b/litellm/tests/test_configs/test_config_no_auth.yaml @@ -67,3 +67,9 @@ model_list: description: this is a test openai model id: f6f74e14-ac64-4403-9365-319e584dcdc5 model_name: test_openai_models +- litellm_params: + model: gpt-3.5-turbo + model_info: + description: this is a test openai model + id: 9b1ef341-322c-410a-8992-903987fef439 + model_name: test_openai_models diff --git a/litellm/tests/test_model_alias_map.py b/litellm/tests/test_model_alias_map.py index f4647fe7c..b99a626e3 100644 --- a/litellm/tests/test_model_alias_map.py +++ b/litellm/tests/test_model_alias_map.py @@ -17,10 +17,10 @@ model_alias_map = { "good-model": "anyscale/meta-llama/Llama-2-7b-chat-hf" } -litellm.model_alias_map = model_alias_map def test_model_alias_map(): try: + litellm.model_alias_map = model_alias_map response = completion( "good-model", messages=[{"role": "user", "content": "Hey, how's it going?"}], diff --git a/litellm/tests/test_router.py b/litellm/tests/test_router.py index 57711082d..7e859094a 100644 --- a/litellm/tests/test_router.py +++ b/litellm/tests/test_router.py @@ -366,7 +366,7 @@ def test_function_calling(): } ] - router = Router(model_list=model_list, routing_strategy="latency-based-routing") + router = Router(model_list=model_list) response = router.completion(model="gpt-3.5-turbo-0613", messages=messages, functions=functions) router.reset() print(response) From 902b68dcbd8e64a4a0ab6dd8024786c938ef1237 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 12 Dec 2023 11:11:09 -0800 Subject: [PATCH 450/460] =?UTF-8?q?bump:=20version=201.12.5.dev1=20?= =?UTF-8?q?=E2=86=92=201.12.5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- litellm/tests/langfuse.log | 30 ------------------------------ pyproject.toml | 4 ++-- 2 files changed, 2 insertions(+), 32 deletions(-) diff --git a/litellm/tests/langfuse.log b/litellm/tests/langfuse.log index 0546ed7b3..e69de29bb 100644 --- a/litellm/tests/langfuse.log +++ b/litellm/tests/langfuse.log @@ -1,30 +0,0 @@ -Task exception was never retrieved -future: exception=RuntimeError('Event loop is closed')> -Traceback (most recent call last): - File "/opt/homebrew/lib/python3.11/site-packages/prisma/engine/query.py", line 112, in aclose - await self._close_session() - File "/opt/homebrew/lib/python3.11/site-packages/prisma/engine/query.py", line 116, in _close_session - await self.session.close() - File "/opt/homebrew/lib/python3.11/site-packages/prisma/_async_http.py", line 35, in close - await self.session.aclose() - File "/opt/homebrew/lib/python3.11/site-packages/httpx/_client.py", line 1974, in aclose - await self._transport.aclose() - File "/opt/homebrew/lib/python3.11/site-packages/httpx/_transports/default.py", line 365, in aclose - await self._pool.aclose() - File "/opt/homebrew/lib/python3.11/site-packages/httpcore/_async/connection_pool.py", line 314, in aclose - await connection.aclose() - File "/opt/homebrew/lib/python3.11/site-packages/httpcore/_async/connection.py", line 166, in aclose - await self._connection.aclose() - File "/opt/homebrew/lib/python3.11/site-packages/httpcore/_async/http11.py", line 241, in aclose - await self._network_stream.aclose() - File "/opt/homebrew/lib/python3.11/site-packages/httpcore/_backends/anyio.py", line 54, in aclose - await self._stream.aclose() - File "/opt/homebrew/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 1261, in aclose - self._transport.close() - File "/opt/homebrew/Cellar/python@3.11/3.11.6_1/Frameworks/Python.framework/Versions/3.11/lib/python3.11/asyncio/selector_events.py", line 860, in close - self._loop.call_soon(self._call_connection_lost, None) - File "/opt/homebrew/Cellar/python@3.11/3.11.6_1/Frameworks/Python.framework/Versions/3.11/lib/python3.11/asyncio/base_events.py", line 761, in call_soon - self._check_closed() - File "/opt/homebrew/Cellar/python@3.11/3.11.6_1/Frameworks/Python.framework/Versions/3.11/lib/python3.11/asyncio/base_events.py", line 519, in _check_closed - raise RuntimeError('Event loop is closed') -RuntimeError: Event loop is closed diff --git a/pyproject.toml b/pyproject.toml index 6cf094b1a..7f3327002 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "litellm" -version = "1.12.5.dev1" +version = "1.12.5" description = "Library to easily interface with LLM API providers" authors = ["BerriAI"] license = "MIT License" @@ -55,7 +55,7 @@ requires = ["poetry-core", "wheel"] build-backend = "poetry.core.masonry.api" [tool.commitizen] -version = "1.12.5.dev1" +version = "1.12.5" version_files = [ "pyproject.toml:^version" ] From 99b48eff179d66ca9247b3c012fc0a6f32a01442 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 12 Dec 2023 12:18:08 -0800 Subject: [PATCH 451/460] (fix) tkinter import --- litellm/llms/ollama.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/litellm/llms/ollama.py b/litellm/llms/ollama.py index 40ff94390..9404dd920 100644 --- a/litellm/llms/ollama.py +++ b/litellm/llms/ollama.py @@ -1,6 +1,3 @@ -from email import header -from re import T -from tkinter import N import requests, types, time import json import traceback From a25623c2465e2c0d02a7014fa6f8e3710fbf40be Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 12 Dec 2023 12:19:42 -0800 Subject: [PATCH 452/460] =?UTF-8?q?bump:=20version=201.12.5=20=E2=86=92=20?= =?UTF-8?q?1.12.6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 7f3327002..0039ca95c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "litellm" -version = "1.12.5" +version = "1.12.6" description = "Library to easily interface with LLM API providers" authors = ["BerriAI"] license = "MIT License" @@ -55,7 +55,7 @@ requires = ["poetry-core", "wheel"] build-backend = "poetry.core.masonry.api" [tool.commitizen] -version = "1.12.5" +version = "1.12.6" version_files = [ "pyproject.toml:^version" ] From b77884bc052031c22392f8c0c180b8322652c265 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Tue, 12 Dec 2023 12:21:27 -0800 Subject: [PATCH 453/460] Delete .vscode directory --- .vscode/settings.json | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 242c7c86f..000000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "python.analysis.typeCheckingMode": "off", - "python.analysis.autoImportCompletions": true -} \ No newline at end of file From eefb2bbf09a293d29e7e6aeb7a20fce002b07edd Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 12 Dec 2023 12:22:12 -0800 Subject: [PATCH 454/460] (ci/cd) run again --- litellm/tests/test_completion.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index 19473cf48..b8270ba7a 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -61,7 +61,7 @@ def test_completion_claude(): print(response) print(response.usage) print(response.usage.completion_tokens) - print(response["usage"]["completion_tokens"]) + print(response["usage"]["completion_tokens"]) # print("new cost tracking") except Exception as e: pytest.fail(f"Error occurred: {e}") From b6b88370cae9aa97c3d1c45e0bc26e5ff5ba859c Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 12 Dec 2023 12:26:15 -0800 Subject: [PATCH 455/460] (fix) from re import T - junk import --- litellm/main.py | 1 - 1 file changed, 1 deletion(-) diff --git a/litellm/main.py b/litellm/main.py index f2b1a1fc0..cfd285630 100644 --- a/litellm/main.py +++ b/litellm/main.py @@ -8,7 +8,6 @@ # Thank you ! We ❤️ you! - Krrish & Ishaan import os, openai, sys, json, inspect, uuid, datetime, threading -from re import T from typing import Any from functools import partial import dotenv, traceback, random, asyncio, time, contextvars From 766a6b90140cd9e51e4354952baf039202a21ee8 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 12 Dec 2023 12:33:03 -0800 Subject: [PATCH 456/460] (ci/cd) yml --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 182735bfd..1ab163653 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -61,7 +61,7 @@ jobs: command: | pwd ls - python -m pytest -vv litellm/tests/ -x --junitxml=test-results/junit.xml --durations=5 -s + python -m pytest -vv litellm/tests/ -x --junitxml=test-results/junit.xml --durations=5 no_output_timeout: 120m # Store test results From 6d768783820f10a00ff1a7ea5f98efab7992f23f Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 12 Dec 2023 12:38:11 -0800 Subject: [PATCH 457/460] (fix) pydantic: Field "model_list" has conflict with protected namespace "model_". --- litellm/proxy/_types.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/litellm/proxy/_types.py b/litellm/proxy/_types.py index 7ab0d5fe5..4cf51d3de 100644 --- a/litellm/proxy/_types.py +++ b/litellm/proxy/_types.py @@ -169,3 +169,5 @@ class ConfigYAML(LiteLLMBase): model_list: Optional[List[ModelParams]] = Field(None, description="List of supported models on the server, with model-specific configs") litellm_settings: Optional[dict] = Field(None, description="litellm Module settings. See __init__.py for all, example litellm.drop_params=True, litellm.set_verbose=True, litellm.api_base, litellm.cache") general_settings: Optional[ConfigGeneralSettings] = None + class Config: + protected_namespaces = () From b6ff59b62f53ef6b34c2544668cc78bed9b896aa Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 12 Dec 2023 12:50:36 -0800 Subject: [PATCH 458/460] =?UTF-8?q?bump:=20version=201.12.6=20=E2=86=92=20?= =?UTF-8?q?1.12.7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 0039ca95c..e27d02d87 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "litellm" -version = "1.12.6" +version = "1.12.7" description = "Library to easily interface with LLM API providers" authors = ["BerriAI"] license = "MIT License" @@ -55,7 +55,7 @@ requires = ["poetry-core", "wheel"] build-backend = "poetry.core.masonry.api" [tool.commitizen] -version = "1.12.6" +version = "1.12.7" version_files = [ "pyproject.toml:^version" ] From da9976441b76067b6fe4614ef45439f184bb7697 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Tue, 12 Dec 2023 13:49:51 -0800 Subject: [PATCH 459/460] Update requirements.txt --- requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index f3be861b8..cd7780fb8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,6 @@ # LITELLM PROXY DEPENDENCIES # litellm -openai +openai>=1.0.0 fastapi tomli pydantic>=2.5 @@ -18,4 +18,4 @@ celery psutil mangum google-generativeai -async_generator # for ollama \ No newline at end of file +async_generator # for ollama From a251a52717fd712fd4a8a9e66e1e03c011d3c541 Mon Sep 17 00:00:00 2001 From: ishaan-jaff Date: Tue, 12 Dec 2023 13:54:17 -0800 Subject: [PATCH 460/460] (chore) remove junk tkinter import --- litellm/llms/openai.py | 1 - 1 file changed, 1 deletion(-) diff --git a/litellm/llms/openai.py b/litellm/llms/openai.py index 9489e44c3..b327a3a4e 100644 --- a/litellm/llms/openai.py +++ b/litellm/llms/openai.py @@ -1,4 +1,3 @@ -from tkinter import N from typing import Optional, Union, Any import types, time, json import httpx

m@*+Z+E5;+JSD-hB)$X>nrN zR0mV2sj)X1l9(Kq+Ywss|J#nHw3^?a@`ntvaAkYC?2o~fLWu|G6e*pPa0#?L+TgIQ zt%con%eh@8|B5WL4Jy(}*DR?kJChgXV{UD;*A>{!t#vM9XDebCW?^CnEqxUt)-*u@ zBt5pD=e!wy4T7HQ_q_q%EazSwjj>+MBhoh4)ZYBZ?BF%z^~loW7&g6NmB^q(57X#c z5@}MDN^H&{6%nWq;@^?@MH2A-zY{PTO5+o~tX)F0%QTt`)Yea|`YS$*-6IEwIciiT z210$H=se#y*|y}c(hOe)|}aBGijt0SH7>@C;JT0s=Vup$4I!~aJBGo*_UP!J)y8Hr}D_88~%FB zb_RiyuRnajOpJaCCYeK-0INS2Kgi@l2bvWfNp5Rm2QyB$5*99mHM{;kv*~ysLIp3e z{IG9IzY_S==W9njxUX-2B7zWv;HyKqf$X-3av#C)Z21_sgkm>qG1AyM;Xx2_FhH$3 zfBQXxCF5q5<2`P)2z$kY9`4Vx}1)x87;8d>4i~&HhTD! zQHY+5#(wV(G$rI;!R%Y3Ki6r7SoyYS92S&BumLwbz$bM-o8;^={2#jJYHZdLqAU62 z?(NE}0av=mQXZaRXI~vy$vy0k27)rmo-&5`>nPYhv9ZurLKQB0u@_Hb3M&&IXGO*D zkGH(yD60N9J=fo-8u?d6!+EYe+^*4`N{hZuh6N7?9iTd9Lm)J7W&NP+rQC%6)(TjG z3vHLqSJV0bGNJbEHGfWySP&4(bW^PjOiO!P0Y*aJ`N9?MV9EssO)I{hV8^$Fq#xvuOU=oVe;YK0N|^EkAS zK@|}MLsPkpKRoe=6@<#tegU7yQ+5c{`x(L2_$#lq+~UXfnn_xxvLE+HViEWEXA>T0 zp%bGN;H_uEl@83|D&M7YVbB<$&=5i_A!0JI6!iQi8FM;I%R6NOS$FgqVH@O}CwAtV zxk8G9D*Rq#(!Yrs%K|Iy34x=e=iO8L>Ffw=G&?gK%*m7PQn&po(>eWI31qV5w0XZBj)MBT8|DL?&Y6*r(ydX=@ zDAP#N5VuDK7y69o$4-JDoW+v3bomzY?36)n#Mvw%3L zgl7@$_anqbUe?g&jKl0{Kj$O_TQ^pMjuuSs?nX2$HlR&CDu10;y99I@x3HPk$!I`b ze47D9FGUG9CWTWklZ?TEXi6184yRq>+mDB%(T5uc_4WSxP$ArqtK17P9N!7+xsoXv zzH1=B_ual=9f`9i;UkK=eS+I317^R6X|jlGBqMPrq5-K4 z<+l6+maAdXR^d4)XOmbeL+zq54?dpRAxxovIq{aG=5u8`NS}oRO9Nl$0dYT7`2q^{ zi`XopY&fFt#Zt+FiyQwkHPXE$opNTw+1B@#C5sx|-k4IsrJZ_j86PyCki9=*#{B-i zs5}ZL#ZkcQgi>KqF!sqy6fO)Iu!(&oDCzu+d&Ees=YE|>mPIcnb~8R9%-hiu*kD}c z&cAsStet3K`q z*`Hx9A3<{to%ZW@j~^edoU2CR9n+P|J02GTBOE6TpL8-k6Buy05tivjrYoY{7AEK> ztN!xDdQy|7;lJYS$^LnG!x?dpNRMTTfxu}NI3h@K-_xhQ)bg- zzx8i$Tgy5?^wE}F?Z!tf;QMoj3CR5-Y2W~G0m$?7Tmj@5lpF&py*!*8d>owC+TNHj zbzT^FKrec}XYv3u0HG9Gh^yL$0l{J*;JkV6Q+)x;dES6Rlw2{_S)FqjI*bnfU@PmJSt~ zq)h@@UfGK#DFjw%PN|XY048ov_S@*y4ju#X+fbNAgu-{O(=)8kofbs|^=+Czii-9g z*WPOT4E^yCWn*(zY_|9*n{gH!-?1XgGY(%%q*_i;WeG2r|I|t~-{8_mDE+qja-Ac5 zxr<>GOnMFq!RJ8)Y~NED^khtXId)QnV5$_c9qaxS4GG>4c%Drj^Ia#6YJ^p9a0G{C zjxZZPRYT;Nyjr=PBN~GawwqSCT_*(`gb*>qE1l@cKpjz&*%8@-U~!L90*Jxg^3+LG z)ZN9$Y3cG+ya8LBp!<8Yh$BMucZJ6;7?-4-M=p(ygK3G_>QSfH!VR9)AIw}&E!`lk zWU6-3%yZ$?HKLhl7fop{{?Y4ah@kH&my`A1#O_#GG}!41M^R*`NY%MqlfGD7_>jJe zYyA_NY8FjI(V#Pk)=unrl~2^th|%R9jFVKsJ*qh#_?zD0-1;XIV){D#X!q*o%|bzKS~=D>Kq7 z8D5vU)o08!x|pc~CR9$c`3CiAim`tGT3;hEg$61x;;kNEUq}$(F1fp6pi{zw@7HIi zjXGIXVjSE7(a@MKTaB5#msAhZ5JX{%%=tR2B&U)P6&^bw( zG5Ifp;=|Gbm8Y(3u)WDsM~g59o^@POK2?THAs`O|2(S#aPx%S!_A1Rv5QP0T<%3Lb zU+9s4$Vc*J`y0C(V{wV;D|P5H@}Qu--DaMD-@Ii?%21%z}_o>FLcsBBe`8dih ztiN~2yF4MPpiqSpm0|@wwS(mr%$ar7ZCwIOc+J7*&M$BTKF=(Ct>rPM_1@}q2Z2B6 z7=~$+smtu+-$IdJ-9?S=`;Oi1iKqLy;%04Krgm2ouykQ4j}$b*$A2aClyxR_Wc>WW3=kWVp`&ebplMd1j|PX3usPzeA&(>~hi2IqiRjiYcr?z+y}h$mZyg}e(q$`)vGu&7?2C)bhfug=8zoL8wc|eW`9q#ZhZ!6M3i{zEihprmx%1_dA0Wz=cVM?ib-0sU+$FHd0u1R9(RG0 z#ew#Qy#-KZbv=^2+_POW4=WYE6SMaJ!i ztHA59qJU^^ETi-}k^oczvwT$N{{53on#nfu0jU<^tD(e5($&o`9X#wX&u*dDK^7D{ z-cOhgdpoRqrgOg}Zld1Wi&=L91~i6=DbSwq+$YW=P2%LE(cL5*WDk>to|HZ;K&2?+ zpZ_bV11UQ#LsW77e$)}Jt2&U#8GVYwb1KE{PQbjAijsaOE~=pvo$0$HX?KY;9t1F- zU^rPZlK*ttdBn@#`>Kj%u18pTvP0*vo`6X3z-)th?n89m%0#Q!jA0krz(CPa|6PgV zn(M7ZxRx&*-sE++ymXfM_Z=dL%t#E#xTF$r9Od6>9>j5Cj~BPZoH}-fist!?o&N|S z(1Rj&L}PH2@)%o?@j|L_O>ghGjx!oXLJdLl|L&#*jvx)V{rqyEzu`Qzq8Wn2JNDvbBHr)8)X}sOl;G0k=w`;<3$Sn;v_{5)Wn&~ShS_T z-+hF;gb`<>dgP`ZdH2z+Z&k2VDX4HBOMHE+v2qhGGOkZMJyNhBaqO+pVFQ=%Jx+y` zr+Su8SgN-gfVmovJ>nfwc9!9*_uLC?XDVLrV~6z7uK1=ffl?PkJ>|DEnbh~@@Z(`$ zUiny2fefKCBS*MOY-&QwUVU=>Oq-uVih4VQ~X+~3j} zgzJ>*Z5SW=!0*0@k+4r{5oJJXnUuq^732=6s0X1Klz0tQ7^{NDK|NAq9fhbn`}U)52X*d9tOSktqidBDYK3^gd%E39 z(JI{&_qhi72Oy^YM+31jeqk0=%7vFyM^0KB#z?rZ>%{xL4%fT1)x(c5;SKv2c&AC( zp;APO;YNg=Cdq$cIgyR=viV z-dU3BhD;xXo^Kym3pXad6S~l{XLRof$y&}!aVyo}K%N>Fq*kC;-QqJAS{Qi%6u-WJF#9F>+?L=kDFdf4Rg0sMPGBE6V!sf!85nXuXN6Q^-5*tiZt zC9Pn<8%Obu(IG@9Yo3{fq?~BrkH0FXgnSQ%l!BFq-pTDp{iw*8R!Q8&>UOsU4O=k#r zBcdcu5q%$x3QNr)PVji~nBzT5zOp8K$)qn=Zw)RzzHDD`$STo<~F^J(l`pI#r~V2UtOuzo8$`wjC=3;lb> z?($NTC5s%wk*`duKr{3JzlkH#7(r{2y=q1Es*Q%P0E{$2F%t>Z%Z*3HFLSQN)h$!M ztz33?43k(Whl;9ENw=YSGWWUSkoX2O?;<0EKyj^+a7iUp$Ks!fuW2n<*Pgei!`D%Z z3X(2d2XG(vEYJl|fhYX-P&?X`;N|o4)Az~mDg1IfSv1y3wk3^u6Da-N&op{eiAi8O zPH(z{Fu8u9U4=vx!C>#H&TMAS1(`#0l0_C-7M5~a)0+Gp>9Uk5kvHrWEx}nOf@To1 zrvXf^A6%af9Sh`*b%X__n6KZXOe`AV%OKqe>3GCFRG0XoB+640&7FU{>L8mGP+2bZ zaDI35vSt5l474N$*Zx6L{p&ZBEbXV@-Av>bYe6OAyX#r<(*WGxZ02v2D-xs^q#>%I z=&0FikF}2kC!`ul`Yq{;n8>q;xraWT42Q^WpAzm1B)N4JiBE}zoQW-lij_Kcsdv$N zrR)QbIMrt*%Lcyf#n86Yckq2TsH(r;ET`}Ac4=%_JMdQ<8)@Yav5e-H{v1|+fpUT7 zzm`!xMR6h2}lv;!!+WP@$?a$WBo>JEXtmHH=jO2zrSsG=&K;DP&5%|=ezkS<&$ zaWt^eQ^U6d0%TX)&h+gVu~I8hFuqA13%_SgSVPWI%B|2wNB-^t;&&-UP7uVQYcnZ^ zo+CumU$teZ@fhL?;I;0LDL&Xu+`DtPHNyUo^2JCnc%f%*_yB6sOrKk&0gylH(dYR`ox!qI)5JZ znd(GjV{ZS%SJ6;ex!O)V#_3pKQD-ggbvPD_fDSWNRi?$D{sgI}BH3+69t4MosUb!X zKIN)d80U&>dmL6%$LHn= zT7GFG@~i!?ggU|lg7eJ4*uftrfMs%b?v0+_HG14jZLRst)=3A~`q*yX@qrO=U|76r z6m)w&7t)qTx7emeG{PAuZHfXGJEb4vux z*UK9{Z?nTbDZ|2qYlrQ6F1eS_fV@8(33TAZbs5qL0GJVlwNC zeBXhoO3cHLk(Rt$;(LnJQ3@uHag$8bhb?(c#^x;}%=zRnP0{CD;fw|h-1Odr0Ls7_ zL_>sLPVV+@P)hu%gn(eG$9nQD19U?w)U#xU6P7c9#Y!F2L8Czt zRe^DO1#tup05Kt?+x(iw-CbV@C${k0LWfp-!~z99MSfew)^QAPuVd8Eb{#Otnp~&B z)pH_S!yTyOGmpt954XwvsuJ_@?Cbmbefzw^kUx>wz#kKV6R2eMoe@-lp=Ca4K5QM) z|1kBiFztSt8wb)|OmSgtm|C$0q|@+so!K6y?)B=1uU%P$Kj;`pxzgG;^A-D*i*Avu zzru=y0A)ocKf@xt+XQo!Ca&3tK~aFk;>l?A;Go>r&Pg^S1A!7h#yvaEm-AJb9jv})$4!W4~%ZU5tWcwSQ zHu2-5((Hr+#gf@jmCA>RgqN|p;{a$7zth=wl^Hky9G-aRP9j>ILhuQoc6*|vS8xTE z2}BM#Qr1z>S}Jr0K$a<_v|m6(z@^9aEa;sTMAp8U1Tj_Mf_pM1mo51Ft*pQY+SB6^ z6Ko0h89p`)0_%N(1)r=8jfX63O)rC@xd#TedtwD@2HS)^ zG0gXMxA$`FS^QK56dH8LHOS%T{qb>(H!u*EQn!Qe@p==2Q<#~K!V2kQfuDB_>v-IOyzafa8=79VuFH`dnMI!eyfJ>_$(}XyvEddM2cUhz(E66>G zv$fOENfy^wnnPU`1N@`Oh}`XkYAnQ=E&-|+Tfsv8ao(? zwuyqZ2?&rj7xhrSH`;nH#^lB-#D3Er)(T;?tv^`Mrruxd5=6fadIj)J4Si%c=lfqh zsLK@544jjLP4?j6p`qe^znLc0<1*CSSAUNnJnw5@Z9G&D7-cU!4!^=0(;%`o6;u2+ zPeA8kYLujzM`BrLJbWunr>mXKB71)3vLm#n*;qHvPJo+Ku4dD6G|-s)nfBdXQ*kqM z;zb&SxL9$LMH-SEE!fG!%qR|LZGIz6K^)E62qH|0{}iGKQ_~3|4NO0A}o&k_g@~ z?9psQBItnCk42mL7|}~Gt|R18JP&2qW|HG5UXsW)G}j@*7?GO-LL2ChB1Pmn9M^Fs zLF76e*HPjyo`*P0=f#nWRcrX!`$dQAu$|&4{vtP3q{i!~y=zm)Q5X4fBDY4v(T6SR zBZbn@I$TFDcoSRG7hbMK!%hW+97-<6s?7yQ3x`x(t?YP_C?T#!%w&m{~^!t|B|2k4|#_FANe1Ptz5D&JNeOq4IwV)ANF?g;{_W`T+Uv?2wMna|Dz=g zvy(WQy$Z)|=aWF#iv7_d{a}g1?CcrRM2bvpW_tM45q?szCX2MR{J6imvi!04%D`>! z;-mU8#R=sFJS%Z6QZdtp+5Kk_jy4_+6~gX>xtt3Rd+XZy=)$)7cXk=bK339QTYQb1 zrvpf$D|!1sU$Sk+J{X`G|D+rzl}4A}uef&bMoz46rUIglEue+0f^U>3OP(l|p2f## zvv~d9Zo_^11SQXB+!44uTne8(t!9e;CFATWrr6zFLzn-FqxV)A9G zp!L+HR3-b5G{(kmm+pMu#!oaf82*ClG&udDR<;-=QNyAKM`W^(h<{6%amX^)`H4l$ ze1ueQmod})>6LY$Mh?d!dPJr?>z4>1nNPmj`ouS_61(1RKadb~S5*Dk#|Vhc?cGT3Owy}CrP=J zxD<<47fCw3Q~GW_Eq#)rxrWU+e9#o1W(&0mdT{M%(bCS13h?3_ zgggZs<1O7hJ{5Dt*!2oqk3^HxqJh)*+HLa2f;e)Dj`}rDgo`;^E4Dt^`x>Yi$mJ;- zCnI?x!@sK)5x#~TS-@G-V34sqs>0&NR4jS?j88Q{oBkbL${wm~Q@Nbb(zfXMH01Zo z9gpY*kqGoeU7xdxWg}Xan;{PQ8a6Hn8WvW~$VTE};??Pj0mGx>JRa70)xt6&IDy@g z0hZf-w&e>}UtouK=u|8qL(uu*ghCI{r-X?;qJD`zv+^ndLsmH<)x-~ShnUj-XxMQf zD4=#eUz!5)g>*nb<$PAep5}*!-Zuh80EfOixjx|%vQ>TvTZL)A21D8T_ZyN*o8I~` zfofr=wIWa>HHm|VfJSiNg@!0kk0#*E$tc11+*&Rb?K5gre|1XHOiFt4pJC03zz*Qe z?IQbK43+6vLHaD^1^Hr@v0`)MY_i+JPclm1&(D*+I-Q4R?sXH%ie?}2FvnhDrm1-V z7;{F_1-_|T&e!asy0{=(i$B~ob8gzP_2W^DJW%$Yl{#AiqMel}m1j^F?1e!oLZ*8b zPOj(EF)AO<{-!-weroBTh{jF&O`DcIoy35<&OPg;p5f}WW)f**sG z#O_7a>Fe8MA2*^AX!j6orX$EjiPn<3z7JmhyjD`w-) zY8Mvl?&Ehpi?!QyXbT@N_<(0G5w~cNPz< zPC@slE5u2&e2rtd(g#I?HkwXksIF$NR(>-B&S7vAsFb_GH0GmxEw-LNO*a>yxBKu= zQL-tiw?$F}!buU>$@R|nS9?+FHL|Umh)am_7}=2jPUN;SUcSe?z^>}_kKcv|jCzPa zln1^y)fC5t!SE|@nPVV>fP$7VFpJLbrDCNYbc_Wl>+TJv#QdbRZ}6}Ya#q$Sb<}qZ zh8RrIqtNoa6D&kBesSywN|ww~3P!33!Il=DmSo+=(LYmlUIclH4ro}~g1qzB_nwe- zGGap87e|g#di6_Jvh-HwnBb3AeAAh}J(!;itZ+4Uce5c;#=i@H`{K<*T1qBx z5GCx#?n7Ga;p7jAeilS0dGt2BS@znM8+sUn2e+jaccA z-0;U$R($|HPVFjWvUSThynvIHov@l2p1N5v_m~T?oh7$_i&<{y2ZFSFSd=-RuRPN! z^Ur}(F0qQu!KJfP?l=M17dstk!rf6<7Ys5!-Y=#q7^{D&b`9h+z!DX4!fItR1JM`Upw+k`vA)qs*8%*T z@&?TghbyKq&sxBFM_1Rd=Edqq!gohg$&5BiGy0+I_kR)!m`6g+{X3j84|$DeSC?Mm zP@)qpT)|2icPik5j?!>Y^TEs1lR@az&eG*tYvjJV%(#k%9|ZEt`~Fl_4)SBy<{q!; zOKBj`w3FQfGq8B+r)}rKp@6iL3!us=ovB8 z&d^)+l38d_z55nvf1FXnm3QeZRbPNd4-?S1OmpO^f9rRD$F)FG9-%FddcIk9{{D6! zYuGrd;`Z$?{e--78ZN`4`?%RS9TA^(cLB)qG<8G)+C%de%)Z)v_bI+1uha*JdMMv- zv@gpN^X}LHVmM3b#8*2h-_UeRl_wNF%YL(Z755i@%FjD3OAd4bM?t=IIrTEh=H)!W zPn~L*w2vhAFCsfoFg&54x6WICO}O$NvKescA3$rLMRrO}ivwMQak1X?fY>XkeLD}i zcKm$t1oo7D9Y3-Yvr47DJD%TwJv{2`^EUY3*}nRW05ztu)UPf2w<5N}6PI$ot4t?T zuS_BK+!OB98&kV(S+cmlLtNY>!2$28zMluan=&1ZiFx-@fW9!ji!YCu3~PTs2tuv;|4C`4a-OwqNB=zDEiGBl8oXJ+1mEI?H|Ci_}PZAjj#W#Tdg*7^%^{m*Ie$z;7i!4iF)%XIa1 zk45R;*7!pdAbPp|_g-86Fd%;lLf&(l?h|GG0-5LH^4+(tdYbDBYnQKq%y*U?hx%J& z$74AnF6XJL_EYh}HvbXP=KwM1JzM>;iv3kHbtj|g>yVwBN*Yi+=WaXJqJuZD0_8zv!w8mAKBKvY6WX(Tx-aj!-24NRf6tO;Q0T-S2xYm6{RSVyY z{~)r;N7xtT_?ins&l_@HW(!Kr|G_t@#@Ut$wTqbD^2DWwcHgH<=Jl~YhDgZ#jP;=N z`-QOYa1==rf6&=u6zIYkhQyuk{g4Mgr&L_J+zTG#os$*!mrL&t&i^dBcHzW(i;E;F zkA?Y-D=0RP<@A*+$gX_)mD}L|0mYwXkK}y+w`#DS{XfEgjQ^{@Huw+B(`9%Cc;T!T zv}8d)Oy-35`thf#02x=~QAD$K`p({75mRGYM3W9IU&+eXJjcLUz4*8`?R9$klCx~> zX(JNk|TFiaIU97 zlFN3M^i$>BUJ2cs$9|Fwg|)`Lu^#wi7<1rb`yY5`E&Ko(TdYL@-hUpYp@#1DW4{&G zGH$2*M;hsvXZ&f}T^&0#%4)H+T}gjEr8JnoN9FWESvXIh`thw8IXy42_frXaQeM)) zw;T+A?uO^T4*x%Uts?%h|HGjM&wm~MZ+)p&%rj}N8+ItL|KIwx>id6z-F377#|=Fd z9BB33!Nx}iIpeevrEc?_4bS26>{wqzl3aL2=}s;+lSl7mUb;=)+gk|5(jLZeK4VX} zk9)2+I?eZB>gJj`w2x7@j0qbP(;r5Bx!|s0;pS}b_*)~JHWg+7=4^UT&mFRrDbHdLa{;$(O9NfRcAscy=|9vt8?UF}yGOvD{CPj+K6?#vGLJIfw@McgM+p4;Mp0OYY{0;<8HAb$o zaKz_HyZpTHMgjVh1L1>iOrrkx%!fGXrEHU>=|gJ;P9!zVsU&QM)|ssx5$qbodJ~AO z-nHV~`PpVr{Mcr_`OCz4^QSYKNdk+*bBiR-R=d0~V)$Q?0~HdZ_bRw3DnIv@^geKF zYlr6SRqu;-+84i>3aDEn=V3%9#~z!I2-fY9NVa7F{+1&F$K{^lKVk-wcyaS zFLnV2N`-&on1bJH*1AfJI}g55-a=h<@tnvsdxdkMm&MlLuWw!ENgf>00Bu9YJ$1>96;1eG3>hq_yokV(H4bGGc+68Bg;UtvUiy^f{!b`1(#nFo+#E1=B9Lky><@UKG z79TUx9p*mdM2inpfhH*!5f~z;NJMX~zxt`su=jZ{C4gQL&WlgkZ#%`QR21v;wFJC0 zf*KRBNaJq9fij1Zcd?@Sem}j8oJfYAe?C0y^k|37E^dfhwVKqrN36f^J( zQU(&CX~$F{&;viuZb2!7ZZ8wkYKm*%L;R(2(l2jRy1E`l46%2#Icy4oVnpwx!K>&4 zo)j#PFTn5Xec}E2>R`XmS&6k*|43dV-^UeAeolI1&5*t4&Ga@$hnq1f>JP!9u_%;{ z>S3u?%A#pcZ_Jmp(&fLz2SB4Y$jJjhoTz*9OvBh7PBGWY>^|@vp>yalf|4`>Riu5i zrBz_{AWT~qF1Sqj3F|s3ugF&&9_ug7d84KRLW$aY?5dP8?@o67`dTx40^y+xV~xQ~ zNUDrc(+AP%-ZGfm}8y-jo1?j4-)_fka&besg_i-xUp_Z5}h%|yhd z`)S0PhN%(nc_$I-6gS1_GdqC`U;!G+jrn#nAV{6yU2FupVR=9CBYjBD6#WN>QdE;2 z@4Xk=OLhY}9#V&F_UJS{lMBJoSCuk{;*_ztyB?;m|NQA6#dG~f$KK<(>?!5-eQk4s-0I~;8HtYOi-m$Ij* zrz~h3@cuc2uW+t+9J#a8>7r2JqhMp6oI)W|0w&tzg$88nP;gx`OEl zK$YicX#Bx4um&WZnmGsze;f`F*1{xw*jw-L=UM}xFs%arhZ7MfR&^@abPhZkcQx^y zOhU5Wi*b+uhdt>(1T0~B`KH2=uoPfMj*XN*FgknsaFlM$5?B2XQL-hkXe4-OR=sOh zvEqq2;qX2@J>DfP0k9w`q{vI%QjEaB3v1BqU{h<{mtz{&jOgl*Dh)sw(4Ct=D$IF! z^(Ut3$v-*oxE4`vRfhkB=JLh0JNZq5a_*U|3P3Eu;-Bnh^$T-k!E?~s9h1ET#?IBB zoTuB#p@S4q!01mqi7zZo^Jk3a+#3IFavGT5WIG<_a#>&fDH0KaCB<+a%iX&iHgxO^ zl-e9x5OOmck&MISsmdnDhd9vYKBgx$d1sJigf~2o4VJER*p})9+Zs)+M%149d{W}% ztB?}Cw}P3fvI;u$@TZ;X@lA=@HA8?kCnD>&w^x74s{8^<<81N*l1|UB{(Aa*(2Dwt z=h7sglew14$9$7*1~uHC8bPgCGYJ0Tvf55Sf-9J0PYtPxDwanN!WwaY82-$4D)=yN z=G@AZo!_(g*9KU}3{{8Fs5e8f@zJD2EczO#zkMVz`N(>Z;U&Pfv z3^Y>wu)6c-{0fA$n)bi{AFjRvlF!Q5~Qd-frf%thv5Qi9{jlyI6METVv?CHYWGyx zbap$vpI(y_vn$3x^j85$NV6=p$2EDI$B}m~E;SPMe17`_8a;oUU!*Z;EG*w2?c$=* zrS})UU9v{T5~kyKXq|Re3#j;YU3Lf9>FQx)KatXQ>jdL0n9hWqda3)f-a}H~K z&T5vm`-LR~0EjPs0V3+DRZVxl*J!K4E|m<+LRbOkL7|{HPS1#oPn|!O$sn~WX^Cm zokfvPR_ccjAKo}`u9yHd-6>N1P#Ehh0BOcRZ*G!`tp;&p(0l313o4jOFsel+coOqT z4GKCe&&R*v)!}Qly!8#LFzH|hCSelRPY!Kd%b^;y)XRBX5ASff4fR2g5f)SWeZ%FSajiMhk7Xdj;A?2>p} z1)k0WJU-oLU4&r(^CtW+>OG?d3(LCIJMmDY$sU@6+7zLX9p&96jGRrU=X0LPdV*^S z3vzIZsdauCXTs?#PI49UjF&3F+yjLZLy(L!wrQJ>x!SBn9X4}twC6cx77Z|lXYd?Z zAp<-|b_d}ZH-%2KkH5jV5!7XGy`~16NTUEYg1B?uyUU|y_WQK)-Rg4=ZAE~31AMHJ zGyCj&NUp$sNJv7j1S&SgVhJOvDF#bnAz=#FAPoEw$jb)6V{+@Lr$E&RPBQF~cGW>U z=KzV7yiVApIUsBm%R*yya+^v}4sy?D>0+96DDZhJ4|7Z6n(fWJ*`4RYDw4oz9E<7n zcEXaxoz0sSJ;Ai$Ccmp=^zqDT)Hq5`iA=70vz zGwy8AHw=p=Oj#`)%v-KXKR?Pcd8i9kb_ciS9b>8L?ad6{4_4Jm2Qfa}3{X`SogJ7i z+`QT_-oA((H+r7y3}f>?w)rdzSWEH={_QYfXhAe+P2OkW;QXVNeDbk%^@)2eCN*z*bzW^y`VggDhTRXFv-=oa? z1eWVHR~F90BapW5j2v^muB8e)et54^MyZ9jIVhYB0Iszz0}Yn2oeS=HnMkGD|2*>A z?tWh1DcnlmH#tF$+vNy4?t%lfa@%)sX6{X+hmG;f7jt)nXMVbx`RQ8B%sEw0!*rsi zM$De7s^vOSSJT<2>T0?6byXmN<0=Bi5c}i z&u7yatWA@YyLe#c#03y#UT3n>yKgf-tIeP7({yaC2$$H-xVMK%#X(l5vJ!gY^H$)( zqS{=F=&oKAX-A2aQtlsP*<{Mb8^EFt&bl33hem`x1;WuX5ax2vKYQq{Nxg$ly{PwXR)2`{Xmn@q&XD^{eint_s#rfl+%vM>~R(|CoH zYE@;pQISOGPyyeOME6s(Rq*-(n%%+m&}=Y(z8gBT1U@o>RnaK~o+y{Nzhm|S4tJ1x zrO#p9WrIDth}qTM1jUQ~A?(Y`v7|D1X`T)X-ck!3>@F^{yvhmY`Te1qaN6L@bQ(t|UIAqrm3U zC_2D^=Mk{3!)ybw$5!z6GB2GZm+Sqd2IN|c+??5fwLP1U>Mq*sBH#{;SyEahwNGue zP+USXIaw;Oh{Ck?etR%9>4QPEtw*0z!mkxWV>Sgda)Jw-S%AtUUMz0M-*JGaaYTm( z$~2f~>)hs;lk!k1_@K%MsT^VkcpMhH8!E`E2y_VIjd>@nFM3Eie>t$G+JvXy0`uno+_l#nNV=Hm3t#+eDyx!k~a*gPNN) ztvsliE8N2b9ofFCvXV+}<3xgD*x)8QkS87%)MQ&FO4+cSCv z>d%koaXmH@$7hKGSjy(a(d=iMNoWI_k!?d7QRK6f&F-ddd;T@^%;q{$(JKuMjjWt} zZqGf8^Og4uZ_y0UlEhBHO1WtUP$s(=-_jXeHYv}3boE6A5Q>B(s2_K(F5|29?OUVz{ zF8~g%NvN0@&L%4nU}$EoTV)QQ7ch8pv;Ys%xJT{$Hj6TtteU60J-Y$4Jz}zh?a`7Q)N2-t zRP0foqo0J@PQsp7JeUk+%wg>B-1&5OPl*(VZUT9U$JP?N$n0E|l`@=}D)TM$eExpCy;75R zE-T7otmys3-wNk~2o~~@ic4lp^VFTq3mQs+Q&o^Gk8{dTE>>t3E!vD6Q z@wGAr&*|{E+6NH;1J5U(jnAM32=z7v{0hB;VBj21CwEPmh*0l6sVG-_R(Z?>y5Pj; zsu{Pk4s93wVR1=uhBeN0CCj&X*&m%+cG@iJQl*p_m!{J$|NGxJC?r5Hj>H708=;L~ z@}7pPwU54fzQTQ^ax=;K8vho21w`GPSYYKDFPWJlahaw2U+7FUb9CjK|DWC6+|H(V z7nXCK*}Z#zx0qj8ZVu18znk6P+RLrEkC$t`9l?Vlpr5pQ%5<7|2XFKrsKLGIRZ!q9 z^j^Q!G6Zd}G;Z$r$lc$r2g`*BQm$tQl6gdPEW0PZK+QFWo(6m3lRSj?*%Lda(lKo( z+q*>gRq)q}=aQ~xokM!CmAOwXA(%>60fPl4Z2W(`N}*OIg3?1FkC!IKVXt*5JjDi6 z1H^j3;+l27?_faW&W-Cnb{X2~*WtkVRd-o>MhLBgFm#XZ4=TmEMMn9$Z?}`;UAVhk zwp+{r6C07w?(gp=yED<&g`tsOyR;hPd;q815A;hmzTJX7oq?1HBc7Hi#?%PP$ZLIw zJme~%$(fZa4T8YiU!<^c?4B~4&Jhrn<$k17vyS0H1U*NySwkw9Y(5Nv(Yc|3JOJx|tKUe623u{#_CZJ8a zAU$9x?Om9FR|Rs2r+@^Tgq ziXJtZy@H{3-JcMFeGEMZ1A)~6D<`<^WG;)Dd60mlftkz0LWAMbD!~{qFW?e45tqw} z8Anb#?ivxn@?B_#08B=_q>l1&;r4XTpr8}4xN@&aVUVBON>!dfK`L>=$0A^iMd*+vGsZk~ zV@)7Ek7eE!sX8*Aaex$b(wk}#Q!H|Cr;BDGH2IUdIo}$w6U&0vMjT~%8LqC3%t%EA zD$|6ijacCsV68ac@!(XFgBFoo_Hz5Y(rS7p1CgrP#)B}tU@96 zz>z)hRM3ct0uC?+nym-3{OnCql$0r}mzGE&zltEJ3JSM3rCKx>L3Q|8RQk~v4rCx1 zD0t-hb0WczfX;``Woe0l_UM&D9Q>L2fQQFlzvFEJyv6ennus&FLFRnx=>1R^-bRbi zxj&q!YS&rJZ(hU-9#V@9FmxT@23TGzu^qyiyE+4?g}k2{WurWuU~mUHa;f0|n|`&k z06mpBt)O4q-g*9JTR?$LEh|)tWzkjSUO?o4QjPzt@xcBt%giMouT3TfJ*%H`>ShL;9QgcTW@F=co&@S(rC$9uP3hA+4b`I_j zuM+QqnzlTH4i80nl0`{p9|)spVs(s^0q*^i1y6mU3%MGNyNZk{{Hq>_MbX3+1%|x7 zzMIi&`z7>pjY~(fUpU0r6&`z@U(BB1F2;)?-_K@=nt&yiHPWz8Y|QySH4_^r<(0_ciKUW12di}f3^`(eK!Y(7HpsHkzyErr$;s(Yu-B>WDW$%p|dD|u6Tch`HbDnzun(sG`Sl3aPjxqbZkmn^-HAF{AjabdnmzPF1?Oas7 z#sLCj#5B&ULwwyd^J2ww@8At_af$Y!Q1DeSiH_wbJSIY>lC6ol0P>LMXpz2Pn1x)f z5i4U~3bN1n4R}*-GWa_^G`p=oP~b#RRNR|NHEs zFtcGicL4@03%6aTO|aW49N~R>OX);2Ow;Lne@QHa&xt~?XmZK26xuPAKA2j~MHkPU z*@OBTF77A2z0P;shXL`K`JX;MPdc|*&2jB9+PyMp0oop<2t1h=&Mrn%Q#Z!(nS5x@ zW#2Z}U!@vk++S*?@qC7gluE1w>$r~(F=B_ra((a^M@BP+Cl4If+s^NIRc1yxU-FH8 zDzl7jVZ!e2y%WwR4sHV^M+QkB;G{v}!x;zVQSW8b=jGnDG7pec4 z0bZ3F3~8t2DNkf(4`_J~UnWY!xV%)G-SN5#*me`Ztcp1(hQ z{Nla;_Vw+rPY!lOB+5H?lE`M!I64?UfOu7QKi7&H)M;3StaIey8H(wUWs;ZyKssO; zG*fX_KEnD`RH=zI+y#&5$!vl8G!3x%>mdX%aHTxJ^|fF{^?@}>9uBK8$ntHCIy7Me zk~z5t?eJO23}oqU({%FWe*OM-zrBhBcMqAv^dSIma(c~FT?tBZp-s)7E9S`P5QV-Fac|ffS;8|KX5FgG43T2 z=oP4?%{?W{)g&C@ZJ1xEu;Arx2X@$8=`eLCS%Jw5Gx%U73t5%Zn|7jsda+2oyV$##xuNGy zukV)24pX|6nfEg|Jrm+ZVQh#)nYN9ND4sj=5F6}uo_vaRB?IQqU04dP!YbsT$0{99 zOxQgSPh7()0nLqQ!Wb(D2S5d*NV94pUQ5L}-cAsp+K95g;>O{AA9CS}2LRBN6K{Wg zc>l}$?^ismV0^D851_Y++&O03qwiDk!r~$Hw;|vOhDaY;av1QiZcfC0m-k309~g{P zQL;#1!D5kb!ARRSZhu!i4%fM!-OSpp>_#OqmkefOpgRW6$H40`@TLbgUR8}hRhRea z`|NB^_iWDj*__vBbHW!T3DdaY#3sIo4ndVW^n=@2i=?2ng18#9!*~jsVF?Bg+sIUw zsflg{RGu?OOB|@XQNb}vA6EfX4E7FK2}gTW$M@pl1!S3xZuoru?#;L}KZn&saFsCI z&)`iJDmt_CSaHi~am8V(;s!?JMrd|Apch&@a2K<~aHVyUU;+!x^GUc5_-RENyM|{4 zsHyGbhxwvF7$4Di)~XylgQhmeIqq$OYZXQ%J=iA={!%HS3kBi{lk~Li5^X3PSeVj6 zrW5$bge93`U=p+M3vb0TKV_j*txq~vc)73%|KLmQaQNr?4iCfincPFne54{iT&#r3 z@u;zAT$Ux_@K7M<5~cPAq&67WM=Xs?4koZ{g75GGro_aLS+rs>l|;#|xLUH@br+M? z(+k^p*_;)Wpg>>}uO-e03tRUn1SMgTG93^X8iRE8LnLft*$I^Sc<@OcN4=G6VQ8nC z3HrQ8OI@K4G)IRCASNPTO4DS|@85yqY4XMZux5E0G@hc>) zjOU9yx(LpA%}mLYEMwJt7P?={Qvi}=N87{|t`=r9t@GP>0h^uGtL0K z?qLwXT2|Z6ErTE2&FC(Q-AaGLM#%+L+xJM^|D@{KfA-QRHeP;y)&Jc~yVjZ`CbGV3 z2TC2`t7|KuXb;1lTQu=A^C13hI-ye`gyw4w-xYR@{W@ z+#MKM!6uF;g6Y(`3Cxl{!r1% z4kO=5Yf$?-$ER}>PS{aiY#iEpZ~#@PC-0KWO2 z(mCA=c+rfPW2DXJ3krv^DBJ5|%T&su#3YpgXkR2UMRN}sV>dfYG}3H$ve@2?+=JMg z30TK4Q89NTFhwFbN*HXRx8s8X?ZBYG#zx%?Jz!(0s5rx1Wdk7$?c zYzOg3PL}YOW3GRg>8j)wMh8n1ZY~`am7ifqBipGyFqgUYYUtB$3P|T;8$5Ga<|{!1 zjrmoY){iWzgn}2YR2{Q*VsVA{{lM9|xS!xVg8OeaSdWEq6mN`&ZJxzh7WN}KM9eQ4 zhF{)r#A!Jf^=xjj_u)hAux6acCGGGm3-ki#! z>fbQle{v7+Ah?dT7po7%#!7_c%1n`nNpr@NRA3G^dpn^(_L^acCCk8SW*p_n(yYat z+07_CABV3;VTyG<<69QalO^ZPu=idV5EM(x$s-TqcV>IRobg0Ub6Rs4nC+*cCR9gN zJ;cz}wWCPtwDr7iQLg+Hll4F!$Famqe>B4rI*3a3?#-`rXLcT&JG+9Ol+nb8-r6b4 zEhRUb!Mgpaq%T0z_Qh2swiyP4T#>UVjI|Zzf@gvUR-Z#7KK2|#47-2=W{8k} z*P(2BKM%jNUX@wD#;jjqc2r+>TwNQ^Q0vUeU#&!Gp_Z@APPH+wE%kONbIa4`wujIA zCC%aoQijRjK|=`7&_Wp$!b2*;(0t)bsoFdW9WFz zBVUw{j*)z9i~ukD`lFbnLZ;MZ_LojKbrsHYg<; z7{tUld;+~5g-<+syzt%doZqvIq3LWo4!h& zd9>wFhr{MO&2mO9*QZ%dyy{{U9)E@TI6VGx*W)j?7%zQyvI*}_w&2~#1{{0E5zTkc z;GW``pJG^?Vz?h?7+%}<_+k_up9_O)TYJ@ae0=5Ucwu)s4xcD}Jqn+A@%i|RkJo)Y z{^FxUKOY-)R>Yhj4-NJfT#SKt!{DGWYtd0~F$Ru2bZq9d45#q<34Cz^zaPaxXB!0< zW9Zx+Lr0n=AMK05xz?hiMF-|ei;li=I{MV%&#?lVboeVbBl2W3EKC~cZWy~BhDIJX zRH2_tgdx?{BDe$dF5+#SI5 z8QLrEyL+IG-!g_I+_Z5F+aFhvVzrj}%)Q=45Lz>_tbi_uGWl{HV4R5&j?P)2l2smt z63hrZaXSi3+W5~#8bjz!L}#fHGPfVIfj1S5w#nqgd*5@|JjbG&4H@DwAe6`#O5gejC%5jCfF zF~cK!b13G+(u(a6vru5H%OI6ov8>_uQiQSMd01mcmbTY?%>aS-cxR6IJ#<1ezm3E4 z;iu13&TA8T$NbJX`j|C;)E6m5WN6w6ZH;Nd>gx;Ey9s^A|6WPiJ?20TMlQuqQsX6?``-LP&-zg>--6wgB zP{bk~fk6n0;3`fk^j3Vn z@#g+M)3=wb6feCf%?h`}f!})ILC0Rar=dN!!hmc=$_aCGvGWwG8R(}T-Y}g};Zn)W zF!WvmLmRBQ|9S=^1|~2UQv;Bj-ioEw>FPtbyx?UpLd8iY^wqhb&LuC|D?5X2#bJ@s zCmCU-6zLfiV&G;Gp23(z7krHw1t+;c{D~&;%SqNOJL46zQWmF~(D`gFwd9<6bs`?};lgZ0SU`MWY8hsDC79C}kv@Es?e+1R1SP`gfQIFm;3XD`ToDe{qzb@P zD^3jTTRJ3tRRv&q7Rahg&MgeME5Jf9ga}lrZIw|fyiF)^{`aAPsZcmRA;%mOO5n8@ zyzo`hx5P-bnYmL;fHcGyseO9Lu)7I0Bs~#wymuNYQD_Qbme5KSbbf{$?=w@`6uvkZ zBqVG8O?xDiFEFhceG7$trF~+>oKzHy(qS?==HCR`V%%o(C74|$=G;;MBPuzGGMfz+ zB;_Uj2%bU@f#8m5Z5T3$3<#c!C}WgLr#>%0kf86i&&o38+L22q7EL089xLWqrZgRh zT+(MPIa3ZUqqd4tshUs)FiA3ILOu6+FyvxsC1RR)%8uT{gb4F5O&O6PFo8MrCLO{s zCZS9XeL#n1gt<{DRTrciqbkoyd&G4`iNZOghs5Y`epOqP$Vm7ttyfq+5#@q(I2ujNZ#$7Xk(EDJ*@|rtqPP-__BPhZ9I2Q(yETSO;ncuNY8ZTRSgwRHQJMx4bCu!ZyJ~ z>e$2{(sNigH#VREDQBZsTY*`LON!+Qtj`6e<|R;RqFo8HDjPF_606Wjt4&2GC3FNz zD>}siSS=QWiXj{cv1SD=MQnX@v%HU))oClu7+vSKL(H+Um>8&jZ`q{lLlse&qBu%2RUVvu=2$oZDy zpu40Zpr5(~Ng;`t&qNY~8R~%0!W`^;MHy-k7=)V3NN#gx`ASS=3#tun4il_`+MsVG z6$e?R$+zZQtw>MiLV=b^K2M@@#^@}Tph8w5WiL^AB-BbZ$;NZMuujm;W>aUF9jlKN z+=Q56Roa{;FgiC1%!MdpO19{r1x!{4R=Aq13!pRw+?N(I3z=!7IWb#4rM{rc4`0nkX9}eyg17 zYf8k-GMSr8rF|-_WKJT;xNid3!2(s1w$U6$u&`@UItD?qR%}a4;cZmQ<5RG1our@! zN`t^yN#&Ygxs(OW*NDhu{kq0%$9-xAe>Ue8eLw^tMWha7VJVe4*E2$`Q9(i_j=>wO zNgra4IJ~u&)A>`fI>oqwYq2B^fr{GV-r+UXfDppOrKuf?ptVcdO$Nd!6HAzOp=D?y zL(;_14UL}oVhk1=TP`urjjXh78AJxtzyYjD);Gj|3K3bc6;D^ZbWA9v=Iq(VwdOpr zAcAGo?7&24cmx@u8cVxJX3m-kYVl*NKo}xbY1$()d3Z`$NZKG$k{Mkpwt{83$>P?> z)?h2w4oDejgjCWe{3gz zV69+z5FosrRjuI_6EagkxMN~d7Fe_aP`o3IY+?sM`eN9p9<=4zQmDOrFgBqfeW1ka##Mbw z>9v}(em&RjeCzjVemw`B4>Y^ZtlnY8awTME-D&AJRZ$du=EYQVOh=5dANvIsi-oMV zi-VTFqx<<<;+hRIohJ-0l``j5f^vRXms{3*chTk^1*=_w4XPMMxdW{MbOfbYt%nQf z3N!&w;xS!9I>^=o{@2Dp=#f46PY9nV2z{w)PKYm+E^#xevn{#Dv`q6lh!aT>l)_Dd z&OWrx*6ThI(@wM@O!ZO(8INFumU4u%55+RA*SL+x$$P>u z_dvgpq)b`~jrq`g+;t3+70*Grkz-uA4eFs{&O9($!EOLaEk+9DGUGaguPJ5w_Y37t zIQsDr;pKryThdXNaj%vYblMs-=k>tcMB~7qzL+MQ;lDQpOZDl;l zGYWc5>`nL!6Q1Rqv|kacIjDGq3@SNW(ebWm4;VGUNE$jhwTcB2Nb7-a1|7O&v_u`k zib)0ox*LI!v?k++d3bynpmx+pz^Vt8Lc{;}yNTiErNkN9-B#U$0cLK=Q0JmpC_J6X zgv?V6ioodG`3c(!Mw#V9nhUg|X$M9iT2UDz^c?+U)0B!K(9Su}D*QL; zzBuC{cAp>1zDQugi}@x{Y>la`L|TLH+vK3vW1MHmpe}zTL+zEDa*U-YO%$2sVY`xY z5#&XQvZT!xihu*S4UIj1dtC<1z|0HGe?8PEz3=K>{sKFohs zt$iT5cWA7@c0j^3%$@j!(|Mh;tYGjKE3%^DL9{Q; zn2BOr!5kz-sZHM#5cCkR=*uQtsuh(!j7cV}nAT;rTvABnxG!%hBdT@f5i*S3HT^2S zxt%ZOQwtr>yOjbfC9!}QE>Z{!APO5%M@_?7z8+C{-{ubss#%JvfCX8zki&2m5yhYj zouI}u@fdB$&>Z$5L!(mK!iMSWFQg7D(K_pkFEi6pTzb=Fb3hx@?%| z<;8?=Dg8v~z8FTVvt?jd`WX4z!V^#FCvz+07!4}NW&4s1+vjyQnuP_i_bVz1JT!%cR9|a0i zAS=r#%W<>@utsfZGv?@@gt=BX1c70g2qFMMI>Qj*tfB=%#dWf#-H5l6I02+vb^HXO~zg#N-s;&)u4Fll~CQ|!vn>vkINEMMCELhn+_&b1=j&t^6{K^QZ<0?%m zkby7s3qY#Al#=SlImk_>d`ZP1hB$}S0`&W=bK2fPMcg?HInY6ZabK#CTWTz&;$=nY z^_K2znEY``hP_Ms5Cz<9c5~MUBpGf+0m@6`q|t{I19LEU37K!HXj3Ysq#A7|&sRjr zQMkaB(7`#`tTR|B>10tRq&(Ovps^J<6qTS)mF0>8m`}&#K<-0$nXYUO2Ao6$c(kAM zZIubiD1 z#qjnvrPHj+@GxH{H5ph?f(rDilu@1YrAX;40t^(6$nvd#=t3%!9S1KV%ABvIN<+uo zr$aNRUt$Gw4+K$ES!`MKK>-a2HAXsES5d}U*=(etPOyflWO>&vn??tjSV>kAIl3~= zVJi{k)qo4!%xv(Tgz$2>Yj9RyIr`dMJ^k(6K}tUQ>*gr2e&qCX=w$BEAHfPqmokiIN5 zSk<-S8xOQ;bI1t;CL-&h&+->AT1!e-EJ(oU%$S32zL?)#kMN-9YF6oFgeAe#`$}g{ z1)BFVALgXUR?33t!zMu&>Rqt134+xo>bg(%VSGP$mD*W~Qm0k9m^Us^kvA|f8umUh z0Bxuy6UOK0ZIr<Yn#n6UyAKAwQUL0(*ioQb5 zLlDm#Bouv#T*xJT2h8WgKzp-1MFpVxgwlfO1f&aX=NuY<3=iBYRs zUMBOL^fu4e4%dDne(Pn7|B zPKQo&0Rs~rIqSI}kc}o^s6;5TN(r+)L8<84uz_k3g)vt$^cG6Bv*DJe-EsGU!z(H2 z!x*04Tu(=MHW{mZk#J`%U$`b`t~S)e8>|%%_w2nTh;3%J@6BHxo_k2bUFGH&5;WW@qYqk%fY0bx ztu-$HW#7K@6$?SM2C?>8l~EA)*f^igZs!!klr2FvyP4hFF(|m=dU{7uFm>pLnXmAK zEQmS|hXW%R_wAYe_TR*0uC1+>2fCd0IXcLk-HD&+vw@F+0FxOEM#L>l7l*`N+c*H(E1dRKG4M5j$vE-P5T zF)Jj6N>z~~DZgf5BUsdxEf{zGI)W)Vc?hoaFrBZj`zCd84+Aiont&|OcuS&J1s)86 zwICxj*lBx2`UiNFFMX|j0-!rSSZyH{Bt4~-prT9#6ctgV?N|mviX6oR3}!}7-=5vjZ+8=xH=PBW9Sy4@n|uY zzF>h|kFgT0C_$cinbLLyjB$#9DFy<;<5@<(Q%THP;ep*%T2Revyh~WnIyLH}idhBt z9#s|HLO@W2QW7#IzQ9W|v|~%T#86NrRayg9`CxcaDm(>b=L>X~CPy7RT{K~I?5%iB z^k<-o5KpcL7Sn)jtL$!Nyvh4eum;^wQOh(4gGlzb{y;EFcx{)EF;^6fiIjBE5^ah+ zB(-BisvsfyG0@TJLS_Zs>oSJ3$;MMiae+C4NumvWAH?t z&PV_;L3R~+7DVKr;med+s#Gx4aQnlK6x^md-L)$Ac7>IXqopU_FPFY1=$sQgIY>+%ZlpbPfvr zs%#UVrLcOz=uQOYHRk9eCKMIRG3H_uam6S=`;c!ku>oEBjv!$9q-5^Lc#1bywS}H| zAnp>uS2m1ezQ`p-IGB~(LdURE8E#xtsMvBkbU+tosZXUa0ug9SJg*WPrlQJPM%N`5 z5w~I`$Sb`3P8(C1mDe(OD_BDmul4NyzOTN5d@~AcN(PKDmjooEfZ1O#2U(WEDDeFJ z`fhelP89-yhBatabN~t!q&z8L!m2_NHKjTFj4R^6fEnJlC5kDF@?d6zx0gSij)9Vur>Ob_WDXjKPu-aidXc&11we!c=!L+^wl(y72Fq56T3}Rh=cNJxn0tYP z-Rj}ZgYg0cMM;n`?v*kkwv|C+^!+AV-T@j(7_!AuBj~LGDCJI;VMh8Wch-Cfs)m;2 z9z~E!Xq}+>2#T%5RuGw%R(`?ZQ$(Ih%g9@6GSTz=uxn;6fv>6WTaf3JLeDD$FdM@_nF*ayQD&h? zNLvdOEZ-}_4FytRvj%`(uO(W$ArT)k^I5qBou7UPjCYjvYwAac7@mZ_R^5w*2e7C> zn+^GrGqMW%|Cb_pJ;!lD}iZ%+_!~&$y9IS9$okJ@as7kZYGEj9k3rv`!j5$$?XPh7^cYoYj z*kvwLx^`etku;SaZkNafi^vQ34^1 z#0BbvppfAB94ddXS?Yj%4PN3ishG)qOaqyJSxgNiM`;c6As~>sFb?)Pai%$P8DGLs zUarGHI;lu&m`HiuuPXE~_)$rfw$OX^nrMQ3z=ZWW4(@e;1lfrSSs2#lE|E|B%zz1I zOV%?R1j=p}(BlWdaM-+9?rDXL;|`6aTV8;?R?PA}V|QH)I&d8&WC^ukLI#FcN}WXT z+6~iqxgNtXI4|o61m%i5FssnhoVq1I0o)%kv8lKf(<~`t`g{|l%@5Y}Q?fclzfROG zEbW$i%m<^4?C^!?^;?B&a!Ub$bxfCn5RZLxW8l$F#hc~2gn^Zk^AF)93HsESSuMK(hXZ6#L1GG9uD z8Wy+Em92ANj3%@pS3C=FN0oQOUmj2qdLh>@RzL;8$_7MCgAK5?Leh3i)j)XHV@=)k z3idDa~;$~(e<&NSs(W@L-8$25*MHz7~eBYY6382loH6?vHL zMF(*T9dxQb0xWY`;)aPwkSJ=tbg4MbuT%sWCWo>q+$GB;+KU^4in5l=T2^I6?m}W5 z-4eYIQp<<6PxC1f>DW;#k@H(hUUQ*2ap?(7W{%o}6+Giq z{PHsAYj_Efo6}k_oIq591q)519b@Lg8i@A_^U;zN)La3F$p4?UZ)l}or0&GFBEmYKR)ZT7BbDw^ zPza=M^!4lEoN()O0j(U&g9kC~>7AslpXK}%RX#FSf}(yl%%&-D#3g+VzL|n=z)I|C zX3>hoyK+jUOM|nR54_ijc5&2OO;cfc4IKHIE$Mm!uC}%0%8Wv4MuC4==E)CIlgB)G z0UAu-DIAO2X+kl5gf}V_iHXQd&ao`Ir?yhg~kvOMSN71i@mMnjAK|DMYc(bh6A z6!Hz1_wORoJl?68Cg(1xH57)3?iDs@S_eQE?qy2qndSO(Xe5U+&=e-1K^Bz^q=hcl z^qB2*Jx%6yJO9`|EW5|(OVqSct9*lO8D$tx*VN?f(UWdy5CQR4yEuOKV#&;Z*bUx~ zvDRyvWS~+-rg=$*S~0nxV@;1|RY_MrK0Mz?UsNM|#fgm31YBku-R!Pc?WlW;0cXV( znZU8uMv1iT9%In$W8+DMt!dv;Q7j@#r;=Gr{zFdF>wF)D!)`OtM>5FcU&e=f<|cBa zM+~&?I80l%#ks8mi|b?%C7|(0%RKREYT$&i+;o0@0WFS=-;2yX-nwQG=UnecDJfoC z0p9Bk$J*?%98A_RfXw~Ywme&_7|H6TrMh!=H%2g0Q4II@j9%_&i@p4PiAbEXL98G{ zJc?16ftgk^i}0_=EW{cunHZrCUJ~-SdSu|hxPv6k^IRCRY$QXl^$Hu{Dq8B9z&Z`Q@oM=mT{%(;MKA z!x=NX6GCL1<;%H5T#{f;c)1pP!PXTrpK=TUm1mYk97$cnh;ZsbE*odpQYgMnWf?iZcH3b>`V#%`cuIQptZjsOv3bKY-H?GtwrKbxL2fJ=8e0Jlq>c4raFN^51)E~a#b@;@ zPD0lUr`Y=<3SfY@Jm+L|0DZlUL=4Ne6Ma3-87~~fQP@=Kl4Je2J7>y10-m&5=2-}O zG1-|ZmusXwlqDY=CXfp`%hw=7UuK6;Da4~Bv*8W?CQc%T_y;HTICvRZ<;YS?)t+?c znCnI2^|c(MzD5KxFm3{}zf>7v*pv=&u+%MV`q8r=R*%&x25xDKdBrh)27=aDb9vKF zF$66AgD}m{pe4%7ux@h}*|04itbUDm*)wq;xYKpTgLZ-0EkBWyejJJ>=3)jt4?RD7 zs0~;ymC5;25t6^AfImYDnyI^pd>vF_elO|95L+&?d;TdmGDOI+2|?>g)ym!kKR&%<0O+eF!i+DG5h)X)cm&&U_R_9pAyRg@ zE%#&$YCiJH%XcUPS-)+#xCaYG+#wnY-UK!ToYj)WE5pAa0*c2{l>!>I=$A}6F3DcS zkbAmcMiBaG`f-*(U1Fu!vCN+mF~HRlg-tqAP*o`V6p}s*QIWb(aPJdcqKfo>!^Qnr zSc^&&Y==CaJu`VfC}#GTh>+*R$7NB)4j4rbVT^3T3HZ48J5W#Uni=^691Aka_qWKf#s z&eIj1^P!eB=3LrZKIBx1FbBaep#JKpeW+E=L9)hE+H0KQtWu?FxdB=#Tgb?Z_&Sqd z%DUY9%4VoF4NiUu!kTH#9=07vdX)3je!{5j!+!1vqL$t^_G~ zCI;)ikX*$&!O~zH96yQ%%M0vG#KR=pK(wB!O%iz5={wzQ&mmunE+XH_x*qpjtku9D zbcfRnCf%3F(}L^z5^@iv9hgvmaJ zp9?7|Xh@t!mV3^ig8Czb2r;CRHK{cj-=RAQiIT}9q;qcU0bjwKpbVhl<0 zT1DP}%t*71WF`@U?ThP`1ki$v1&1FL64s%TEkE5M1j$U7+d@SKUWGDhedI+YjoH9E z$^j3mV8`T2%UU^;4J;<-JcW)!Yt`F=9d}fLjRrfm<*c5Sv~8wYS^|ktKFs#zd8M2q z=x8MX2cxN?kmsa3l?2;tVM}3naSNIWC5|*N=XDk42Pt^$2}n_}_Po093GjW3GfpyR z*w9i?G~mo+Kx;?EnFMY#1NYgOf zGhrw+>78XHdlNJ=KSHH#-h_gA9N6MSGa@#s;xm9OFs<@BL8Uy>rxn9PWNPOu2T)g_ zCS%BRD8_mYF^EYz5#a`?EV3FO5xSL3%N23~Sfe#(Dyb})`*m+3;w?UcOTFy*&w*c* zZQK>$VOtpcN7&0-fOhDYZ3mDGR%RsM6{l-I;3WZcI^>!!9Ub~pzm|3JXM_> z!x;+e?XF+p(5e&cjHhzTc1*XAOQwod?mcb(DNmt9ErJ|}BiLg)4jRztqls*${Tl4ofenZ0y zITZ|YnXQnx&4HplD=~Z$lNQvFA{)6=8?r>XoVf>rEF1cn;gq4I{m^i%2i{5hfh~n~ zVDyqjh|FMncAd48)yU)_i-mg>YJ}l=@PIO=uX-x-L@OUi#W}cL!G{8jT1FTXa%Hqu)|qV z*b@e4G?R`gJ@jhHL`EXuNOGSOkVU~{VJ z+I;e(T_SC;MpWdyy2jx$LSfmLu_caex#tv4W)Z3gr4a=2*uImV9TO2~b7{CE8aZzv zQQxy1wweaPh~zjX55$;#VfoF-uv$K_T(lYofLRQMaPQUe^MQgSNCZeE5)} z-3d(a;(qybd0;_*$-rWVnhAWJph2$MUWt7KFgVecF#uXn!$@9gcwgR0eue4NP~AiF zD_khSfG^5kdGKWB;y9lk0u|&!4Nt|LlJ&4tYh}`k-JL}V)f@T`(}rqjJR9W|rvxR4 zHY8q`L8YQi8=A4~6pD~;m%e|;#GsN$OB(c^L2fXqN@I>h6si>t@tkbV0n!clcOw@? zgEJIt!i|mu;t^5{tZGb8Bg8xY0|v40IIUqlh6qj2l*jj_tI-cCTdUD>TJKvK8Z>g! zoa_!JM$*H2+LGAs6y4=Iph|&K^|>9GUqZnXDGRa=F9BK}Gp8z1Fckw(j#9JiackO> zz1(58vMou~<9b+ME-VT~USPhoqn9jfS82q!w@iwGmMMO!sq~t=8Wqf5J>)9l!ACl# zXE6kzyaS>5m@^!sXJ4gX0Dz&RwLa~83f?=bu+ZoNgHKx zUaU-{`49rjr0Fdm#ZZl$P18&;J6nZXC(QgI@c_*VVGXLv(4c-2c~ zY3&$zSJ@uS9+%S276Yr_qFm~lOIHUX20_KxbKO#f+~$t#LpEK&C22w2G8le{^qOh% zjj-pNw3GpKaKc9bQ=~{N^O0Ll4(s6NP3COmjF)Ss0o`hli88qtTBk_)_naP<&`d=N zXONu6*@m0N1guF}nNEiJGx$lb_1FijB?A30|^Muq; zD8?NKrooOM_oH$eNIfe_|7F`ssH({on{j8_%Pw4}C>YE#jn?V$|13Yjj_{yElx_um zr8keDvel4XPipdOG655}Ar+94`j+sJ2b_fM;*B@>e&mPdl=0#K;P+mm{0 zuwOBN77>t5-ao9KI5xnyf%PV9_?Myiu(xq3;-ML`5$QT|YO%(FCj!3U=Xs2PlBSn^ zSn*ES(Dt!!_%It$O0_R(g+ah zzPxU=>|)`@>z1q}b_RCLOX+OStd#@E#YMsNV3O*}#qObfpK~ev@^O=vK%@5WYA$w` zQ&X(%C+(1arCjfiA`66mc)hAjvB=yC6w_IqKD zYhDB$GX4k-HAcw>;QJBTM_rAvz=Iyv*d_KkWB-JF5Cxz5LEgd&VT&}4eblFI_YCPk z48+rJ*PRyqz7~;M4{Il_e;GI_@7mGZke#TDCm@p~{h7%Ljm?$RdhoZ3VXq#2+n7>7WZme+{6ps}UUzBXh+s0HYy2M5JoPv9#N^ww_ctk@7y7c1$krEe`E# z&V&kw9-z1(-kNRxFn<{DnskKX$>YN;L&)L_S?T5t?x(-K3QR zBM2%eT&`V>RDC^#zcL2W2ARNGLxEvq6j(^sVF6POn)kKtNU3KOE)7-!$<8(!1b*;1 zyr$Nm-(ag6h?Fg;O4!>dL4#Z{Gxt^@(nb}95-2}6@Y@xwZJ(c?nY^Wef}>4t*Aqsg zB)IvJ4Z={G96BP5k;jtUH{)PBjj)J=3qEseb>sq zM><*^=g;3hJFdIs;vl=2c5IUfXb;X z!@9xXm99c+%aUVc?DO*TjZ-b{)GhZV65>PAq8LX3z@E&-)^fV+#_h+wFi8AjB@`OZ zz7p-dL!}sDUIVhrX=?FbhjLFZ%Qt2qlffKQ@qyAn;dPh^P%=KdM{K~P|B8-ZC}aYo2vm_9)$bE;tnJ7Stgf_XVzzi| zfx!2?E=AV!N~{|3HJ<4aNN>wozz?Ldi2Qo?Xs!BPhTC5`fQJo7QkjXaWeMr*hx zW8d(O@|kKmWdP(36waK3LWeBjM=dh46FBDODCZ=24x*gUu;a01w2=EpezUFeRW#X1 z%U#+E&1c}XJpJpmR6sh?s3n(E2k@|CS{WO=AtjMjO`sW@(cGJ={W9+pp{*DSUc8EO6J)JV#AG9>^ro9 z1~y(MQkzOwRpE2Z_J3`23%@drE!HEp0*7otyJ7^gw8BeTwY^lTSm!-Q+1C>bjF+&5JdU#nKI<;C>|$UG$6aK<|T6Up!RjuGHC-_fHVhH zND%|)GzkW^qTw{)Bu3>dKF$W(-|2r+ejm~{Qd++)FU+lnT{<5zT_U3~847_ixivmb znHj6cP{mHJS$t0WP}Rjfs|nExlp4eey{at7WJT5%J69z@ncnVLgi&LjExaHgZdrI?st|MTG)VA@DB(so-XCEWjHPCwY9q2oN|{ zm2deBYDG<(Yhyu|$-XG|FA>U7bKpwSO$(D}@Ywof$%=+xWqQmb9c3z8f{w+>;yDKT z4*tfGL#pI%mrz@>t0O%@Mm_xgh=vdmls1}lt9WG=gne1mT&*LSV*y0avUvB%p+FXM>&?CoF~&OfcpjvG@$TzGz(I7(4-OQ`AUEPKwNW%3__OWO zMnqn9hq(TV8zh93DBGNP!4J^`6^_u`*c<{$4rx$`C5&KRQ197RK0UnWC~dfT9r-Qf z7l^qyEknmlV#8$SAo43BClMsJeTR?*W;nIjs_?Iu@&Xf7|6NucE^hOI16?OuiqPmYb2v>nSYl8xZLfmR~R*K=Z7oCVA9>&${DC=eggSYTEQ zVZIw2s3IJ{4!OR%rX3=plC(HGN@;xaSMpwo`u)2PaUeB{oi?C~L19Sw;1(L08X0MR zii?rp0KUjpj)=&iC1RYbbtRi_Xy}VDC)Ipa2$A8#Z33sd>2a)gV!w|)3bbpR@p>N< zW=-kD_{gzlOnJCkkdy7nLZ7DsB%1VBUWFuJIPYZgVk<@(W?L4H(JG~j54^t{8b@G$ zXL%a|>LNus0H6jr=cflUPMQ9^OB-j4(f77fk^a^N*&j^|KuKH|b!h_JW6K^QmuW={ zSNp)PF|yNQd|IwJqQG+9>B#L2)=2TfPRj6?}t$M5eE_sjjz zsI8rnZtwU^4iru(N9K6248XB*gXGb=t?CiT&bNV(dad}X`$gecf{p$)@;3rR=1(b30>8a9?Df)?0S1W$Hp$pY}5i@gAf z3P!0GTDzH8VA(@V6Z(OPZO3*5mu3S(<@YSfu?0B>KhYtvEhCJ&ty`}#^;mB?kT=Au z8MS0bn7kkG)p-ey)@_k!NuA8z1Su{~dcKj;Zf^J^^kVJ#5CxqLnPoI^Km*87`uZJ< z(jjpuIc9k19es4N`4u~Q41+;v`bX{V@7oA!DnHc{sTtTS6qsOD90(Xl+Y%!`%xHHA z$Y<4cT2c-S0=*UUBDEt3u3;Em4kRO#A3iipx^8nOGxEL$iBF>T(6 z9v-SSs+o9>A%YWJeKCqzz+Ry^1XsbQ&?cJeO&&$)_4iQ#^E`qmgDRX;wI7c1*o#SM zRg#uLPNI(kag>i>5eWor(g+o<3Hc%^`*5-^ zHS;Xto58Y?#jqC<%woS{Du8O!A`o)dZnUgG9jKIN@>1x={Z%WN2B{Ha3f~_h0K-uQGyhUxdOK~VIM+iIBG_@wP z#yTI$4qk$!0Tdw?NNy!to~L+Xf#W-Num~ei6r%O0*CQfeDH&k`#Ord9hLesE1ZB@g zeg;oKwm@X6qg+o~iU`-ijY>X7p*SvS55i?5e~gAu+RFq}F9~W?X4^IL1eg;KktE%K^>oHgZ?fk2%;Zd4F^sbO@w4aB2plc2alv zpG%+#MVuHXg+a<6D-U37di)PP;dO!`L$5{ytL?a{Vr({~waOHW2Ar~{Bh^U>z_y-C zUVs`pZaEl4SZ?{gV&N+qLq>$<813P-*5MxvLr6uh`8s=}9u{FZhzEaWWQ<#6#-NH5 zUob$??iy$t{>AV|akLueQ{5eoAw|S!75Tjr#Ec^{AyYjlf1lb2g8%X_(_M#poFk`F~slB(6vurC^kY%8jkA$ZjiX61LC|TZ$EkV(M^Fm&M8dyu#5u5h5R`kjd za(=reJCwOuZR73GGSk3n)eLz|ya6K(+m0px2l1fWV4%i1cIrq`xzu4S4$qX#d7!ur zhdJ)j4TcFyD_5miflX^r+_Hd+j3K0+>2WSJ%fQ3hnmCz{F1wC=wCYOM%HPfoCZ7>i-tDYYiWUU@AN4M>SCNmT#hy^cl1Gj|j7~{L`0*}^S zY*?6#?HmhWCle#x^jt^^tS!Os$==x^WR$!dN^AZY#@iacv6en^7rO1eVsa5VA<#e*^o79IGW!w&;<_-(%HGAhHPVx{32ez&u%pqST6MnN>R^p z1?;YOmpMM&yALb~tP`2GSJ=usQ4O@wf}(|e-VUdNhHb)~Xh1rE@CLTp($f}&28pv_{HUUeKWbc$bojyPA1=V$Ty_bILq?*I@CX|+Jz^Pq2YzHotdaldeUn>ttje>?mx`gAEg}Zf{4eZM`tx2UWV_6X$ zty9t?#bAgbeK-c;2&r%=an!S(qNSw`rQIXt)<4hyqYIKpYHgBI4qOW zzeIo#KFr1{sgNlv7>0x*vcZrl3<9JGTG=}CD!#`)jkDSqH2;@>L7o}b(ab53{>GOS zw=}s756yjgr1cgf%{t-P0eS~l86zLPO@>1#f?Su+s}C7Fr8%${MZ~ned3KUYz}BQV z!ioXlif;Kc%WzDeaybaI*D~k#l6%WGA298MhtZ8ZZk|9Im(xnZAWM2kn<67QvfYu@ zkglU;NdrWWLP}8tDW-CCJ_40;H2i!Yh?bHw-VsoZ#*!XmnGrkpkH+zej@*&-LOFmY z`4aMSDDIKM$E=$GrSW9DfY}i2X_-R`6?+ka$ixPfH;bs#4@<`5l9lU%_}vpLXb3S_ zqnNl$YwpJ(ac-B$=;!*y&~;w%KrxcjFyVQ=9TvSodkY$x!I7F9YDr0%Y>o3%qsS#j z$$sx6>%`zX1m)sfERSM%Kt2!xG$qJCGUa^B$-!QxV%CD~LoZfH=J0<(c6X>^a0&EC za%RGik`?hD1-mrxmFz6DRRY*b@G7!nrhwTpQ++-1qm`F|dXp4ViRwt6gZn*pPtD?% z+zP23oljW|j1wtS|DDJ{+GRw?fE-!&lFJJyuobga5NSdW)W{7t`GJucSnyJ{PDt$$ z_n$C2 zXsjtj1oL3}aB0P$u>dLOr8pNT-`PgkNnGBiEYH!Q1YwUXb#P5{uxQDK+efZKL^r3y z1dvHH)kq=<0M0>^ z4WGdTf@N{4{}sCwMx7F|O3FY{Cp1Q5?PxydxhQE~JI-h8kde~Yw%poCIXzO`(oDw) z(g{H-%e0Vij3$06ckSRcOYkPNLm8x4P8*`X5X#3Lo~Y5KL}2 z6sY4Pt!rpgl9P(f!JZVgJg~fR5Rq^>Db!obKRw*=GR=9CzN;JylS2$yTJuji)v|TV z=jAUB{dZPJy%l)l;~#22y;Gcsm!1uXD=wDe3)WL-6%Mb*7WhK&**8 zt*=$6*31CBiuC428J5c9)V>1G@TC|j1&k8RS<$lc zEVNG0I&%N?c+Y`CYUYldcyld{6u)Lr&^fA+%au*Jj*N&u+)PB|g{19=tM~z;Ny7Cd zXC(@Zp^P2ZJ}iy3l5oen)i(71f{_m5W1C_y{8ok(*=g~8W|)(TzdY^jMdg^|o+QFB zFRim9j)me&jvX^mGmRfDiwI?z8_HNkZU-u)d`h`zW`f&-td~FQwu@*?S2%P0szU`= z7S-gRGPWrBckkA6D>bStU(PKLA5YDvvKN^R-j#v@q)VHLf7u*m5s${W@h_O|r+#5+yUyG)fJHfjUSrd9jAi@HupzUA%~C>UE!nxy6B1_*0Cs~JU7OSWHRNy^=jolaCP zQIyzXl{z48Ehqbg916blAv21h8QiU8ehrS_u|O>vCM`=WP)w{*Sfqtbz#%Q1M{t77 zneX-@!h)d&Wa=b{=-I$~NtS%zoL5?cwp7iAyN%i;j zJ8~ zSPtMAvx&)j1U}}d%*a4+hYOHzZ}~4tosE5rn3f>YoExDcavE)H9|EIU5m^mtXv&%3 zgQ8X&zM0fk-p7h5dK3jRIOFHR4uowa_~O|>s$m&CvkkZ&EMHdZp&vRh1j&x?rDSxG zUAJQ#qFxni1!h0C;i#%kc_)#fh+{@I!Lqw>e28N7qHCGUm45=lP6xm&C=Fs#V>51c&)gWM@WX_U9PDZGwd^h<; zc&?HUW(+TJ;-M`_WUH#kHBKE)a3fI6747?Xsqrrj7w7zQge1~t%YU~Q((v?N62t9Q zSbj7Qk6H%CKvzZBR)N~xhATFB>l_OjKfj!?R#v1C@s+fz8P9 zDj6ZPP}F1F^3UJPj+C1~2KaCv2P5JCGt#1(VIS#Q87aU^BVX%^S9`#WXi!^}IsE9> zc|-rxMA~l3D7_GX+CB=DXCAj9yB}u=s_&RZ;r6L z56gF4EVF1)>>fPj==zoex*YcV$P(C#z&XQj<$^hd3|a!ys>2g0S6_D=rHurBHImOaan?~7f@&VOlX!Wo~I zqGU*3=WgH?AOJvn45bhwn6aVEHX9Pq&!> z+|dpZsOKD}Ju=8FX&SV!Cx<^eewcXPjzjLHh(R)Pcx~ z4UP)O91-J!tak)B#gqd;WGoG29&oH)N=W5`5_*& z2BPIO1tAMpWq}FBN@@mfW~6Yt!lp$YK~335wq+o53KtJ$21tsV@+>Vp(9vcz*TJ`V zE$TNkqMgvALfjYut@oLXd_zEe7O7hc-;L_WRYYvTLyX@(TiH&F?gNd|e>LR3P$CiiiZ?@#V zpA+V48M*CNnk=%YjHIJC;e}n~j(b`w+9AdQ71SCxW@0EL|2DM8iV7V1E(W0%v?yW- znIDmxp$-|hy(R!DTOsiyf=;`SkB&s!rfM^$%NVe=tVA-&`xLn!{C9?YEYw7J$*?i7 z>ayilH9hzMcL*rpN}$q(NTXq^y=v2(rxHM1TVGi|C{&wsFALI=!A;#+GcH-A0iiWM zUF65%02jrEOrxGZbvuAD8~aO^bDE zWFSRl02X}IT;xNz-q*{=hRq}}WIVH6 zz~0?6jR@vG5?c(@ex2OFIZEbYB&dySej0FNibz4tv9aLq;K+QK7&7?HMpGbTh!ilz z4Hl0giKMGGg5?jBCQFJSeSP+8u>QGh6fKCxgFeAf*l~J9;mIuW5c@rQPt=u1nfOTE z$)1*G%}6Bsfi_Lry$!2m-ET;Vii|}3gZ_N?VaXBGk2DdZnQi@+7WA5w59U$}NGmKC z_jx_`VsID@iw1d2i zlbQ~hbf^yHBl3zg(}?{tWWCz38g1bVds68y`(!AFE^v`u%BwonJTYmg#Xt`#99!83 zqyWcrN~WM*>v*_WDBoztf=5dX1}6n`392E2BHk2yD<}_;fD9wupb7=s2?x`Vj>+km z2ZQoWdfZ5UMT=<5yuKW&L)VcRQ^0$0iMW zy2`K}B8P*U)x+v>^|ZS5gN0h#Oc6pvngX|5#e4`GG5Gp&+-zt}I-W(dK|L-~wnvsW zwt)7tL zQ5Nx0II-xXP(`aRdo@MN-BxV)?|}6!OMT5ew8))kgxPR$ttx96%OQZB=0Z}kd1-T! zqbA8-ZUpzOZNNmWP?TLdX1U&27B;q*8Tf>md{@|>$4JI=R5oNbWRYX)O^+2iM|?KB z1O>8q7}55jP`-Fzo6t5T6)q!HnMHb`;2kV-*=JnI-v+CemPoBoxQU@i*GmT`9%y`J zjIwEqdPoJ5z-1(ib}MOg`D_d^>g=_U)DV$^lftK&B728DIyi=F#ZEjRA3JM(&MRRM zW?4B?8rsFk@4mH8Zh64*7W{AF0LpWu_oLn@!7Y|8%zf(4cFY|2oWOE#NTu$Xvus=A z+<#TELo(9cWEyG|GC&1QAVNM3erW|(CK}FML&0(I}vNBBj-Z}}=?IMj7 zU)Z`3w23lw?1n6hVY_Y9>1-ZsE$j_P(u+fBUxm7LF?32-z3kqdFfvrKyp&6y+luWkM*821#F4u2qXaEsVJlKFTZWNhYqysQ!l=k@N)cz-i#!6lj@P6d5m}cv z^mKxj*vp`Dwr24W9M^#z~W?BZ0k4-PV$N`wMPkTzWDD!ugV_PVtYyV{M}sRGWB&1m+LstauZw13zbe)#V z)v0|*_fEdl)=v#4k_ErOhOTtg^{b>r>iH%GB;Ty5l3%B<0PnqOX~|i^*FQZ~b$YCyY#u&TOM5E))`!c- z{{7Q`P2l6x{U!F@(lmq*T9{gI!czu^=t84D4 zhe)*yg^6)Wx4>U?lOQ$V<1>lT-PA+#hdDv9RwOH>qal9rGRR@Q1LL47Opf25#HTM) zs-(v(qej8!Y+Z;ORX*G{or)*l1VN~h_AV4hzH7(Pke<0^<4Q~AGEqeuOiv`XVz1i4 z4fMDc6#J(J^ox~DzSZ}xS06ton-yy@|HkJa{`mPC{(Jr}G2Xnx+~OL1c!q0uYiqLx zG0ycS)6pex+L>vVEmsehT|tYLBf}_oU6tF=*XwMz2!+=(VW@w=D=S`T;BVyq=EWqE zx+HUM8cCg%t^XUobsV5k**`7RVdX1HM->{w1K~{g_t!WMexO?%R>m+V&l}J(psX`w zhv6npcBsPv@~zjc%;|?>KZD7a_@PCt%s%of#|2s#zm-9ykK@-K^YmchU5^j_x)m0x zD~~Y^&>P(~HMrGZQ;Rn{Y;JbF$EF51x@>B2qt7lHTz%Fzdu?iVqub`C=z6!!Bl62Fx~^uI1Rx9V zblGC+J-M@8jp|uPi3+Lnz3xJ$-gezCK7IOii;m?IQh{Z6P5y9A4kq+m zUO}HoPD%#p@-$ASj-9s$y~=Pr!r=MUPdMU~E)_APJ)j9*9_|(Y7AJ*SzRu7(4sD^5p<3OH_bKr%^km{Zl$A z*y{|6&jPI7_55Y?OoK#mdbM6uFcC;vOLO{dP&$yT+m_m@sbx4FI-gr>DU5DBGcqbM zZpdW326sq_UCW9V0U1j7k!ge$WS1(Jgpoz#s_TQbn$j0TOs^QFOPBYn$F%HIx=R|o zK52n`yKf(V`T6^Q{&!cUm||xavUa!8RMY+C;~R~({sHAZFB*aF#HHZPKOn6(1khiO zhSKtB`5|VQ?7}!IYZvUdPYBLOM9lXv98_(?;0UJTN7BjZDU#nX)K(|(U-r{PemWs1 zKui~;`n5Q>THBX_K2mZOiOK%^>^HHb9`9>(>&yP=NdOI_GD#tO#2TN&(4m(j`g9rw@;^5Yv~&L{vM8~>*!Tz>b^4&;qghY0$=)?zJ04&`v1#SY^u*&=%FlWxLYH9 zJ4hNU8|lad4t3p54w5SkP7tz}7vG=0p)YMH8;6ooWHo}6UQ8s`Kz7Ubmk;s@^kd1N z#pu1nlej|AQlE@=Fx4U(_WNX>1^Btp^=MJkDrs2%{~;^!hwRm!Ovfn{rWKVDqvcIM z>Jq0+p;d^BUVN3E{l`GhOjEdr!wsi5@A-C%Go1@)dXodv4yL1}`=q}3PJpNMQiJKX zqSo>>H@5UGnmux6s)NalCiy}xB?uR+)74@1bBUUY@c zv5DNReQBwqXogbPo;eZMzJ5Ig&ac7;=^x(RpR2IPxg}b$r+u4RNuSUTByBR~HLm-5 z`QiQ{>H`WN!&qJ3d<|+uw+)V>hYb2_v$|`R+l&pn6Pd>Rm%$ z%_qu+WSBGMAVHzvQ1}q@h?;@46SM>fPYg3TDEv5kje(c4!`CJ`&903o1uYFNX%fi7 zn6IdXBE1HmXe&0Wjm%d`H=xEShE?)b1Hf7pUZ`@=T8Mg)NkgiUNKFP_utZ=2QAWh7|3+9yaiHkw52V?q5vTvZ7%do>2V=IwC!DE5I~WM zei5c)GSA1RTRvZQ6OH&0Da*|rHY!r9>!DCP)nB$l0R*FVXvMt3zC+T&RpjA1^mrY5 zx@!>Tq4q&#r_T%>7pADaYY<8(_oxfMd9~)DG#W=`e5U+r`<87+ySaY@V2MkWXw7z9GQ?zE_Ev0Zeeed-Y}%q6Q?8;$_8 zaXcdv(JDIqQZV&oRGNl(zAM<~+C@8k2XdCx;)@K79k_wEogA?inp7&XR8KMlSfEV( z;cqXHxHZk?Ok!D**aWy_{xV>&U$=bQ4d;!TzG9v~Jn)?m1B|*Zr>hShk6iTl9B#Y| zl?zu7kN3~ZMSfhJ&!vau@Dr#bNK4dmOCu=g6IV0|dJd_>l6BtrQu$~#G<#iVs$bpT zFKKtUe`_y5w9@k3`=A0OmrfLO6W-TH7+TT!e9sRrMruvf3oy0dr8moTndo+Tf8R_x z{0)2_nb#Z4-Fm&j?lv0WQa+**{D*gE9s+uY1Xl>TE7YF&mBSYC%{%fAE>DxA84PNU4{nyR!8A< zPKXsa#R`0vlOC^fXLk+XM8KMNN3T9)^3(~FdnY~DQbF2wh=*LU{qdhrQbg+z{*KaO=FW}g$+dKi+>GkJA5Mxn`C;B8_AdFf7u4qzi&2J z-JwJ-QbBFMIQ{E9E2G$*-fWTJKTT8B7Fm+_PDjL@^<4T|a!`&$X6a!^A1cc&gxjeN zVh1inr$5^u_rSl*_8nh(-WEw(KW4GX5w zTxz8DO4g67Hy2`*ded6^ddEEUGX!TardT+M3py#tvlpLet2^^Oi;YNVK6bqeF7{?I+J(;T7KpF9T4=5qv@SE|=Q^_37>UivzU)Ns)!8(NiSw!xc?5bGUnF?0n; zePhs86|a8V)6N_$v{n_uFRGy<#l1^OHx8ZzF72N#gmtuOeXS{NA#IO-sc50ygd%>6 zaHa-E@nP0dj{SYss2ls5W^L(givpm@G5p|mv%?`=tkD}kb*8&T@zbpvk%fTslP?3Z zkgBp53!DTcTSCvaj_KoFG-Dgg)C$1`n}x$M?L%s^ zG}u9BavJMr(w^)a9F?g)>Sv-!y}Husv;rg7tX-2D*uIJhnN?NMZWYF3^FXTGD|IUo zwQ@rgLFV=9D)Mj@dAf=qv`0r#-}ks74nNA-HliIj)K~^dciX^lEF-q;Pd|VB>C2yg z{uXO82b&*T=yxE)n9>iXBY&g{CN_7_=4f9J#}S8S;o$Y?&O%l#V1WQH+sm_~!q*qf zewiO@f4u+nB!|5+u~4X@4XaSc;%3X~3EsZryu07L;YmxnY&UrtTe7cBC3twvtPo6I zqqe0t6br;I6t+)Gq|z+YX?lE{cEd=E)$11Fs0Z~W7C#9!ec=BL4J`+ohgaZ*#~j5$ zka=>w$$Xd9TTKWr#dbfEF&_F4+&w5H=Z`?{dz8>Q{5cJXW3vSP`U*0n`~|1IlN%LQ ztrNUD=*6gbAVWahX$09?(BfD0q(o1y0fmYPUVCLX=)6zM?P`zstmGvi)5BE| z1q-Kx&>KxQD#U4e?4&I5=CEtJk>Fq{x2nASb+r8b^cLIwoN~8_1 z`{LCVNAdSVg!btz22mX0FhnoAJ!H}aw;69WVKuzGQ)JlrGZack?4a4oENNXhP5jdp z`~vhwj%@2>d4JaO)vb&9{D*dl{xD18Er0x;Q_D$1qFyYA+YPrqOJ)kRLpydWn9d%) z%fPbvW6f|Tw}FJ2Vh^xb*DG!}=NyByK!R&j$6!pTGU~=_2&%dh4%KH-7*8%YP-`fBWg{jixki z^vf-rwz?+7o1UK7$=)f@iTu!YHyTCOB;E*7WLRS_$0BbjSIFDLiT$lcbCk;U7GYF{ zx6zUJ)GMwqYaTQ`{`y_Fli$_PoXAa{tB} zd)b_=oR%RxrT@;!!72?=zrlNjYD?U6e z)}*DM+icXcy{H9KVQh|+mf+n0{@L4N^r14$&t)v2a9k-C1)=eA3y)k|D68% z^yT+tqB;121G-D`g=CH-oihi{Zu)c3L(DIT4)Wt4s5*1`yOAa*Fcwes8l0U?N6eo& zZ2G}981~0~=hYN9LXBj#%FB*3vKa^r=cq=UA8t+fKM;F)tHF0vs>iXEK`~dOvXCHj z=>szeqdi2_-(r`(7Qk|x$uY>TlZ*tbe} zrxu;FAd?@H^YE0Qotw;AQJf{fVoIF}=M2vv&5L2YB*`#jvUE=fdZLFF?J>jfAU_K+ z>Bg8eC{(5(Wf}A}-LM$2bt4}#>M{$?_Idv@mcZ5>pd!QLpC1T znp0A0z9b=-SQ=4C+X&`J{pZYgW>ixvZA3*+NZlL!f;i}zofs30pm@D{dRX1x-{0~= zAyT*@Yn7hb1dh?!X^J!i(lPX@LGTx+hg8M%36aZ3aB|3nNI7`+P3Ob{93^QWDM`Og zyru%TYn`A~P;y7{>&NN_<7tyn8a+Y1N2;tk9_$#^)6{AfpPe<|5bYfXd@~$^_Z)bw zjHX^ZJ1ZzurKtZN{&o*l=L84o;ZISB^uPc1@cPepum5~L{2AONX>XCa;nU6E?(grA zZ?Q%2hd5s$PAAGVR681z0u43oGhaeYO;i2c3Z>83TZ|Po;`VRlf+rhA?WBg9FSlfN ziF^Sn66M6X>)XE?qZSnkLiTAb6r$@fuv47Mr44n8wV5o~?&W*1M<3v*Rl5BSq)m|FE`zGLiHj!WJUeR6?e9!6>s@)|6y?$i?*dz(>Aq;WZ^dw3|_G& zhn0u5SWo*1^_}T0Vm#)s_Z`i1M{A1gLlF~tKU-KH@`Iq3JL~pH%$g2}l2CzGmE(M5 zKZDRq!AUh6s(04YgFH_WcIW%y(eZ#5#=|4)?BZ1?G|+bGp^PA)B2&Ir{Cu^b-?)UPu^;>(EhIMzdyc0@f6|V!@ztIq?jDE zKGyEFP8bZJx7xfiY&+629gUjBa`m`em0tMru3O!|r~lrsrmd!MIShcL)|bc>5N&Q? zmk^#Ne$f$`fyecuyGH_gpHlB4`#BAkSUSzLPG~_ha7S8*tCKA7%8}4i)hQ?KjIitV z$e5xiPpuCeB5yP&lX_p%i_YD6OR4Hm z_&RSk)^sok%|d8DZK@0@sAEU$mtp2Hcsd`Ys|#8XIZTSeR#x~xhdr4!=}5W$RUji` zKKf5lA|*>ftef8Zzj%Q%W#kh2aeBt6e4^($JZ7{>2e-K(3yPL7=fZf!(FN!z0e{HrGk*M0XIC zrs13vQRa83=d}1q{+Ibg{XYMB8YI&?WOEQm#Gp-8#N?MUT0$>HhcErdr%y?VqCVI0 zD-ah$qV)29LEm>w;p4lTBm1FMA9W~N7id+`1AUYnnh$LcHlzOu8%9SThz0=sNjIk@Ob37H?Z#nm zLA(a$9nRRDtjU@Sv*Ol;=PwR}MqDs+?}@vn1nW&G>d z82e@@5?DD^l5&0*{;2)%b};|3rIVh%j!#}^+Rn**rxe>``#>^*s_eI0Z=E8WhI&df z8|jPO5}u(G$SUb=OG=9#c5-rPq2a+YxP}KE>JDX6RYyCW$Y`f)r0i1Fr@;!57vO<@ zOIzD5?{9#s#~a||y8!yUZq>Q_vvc%md!!Bo*I($2<$2R?_G5Onr7!S`GvVM6?NEtO zR$vSvMfohA=0zORHZ-O??l&gzVMr;;S9M|6PXMi%#{j9>`8h|M>Z9`svRCV2%~+wltGMFG;pYv|xQ(un01xOZ2d z<|s8{)Ac-MY;=TYpbsVD-NeL4A{wY!aNT_TeBgAV*XV1t zQHZe35pW8hafi?e`d5!iX$QCZdDDp>6HO1Snb+G^4gsldW|NyOB>LJgP*1In_n~{f zb;s#IBt2#2fut_|{`9)d^a^yl`MvnTfqV9V8u^UEU!CfL_3rvqKkTqcF|la2`ot&7*i?2nIyT4XxWHjrQP~ zkFj_S0!_MF_Ntlae8TAwguAis7j5AKQQ{PVv%J5LBTRbN`PK4%b#oo@nHB}7eNW26n&XJ1VM(h$Qx868sP)*L7L7v(k zR$JN_e6B(?wl1+PTyO9SJ5o^7K-rO{s?RjAQ?nH06cc0aRBYy~)sT1Ym=}Rah;A6F zJ!kqsc>v^sybLyaJ^X)Y6^@v%wc%sq zcFXBz0!f3k>YQ(-M-~iJ2))_FfD@itlmdYje+T&)b^P2hBsH>fIKT;6&YegryrZZG zy<(@|U&Zg=!rF4J!7Ha+X!Cm@jK6Ee9MrOLd}#J2TuFI z0TS)$?H1p1^$XH9!W{kb`=_{k$Y@;MfYQj7Ga=MfAbQVp?EI#=4F^8UB+nzF>O!^( z%`&kq;CEFb$J&#l$T4;1Y>`r@X7v!b@ZQ+CVE&={jmc}$lS2?qaAQT}(_u{nm~8}y zvPdneATEyl-$BWV0JOmoGIJ2fod`w|wadtmDaOXAl5Z~bI-^A+2XaW7@vfZ%Iu1u5 zlSAJjsEPm0# z*S{#l*gW02>i&J8c8yV^yV`1G&HA%Elj**_q}9MyC@n@SQLT__trnlicB74+NgmEc z(QV@hd(?S3-ly1x5R6{%1MU{JE9upgF*pjG;}W23EVGF8G#Vn%JYOTo?g+6x@*lw* zoiqza1Dgh}pAS$j#&$9d?)!WCQtQla>Gq4i|NT?)>%Tvq1iy#$((koA*1j>-2@Om< z;#KmN)1++p>3`wi_@D2e5F~RS10L@`yt{KDCtm1B#&H@xr%C7Xywvfwz@l1khV^1c zklugBh5LR$<&xGpI^tL0SaP9)9ac(hh%E8l}G@^ZfYNG#9P+ z)bIOPAU;C=UNwlYNPtZB>0Kf_dMv;C!PeTXz-sYhjg1X78$Z@~OP_oBV{Lz+)w>^g z#!U2i{r(3UPJQ(B11+aK+qc{Oa6kTVA0GN|Lk7gh&-1^0`uO$h=bsOM;G~x980%2+ zd6MN*fWtIaqrz28_z)A~bw*l`aCZKS0IjM{KFw(Yqz?V}@*LN8`^Rs;CZtrLzF`FU zDnlt;f;wrchbI<{;G`L)sL;ao)>N@w2Hwz`mONiPEtgR;OTuKK-7(_g^`Ac<_OqU> z61vkZnw7vQliISRkDJoheNLw8uW2E3F{bx_3#-{*xzUfcj{VA@UKCEksaI%y3jM#t zB0o6Q*hOQF6)#YwX|o8*b)3yG>8Wo=m@cFs44q2Iiu!|;HT?UXf2bG8lZAt}k~s=a ztd2sY{YMB-WFA_a{S37_NZT7%#4zu2^g!>bWad@Ac)>O~e}RO3x1o~PSwrY+&rrV;9%j2YVC_k$Zw zg5T+HaQ~BpY^a7b$lQjEs`R9eOu>DVMc_{j4=$s#)cYf5z}YM`DWNlq`Vl!97iYh4 zf}w;SxqTt-6&niifM_q;)$N37kdxbf_qgym;`>M~Bax{P55M>t@;HAzf1-Af+Iwr- zE8mhVOj8Yue+bg%Uj3Ddp~7*?;YKJA*CJH=G^m8}2y2RiAzQGDW5;lzI6TGF5VVFm zEQ?}X(MLw$FIFXzH$r#oS}Yf>`x^*bYXJ%l0JT_)@pLXqeJW}J*ExYNAmLoRh%h=K z=xgii1|=G3xPi)W8f8)WiUIh5(JN@+zEo4-&lHz2)#zDWYlzOc2|f_$3VIdkhCqgJ zN83Sb<$kXMbH3~U{aZ4>RNpA$Bb@s*#>t+HHJCri5#OjrREOP+3Gkp~mkb&?C-+@P ze{O`Ix_n+Jqmf%e!SMvWf8mBXpo|G8TkMq-k#*Bj@tQN4HHr}{`waBr<$=9ComVE3 z_d9;1*L9*(G-9PN8KR(EapaDF^)Az=P2N90FF!oekH{Pu0`@fOuID_QYvA;t1L^*Y za)68C@E7R-742XBQGmOiuBQoy5I?Jrct<_azxtEbGV|(hsb2p%=We}{?PPl)P_J8* ztJe+SIS(%G*HXO9Ot^e5SEhXZ5Xeh%URR*i_{(Rg^l1rtWwxdfg-Rw_hRg z`doGhm81teh6TOC3B?i{d3--)YkAQe-iC0=neroSw`!^~^GInjyUsg%XTc<{w|eP88f27g2(wY1iHJ)AQ4G zD;i4H=eC2+QIm1oWY){~AL6kBA#g4CQ4u(TfA|h)36;ND!Gu3Iif3;E4gtQ*^&YT7 zeLeZv*tKVMVCkw~fBr-*q|TDU=DZ4zr;%B!jArh;)njm8CRjvgnh<%G;xHd0-EMwj zQKM$H$QHqG@?}c1*W_?ad#^RH3 z+M*AgMCA=ZdpJLy(Kn;ki1G;xB`F}}r~=*iok#qEQ>93qL{mq_*J*U3uJ08n@) zI(--?S4HIRwwxbZ+`a)x;1`GzV0460Mq}QjSc$}jL%w4zXV=Ts!UT%78xoenieZN_ zxfZB45wF}kK$+XZY_KpWCGv94Jq|x(B4@JfYoi&=^p1+X&0>QQ7g3h7AP2=xnDg=! z1mnEa&EKp$eK-4USyi^P142<5Q>Aype&LWDFS0U3p+;=cz{>5kutBj@iY&Egt`;qz z2yc2o&B-Ylc8TJBwwc?N?KqM^ANq&JPqi zp8OJBC_B+9proh7R4rv^jCKgLWRzI?4PQXnuJ~Xgz-8>wU8oN{jp?9#>Ed$wsl#qz zm1Mke@5lXy+A)c5R_Mv|_V~ko$5-0Tty6~g%*+58KPcBlS~<3h)GH!7cQoueOAwMU z3Qg0*wqF|sx9VV00)wtM`t4tDXheWNS2J^Iu5MO~F$xPvR@dg0X_-BezrLT^m@S}< zxk4bCfR^Ui#tpPFUk#E#ORL#pVP4G^vk?N(jX6-i@@SeDWd)2YJx&P6d6oTtJ;m@ZfOpDlcu%5eya+-_~ojCPIxMm zfbcxXF(j$pq_B-M=@T$L1UW&^98Y)Cb!33PMzYogi+;cb)Fnyxy?h@k4e)QoXvrnA z+o`R^O`i^JsNJ>{8kfK(aY?74>;4PT9n(o!frR*lFhrn7EwzL@t33)q|8 z##AE8_hpah3KwaY=zz(fXy<)3RY*(MFN829l{gj^p=2sp%U!>UJ2S&VB1Ok6%qF$UDVI)DzrwA)e zy>wuA!-@#Rst2)kOQh^QR8f^;b|yF2!vR(o*mVKI@#O?lXrb*m;5CkKr7gCr#9@_# z99*(B$qg27i?kFu=hD2bkBZF-2L%mc0>T(>Z4Z`gS!XxfJx|p3swn1TL?1@?AZ^UHJ6N&MM_{&~j2V>7s<2O$rMPA#oeuybRqNh4NOPJ0TTh40IC)lL-u)2|QB~q%W%EeMLg!+T?Od{R@w{lN6D_ut7(VHPYqbel$=N z>JiSJQ~}hORTCxuD)j@_#=b{RCU9iNB=e}>Pmw+ZZmgTLNS}*Ka`E6Ev#Bc1T>~{x zRsb^xZv6x*-P3b5Nxi~qUGz%pMoY5cSw#DIFt7?~uCkB2A9r{EfyyWgNt7WY9l9dI zp!5xyx{=C*ILcz!!ztJDFz}@rM`(Rjcd@V%N)sR5Pus=z{LU7)yhSY7<*8hn{kv81 zhO3@5aqv4L9_1XCfMpRwWPhnI@8TkI&};i63GK*jh@_`qO;xLif)0p4L(lhQD4*GB z4e@Y8U{M?OKd^)cr0ZxaeA~!olM0Mwj*ms=^-O^e`Tg}&)A=V10y3rQXFm~%KyzG= zE(ok!Zd!wf2KoS?6KssY898y`BuC$C5a!@Rt((c&*J9%CHe9<6aJUk9DkEcd$_LRdU@lg z&*2;cogA42l*c%2%G4Bs+2lN#TZ>AV*~;{Z-NLG@Kt)c7@%AgomvzD4FZv6{ONcmi zEXzUGPk9l0FM=qh>1>9mBzQH3NwxAK0X-Hb%&7esbc9Nh37}z!iWJpqUL++(=%7Rf zf{yT?!1NyShID6MMAso=v0Qe8jqN@34=)WTr7{a_UhZZfJQlAMY z5a7RIomF>?9JFhb7j<*}+HPwjM3ZlvB%Y!%FCw~t#=3xJegVyLl4jNYu!5%bWd@T* z+gR9!)CxB&fX$>yk;!3G2{^9DfhWa!REyC&sVS90{^Z+E((^P;2kLN)Xm^UBxrFdc zlWS1mG0=xN#v57FXHYBf?y*>tux(kFIg02Z2Cgr{M?G=@4Lwgo;|plA^E7^Xo`!js zyp3J(^>KKfCcA{@f?nqr(coBb{2h;suS}>r)lUv6axp3Ie!M^5etXf1C|xeERx9PW z6#gkXI;a$&3Xv$$y|8gPK?v4NWWgJ&#uPV_0$J$=MAjftG}%Nn^enm`481|5KfaVS z=)JO`Y(lAZfrT?d)qk&fA)R#r-G$AKw}!l6uH&QXiW02&`UMTF;{z7EMjO8KX9IjZ8jq!*`dTKa0Lex)ylswbaSACxxL2A-(X zscvOc-n#nI*U75)R441jMlG+uV4!BWScV+7i#v|8YQ^9i+8(llU zI!u4-VhxIYv?E#J(cPvt!V;mMe*R~g599;iF!0GGnhj+;RQNlj)? z#N;1?HWgW&?Wvam=jxMekmrPJpxTmhw^ZSV@7PAa!yt@zpCWX^o6zv}1_vP1;4An} z&Jd0@hzXW~nf4McT>ACfZ|6vCAlX6X9_W||W~ksacP#VcVkB;|RfsX1r(4^}hjQTB zA{*ufWDz?wj*vAuFvWz1VYOO7#ow_Vg$1Ttv)Rq$Me#1+DJ(25<0S1hOL6123+Hwf zueXEtb#A;o0gK}{*Ga(i+K#1ER`*t?YMBL=8DXS51!$n>;}mLc(B+9d?Jq(AgGq;l(Oa3yP!y^$(XnQqrtd0NWLv5sV~stt92Hwl~c^ zHw1WoD@sw8Vj|jJ{9=_u{uH8ghH|{Rs>up;R5?{iRw~^p)wc`~YkT6+8iRSGUL>H) z;0A~gNmG?CUVTm-Yy%E^%kVf%MvQmXdvqK^PQ_sd$FQVC;ydBRzxRDq7hAW;DaZH< z7HE6sm57NX{O;bnJb0`QD#8q*n5r~~UY5Hz+J1|A-e$x z0wFNwxW?^nQZJMR)sOyo{n1Af?O@Jeh>y``d>^s{F6p!Y2FG4BnTiodMx1uda9H31ErGCyE(bD3FX$D>E?|+ zgFlxO^s@Et10W24=7B2^3GJV^|Fj+w<~HDl)x%1^u54?rFJ_;3;@UP>-7gt=LUi;j z*(5>l6PNbP)MvBLJaT25*ZSh>Gml)`vm1SGeeMyE#m!GX0t0{1x11kGd9ajTXwB!1 zv$vFDK~dWQOC`$1Y_F!1;uhG4H&NeIMQtS^4hJegwxOQDB5GH6a{G3Q1^inp@2^C6 zn52j+jb@6dh({V~UsaE^WOrJsuEAx;U@EP}<>Xo!gsd>HZ>&L+f&Nf%M1&CBMJ7)> z_e3NAsLxJT{+otB|EyMqzBx1J7|$!50k(~1T~}?1-4wB6KEDF$5Ce|jXbb+lJ(Whd z#6yMvmi8VcxIIE~*0sGF;V6x%H+isD@Qx3s)8) zvbJhty0K#(SDnOH)Rz4gk$nHZAp1=w$Ue)p^R$CH)N9WOV?GB%?erzP!BJ?@Rl^dbjI1 z7qzBB)Rg67l(GnfR+JvKGKa4;%vCr)tgnb|)&c>SHQ_8(W4b-lcj@j*D3N6a{_ z)%hOahgg?Et%$MJ(lCF2#k!nlDx6uBt_$iDl-^sn z=|`H*GJlq1HYZ{Kz~DlL&S}Rri1TrWb|VB%qj5IF1QDA<35TY6W4MJalmxp*TFminVTx4JV;3u!|y+24c0J>UiqmZX2!yg&^tIF}!mfQcy&?prZ&@bm*RLiUF93 zEzyoe&gWOk7!r?g?O2kM<8$s#m?%N*O;7?qyQAmYGdb)9d^#geFR=N5)9M$S4a|*1 zFftAwuD0D%r@`aNct%0@7q2iK4f-R}*HPDxIbmABc>qiwjyX4^28ICRC?7@i)<~W9 zox-8$Cd<`q0CuK|MC;NhnY1O*9e!L`hTIcb;PZr2%gUq<@a9JoZ6t4SX6Mw5K8<*;`KH0J`O}A~WtvbRT6ox)%u$ zdg|g;i9gt!kQNT1wgnO4oXs8mRb$8J2%}(#xT%(!h7&RV0(b*CV!SX7Lq7bT%m<}E zf`KmEq{BoAyo{hyJpBo(ro;C}l&*#E&0qxrVU3_`&9u9e{?9bvbWPR9oSu5U zbQ}psXsYd76Lt4*N;bfT>~)bAiMAzfP%0NAz=^qwSjez_Hg6=vltix_q_1qQeL;t_ z<#Na>6tjc=Pb$>%GsC;*+Uw%yf6c!aPYR#Qd0b*lNpQZA7vP#MiDdqWFb@ql+1(t( zH|fADVXQOl)+1@={{$ujJB&E6UC@;BhL<#+>7mt2Y~VUeH(n(z5w2^Bq8G-*lbl8D zh|HrC&}1$x^J=*;RqbWIdK#4SyWt|zg2QCQTR(8BgPvQxZVszDHjapi~rfFInjn`Bh|CR=VDX=GNxv&QJ$THA# zzsl4**?Jr@?X7?V?e?3cKO;_eMA{jRTJZA1m8$kPzVMlP3h-I&tFYv~FU8FYresCG z8hzs~Dme5iwM#f(^>$XsLI-wk#E6c-10e-o7SmEs!Xk5+!%TIIJJSaPuDu{)erV)8 zhw3sTYg(TfQ5H}T^CO!sY;)yzj*_NyYRw9LvwCa~`pD@i+X^%iU|w5d&5Z#-4m%?| z+D?x(1Qb6o`^(97v5mynl zaT>;6VU50fyjRy_HS^I&#$R&-GtZB3T!+lD9XKsU2p6L*jK0;Hwa$-k6*Blc|04c= z0zr(2v9%g|dUVLl(XLqLn)jAEY{*nZeb{4c>_TJgA&c6M()j6OmbL*maLihS;X?Gy+-*L8_E!3!kSM(`+ zWt+PqzZ1DZwf}&|>8)F4&&n^xTHb$)%z~wfnH5j_sQ0-M3#iB}!rRm!T|Y}7aw3%$b!KxNLD=*dFP_m|1~!UF zJw7nIxo*N&#Dxwid=%La4 zTEQe?KAE0}kybE7BjWYdB-e8Js#e-u#G%dQd3^ep? zAsE68(hufM5?GU{DYm^3>P)A@9dGNXg9AJ_m+Amt-9X`+D^kW2gdcuR-{oq~kZFT% zhFQFCf8N_N!Y>o}ezmn5nIZHAman;(j~)yUDfBvLZ@$R8eEPB`Df8uH1)D0IV-i ziaImY9<4f=Iu6*GIYE&0PfW|~x9bsdSX_VTKS^o)q$l((s@=xuW;eT*P%t1Mk922X z@eeVB!O-KgL-y_Y;cleYmi7kE@of>!k@rkSUS>$1-4Q}7lAUt(Vb;yc2C8M6efk`nGUS(yzX%|cCxQU z!Zc6btYw|k9a!>#?2L5^!xw9y?|Y`XF#E<%ynM1Wim{G9hj+nRobo)P2*|R}3=CSk zP1ySqRcVBnLFYxh9)*uRPh$g|^d((|jY$(*Yne;;(e9KV3rJXqx!eD0@o~i$ayv%q9@u9w6s>0oy4n5Ni zfzH4-_sRMe&C0~UMAOpw7B*`c6dvAm;f-@%!-`CNZJ@p4M)gx7L$IrRr_l$NBO^M$ z{97ldvoEm{her-69bR@mPd1H<4qgt;Ej4mrAOa`MHDUx}t=x`bSqErHCfSrv{#)ft z>*4(Y=G36!WcHhXSisRaMq~PJ86-3@yl~7(;SvC%t{cF5`IV3WC1r0L*f;{ zD~vC2?1Bt0?)rsKuJo=yLjkPP6WrL-#BM}N;}1?t@wiuz_yCmKf~e5G50B43UhKE0 z+y6ZNl!FLMMzrNqTO|~1@lkZ(({oqnvz-c?bfQw$YM&YMO!X!qaAM6YQLF%}6fzt7a6 zAZ4i^Lqi@%MFt#(q~(rMEn>p$yK~Ktnh^9lCVIv};xat$7AH5rFW)&!*&%r*mVMS%u4GO7u4J41zX}q`-hY;hj^@j{Aq}v z?B_xtP)F~}$(3tOtXykyKA|NHAAu5pF-H;InVM$XQTJ$zS;aYl{jF>VcyX|%omlekU71^j!3=hf)=7$BLHym}_VQhP#0bE*xWFOs*5mLO=)02erbcfIk8zb1%vxz+pHaD{fCX_hv`99+GgRcFNW$cbBfrV@!6Q(-)X?>cOX@%F94c z(*DaqPZ;*P@OciaAQgEj6g3N0LQuqglL1O+n$ zNER?8y`z9(=39>OldzW2$r2`ko;EawMP)z++LkB$p+Nj2sbcTId|rG*BGzKT&$n;i z#Z`0fOG`%Fa&+%3CN3S@@V>Zw(W2S6;k9TzN@r-j&XXU~ZFOajV=Wh&iW zvMB|z@512`I34obN%_8SD0LANJr#+<*7@iFAh0#`4%X3*dNt~yusJp#v`*1|%~lz& zlXD+_4VMb@Jj?N-mPdu_Ykx3Ic(4IEp}u*kyv#M0Wd*{m4<=0V5S+#k5H&iAi8N+W z71jbmMed?cs8j6XY@f!4M78X z0oEiwrp2i75l#1ey#^7kgA|&2Yuyr9RsH46p|gEUJYKYX#3b{nQWccw62SBwo57oW z=u@t2R+w3ee!P7#w0Yu*^7x5aSCcqZqr)mA*;@8r46$Kb5;w?U7#&!J5A+so3L4U8 zt1v3)8m?ww!Qd8hP`LI{KE(JX1bVLrh`b)=2qNF! zESUd0Y8$?q1nzQP?{V{p#Kqm_wkUJR2j(`W7r7Sv{N8U^|c)40IjruI&^B(qH89cG@}r-T=|4N`W2 zN~taHttUnTt3+&CZ}fC}p*0yH(M9)#wy4**fvwlVO!{HK4??_f(E&q%GhMU&ox)lW&0B&D*UIu46)Kz|9z#@KS|2y_|6nCjUr zuF^I%D-5PqvwEGe8{A+$3b;dHlaG(C^rJ#pWxeWvzPg&t&6_K0sij$jHx(?c98(qC zjtYG%W&vzj1k)PKS0`4exWOUJXIpNx@!%FLqUbzX;sA=PAeZC=OD!Z0#dV8D*=E*T z=gx9AquRSqA4utem>5-1p=FcprnT25(O3{lWwnUc=z)b zywB&enH}Z&x5~B%hvi#!PkMF)stf%yMre9~(@vsTe1aQbFtIY(=Qzkl_>sgM9d%JP zfUmKPR-w=rY$$A-Jk;?9svSK>pw+^FI>jbSLNq>NKCTPK&2AqYn8gUn2zvf@)Ribp z6On#Q%gBbO87Pc!76<^0W>Wu3i{N*`SoJE=xwQSB;cqWRgpT;i@SWzd9=w?N1<6D0 znQ{g%hE?HJm0H zH)_BSR~)*JSu(e8bCG}#1+6iwkBNc`um0ABBOM~L2MAg|ACV6yovNo+Sr@W$Q} zVJ*G>R8EO%hkA5U=@_7+QQ9$@G%z9{*24)$J1sS+RA*kYwwQQt@uv0Pa{a9jvxs2!JOPlz9i!+Sa8hj?aA^#=pC zQw&W2wuL7FZr4mCjdL-M!WkM35Gz0g&vGNje0jVCJt#92bMYRJpAVwl?xZ)B@RT)f z(@lZLuHED|wx#?atvC@d1vsgUN9$3C4fQPbv`crkXI)M@znpZ5mjJqXb92+$n2zHL z)vTAYWp%T-w#*r**i)iP6%SeqE7R)-4bi2C0cCyTt55K8>IRw{vW!`<;o5P^J?aqD zPqg6nPnE^s)0INAg$DMN&0rawS#3QXkfv@4>=`pmhP2f1Ldr$WF@%NJ@Ia^>*Qyp3ep0tusip^V3=*CD5B!?ZqU_ya~tK+?XRG070t`hE<{==R^n^ zMly9nm11%*Ok$GP*HpS2QUarf32iD3(vZ0pNDYHQUVZf|H*k<(k9?lnv?jz@y9jurl#9v{N4?=F9-3<3Uc3DRMfw3>O z9QLo0rT6Jo3C@fIb8&sMSXfuuE+igE)2SYERLU~G>*LP#Z>e^u`qZ1L;{p0cN_m{`#+m~;~y#)F}JkFk}3`O}3aII!+LvRhnp^QfnUz=J`re!#*{}aZ) z{x+nbR}hhy2ZL&J^!-+j2Fw$`1I4GrNU1z8_c?IY6VL22^K936kh z;uju2J)wg5)I+lx=^wxm2=bU7R-i>*D)3kua7%|v4?6Kr)nv8x7^so)n0GMhk(kUw zZ;?KRv_PEk+ixOqV@&x$w`NZ3WS3YR1I|gr;X7Oq4)wGx&G3>K=6J6JDu9%^Cvi3| z#Q*nx`1wjs3~3fJ3O!HyhBzMMtqTTE>IG`Ac^R_E(Vodq_9Oj~y|DpIt5Y6z=+YkJ zhBn$ZNeD+L$K8#xZYT^Idee3F&xmZ8Ye$*OU9Mu2B$OsHr4RaJglit>h6mzDd0FHZ ztU}DBjxU|`R~60@asE`|I^f|5eDJ3!=tXx6?Zef4$OrL^2YfD}+JTDT{UTnS3TVJxvJqt$NSpv=TA`kU)k|U9{9$%O{ff{`GqC7)LdudxQ@FSnGse} zFTEbjUV71dSQo7cOWX39AA2);-eLRs@!?(QfC`9Lb8#uwi-JQ`Ay_m)n>7R?qBHJH z?GDa!(C4ZfUmduGM7P(M(BFt>P1sj24#B1V*p-WkcP@SUlzdDg0ls$6dDv!>OUzJ>=Flq(ueq$* zTt&4wfyVyATNh|&3lLOF0zGaE=e(>IX^Nhp`Y8He?*96^IBX-D(ly=v~ zg@V@nf(GUNULVM3la>)I-?Yqh9>TYKIfC7S_<|?4=Ww=Kt!!oW-IIjF?}U1WTn-w@ z??;fl?h!mIS79-I6sAJ1fefO%S=Nq(kk_i1E!7s+!o8KfGxPIaB=zv0>qg=;5uy$% zKB5R3^Z>E|i_j_KB8D|TcL{IOL^myx3^?VlX@m$pmCK$-xlv#q9rOr6r=Kig$bJSy zwsi;$HJ#4_ZATp9QQtD>ttDS$m0r!St}SbEvlxAa%TeMV?*K_%jgk#azOm+RA?#0@ z%OiPXYoKf(uh42gc^tR%9zONf5I5%th9SMMhUNV&>~@D9fuClWO-O(}=0&2dQ+}lJ zo`mS)QpLd95{vbNG+CruZlnVt4AM#j%>0F7^63{2Dqb2?2`qEX3HH=+ta)V|i*p(Y zywgemACP%-IB5hz3C`@W^x$mAWDBesmOM^k!0^LTfEavw;>n4pqREBv6?V;#6MwMNP*NF_~$xC^{i+r|}d6r0sT?-kk zPB9mtD#m4tsLo$zw@Le|Hb#NRM|?F&E!|5QXvmD%QL@m|i20-pYZLY9vNEGZraK!A zw7j6fJ8tFiYPJsOrEZYP%>#R8Z0*;+(i7GLAzTeC-_wCRP**^AvkRONYgW=fB~E)1 zxL;VZlH>Pmnsf2|)!FKFKAGknh(J{=ROhI>ynm(^7A4_ZMva2eI-pZSpsEm~_j@-9 z7x+z?3uM`EK6A(e8iGJ=pG=)NHpqII#;dMl{QJ_DNlE2Bwf%ojZ?IWf;_C%2t5);n z0~X$PFy+5CzKOnywz7f723Z{4(=ir@RTC`kO!aWv=cRLrj zZZCq~b@U1N^>iD3`Mg@^Y3B`X=KB6Viigtk6+w!);F^!1#*w)iwLri*873gtQ_Oz} z4ATNRSr1V}(cO?Eyxs%_1}lvDxo_DSNxAzqAW?Zyf2(~baY;3rg(Nye#%)UKw3s4G zh~6CXoqZ&ll-q1*gG&F4;U&BV(P7L209Dg#bmU=KJ^1v*lM_!x(>1N;ZqvNvIB?P1 z3Fg6es3Keo$LG`=KH=bG>y=kC>}-0k2JLseQ&>4RI>QgP$9CZ9i6xDCM4xF6z37ED~nnI}*eHzhf-A%n4VeJ{0n9ub#%O`kdQcdUz$JN3`mG<|*Dh z_U4w~S?pn)yYV|pq=+ZMf&%vNCL(xkiQ%2TU>HXqQ{*7X8hkQ3__v@nG33Z6n-b23 zn20!iw3Q$V+YV$i3~2;82P7pB+R!dtQkEswz z@AM44(-jer?_uOH03KvWpNFN7k<#h4qWu;TX1^#MYJ9tmZtb_XZvrdmHqQA2Z;NaK z8ca2gpiSe171uz;P4R4*O;jkz8O<*k0vM(*&zR{nGKS)9r8D>5$EYRFBXrj*Z)Qsx z8fk%PJf*A<0~h7C>u-XlwK~&rbVC0;e;xat7PKQ-;E39JiMGkBU%cWKZC?HIJ?Y5f zJ(m@bCTZrw*EY8{+M8Gf_dZ1&lgiPk;+SmX5P@*&Mpswo{4aargIu2-`Jpjcd5-7p zW~PiCmy!1sLZX0PfbVm;?ussn5Y@JLEE`6x;>lJ1) z1(h_;{Ki+k4H$Z|;LglnU8w(ZflW7c>bVH39_e^*MS^rC!r}EmTvr31j6^KNp+s!0 zj1uiTMj@8Kzd>-b(*m8t;kc;7y)tco0v|FO93sRWsvwBQv{Oc+EDcUl*#(MCTOjM( zm27cF#0+^>0HaqY{Mh`I^azMXZ4G7|h@3yt5 zkpSF`It9(+Fp&$yifrLA^@f(jejT@ckXl$n(PN2d#{rJmFvO8gJVF=V5Mal)PLKqj zXDtX6w5f4V(fX2?7o4*ZD8{47q6c4FG z{g_0EPY|q@)=l4N*`n!ezrkJC7aA~=alGSUpzdcer3^S4Yp&4H>BinIwJa#}IG3+D z8OntDuTEXfw=ScuAEZUl4m|29t#3ZtAvO|GLoP6#m=h9@{_=dhMEATm6+Ih1FLG+F znfCa^etv1RZ;!YcXw77}Tyd2M)~;QEhA^-lV0s6BF%0Y+dxJtak3 z>Y&&QtG{qzB~h9@h#W_QS(scm!sKTM3GSf%!+8#8WW@|GHC_0i(?44QkEqtYhoHmIP>rPoB@CmBvZN?L_oM;J#CVMc(uB=C1=DA=3dR6IHA{M6 zVgHH%*BS=dQ8!oMmoT+O$Xu31GjpbQT2X<1+IT9nBJ|X32JO~H#sV>{r-nm8XXzOV zyV4l}<+3EDX~E(8e{|#X-{!O57M2XVZH~+txBG4Hin&2gi5KhL@BatXF&1r z3Sf_gG|o2b{tZ%$xcPA=?(WEu9UZh#1csZ{A=^E>RvZRldagef=7u1~od758$E$gu z_Z90ktb%{Y4t9X*;`a|UMdNRngV+n-+4T@}tsNFVIS^yBeDYPoc$MeM7lL41 zWlYN&4n(FpuK+p1j8p7AGuXEyXn2GbD zqwU@42<&x~A_D~8^ln-vED5;RIRb-1k2dfJ9)lyy&723?GsCMY(r>DNq7kUHV@zi> zAT3o{lw?w8p~y6X69IXGg*&53DG4lvy-r4Mlr{0hCyHDSI5F+}A^euAn zhXR)W^V<_F;pRioVgtfUVmHC?1Iz8?ACv7xL?i~CeTOe+>r%HsbJsB&Y~|3PB%|AA zIY-R<*})Wmf@;ML|_h9Ify7aSOa^M)ME*wLw>~HT-v#U z0QTM7J=jguLuWXKXRk>sA;Sn^tk&!>vJ|i6a<^fxZ!`q%#lY}X-mJR`)j=Z7bCDhJ z1U#v$aEicBLWC9+SRABpo*}?6ij;A2M>L#Bu%~3!3pt==1%BPS@oqf(<1C@BmcZgc z35O$`EvmbPo7=4@^cKDsny$b6tIHZ1!*W***})F>Eh&kLeqtzmry|-C9PK8ZRen?RS{zR9q|d2T|0(+jdlYE_}qy@NRJ|jZ=J*ycA5< zM5eYt@OkP6;+j}r&UCR{^zPMH6Ub3pdB0-9+zY_j;n*2HdUUB2A<6}-6r^eTnhKw| zgucE{X&)<-4-8DiB>h0l*JbpVb_iA}171f$ir<{lq;N176PbPrm4MHDM$@jCi_<$% z{6@WwwBxVpNcwjAZPM0u#CkLqy`R?6eSq&K#oUd>^VmJptFZC zB8M^yuiBdRiRxs%(^OJNnWm}k_NR%&t=SnGAi;IYdgC!bSb5kr6p?SfBSCX@UT#Zfdo&zg*s+Q!*k3C%T$R2iPzsE@N|5B++HBeO^&G}(q z+u3u)b`1PRf|X`67Q4+ReTFJAEOIpHA;Zi-oQJ*r$L+V5zd#fK(F52ZrZ*TH1Q$cC zpzS>kkNr{+I%2fv(ZZd`0CF7t2BT|9NJkaw&GF+=!9blCP zcpu5*lq*JVV$*a3#|bGiwk824OwNjeg$3!Owu72Zq<1{yg@FKXypq)ZxckTO2&(q2 z6IX+IIWDf0*eM*vL}1KnU*XmKf^f_f)GavdLnb3NHuTVw9i|oF5y4uqV@tZ2C5S1; zHq>Z({QxI`BQg*GGeO|PvweQ^L10Mn{sptU_B9sJNDd)CvuPbCV1m?h&0{WatBe;iii%z-PCdp4b>O>95g7j6r4gf z8r!Vy?B)=T-yRH7UkMO^NW-v1*R>tN zT&h6tcSX2?$=f|WV~RKp4sHPe2Ga@4^E4xCl5TfOq>e~Ox<1=AV2cUa;Iw)~+!_QT z);A)#uPc|$TTZte0ld=zuL++NBW@9uhXWE!I897d54U};YPiv8vZmb}jJ1P%i-JZ} z#Fq9gej^BpHWd_AF<7z6F~eyaDg*t<+o^$+H9pti5X1~Jz+myTXoQ$34w;?d9|&wb zNd_Mjn6sNWU=uHW&;p$(7zXlke2q3bdOm4t?h<$mBKD07`v~1Y(N+j8H}fPUb%zq02*^H z^YGxS;rK4}j}7KQd-?q>FFeLG)r|;Lhc0JDyEjOjAa#IrB_hej!>ASQJt+{E*afz( z3p0d%ByND$L~BHD>?2K$R^ib`_v<-&Cvg;axS^Io8{yJKx^WS0G;VI^|ItdEQ-II#&Ptr;jk% z|EBNa`JQlFBbj{tg0Z1IjXjjc({ly~MMTzx*}pBo56}Q7K0_f}8B_>BYdVCbA=nJa zSe>6L)vz3S=Wu&#V5uNFvf^YVsD$r+sA$J&%_aG7OY~&xJbp@gGx)qJ*oDPrTI@rD z39)agdbsU#Rl|)&lQr$;suRj9Gh`_wwqfysa4`*hEsP~8O$bXz>~1iwn3A-d)~!JE5WWwn({2d*PL5F(i0^~z=CZp`mW$ia3`in!u+vmN($-we(WZvN z>wl@iQMgN%OR`TkHxjY*OMQa{baCg02jo{iK~*5li)Zv#-gl<0jIZ-w8UG>p)XO^9 zzsQPF93wF%hb2lleN@JjZG4BP?>y%zhwU8Fn1KEipcg@&7H+Pari1wzfH{OYu-opw zscu%h47lTF>T!`5fCel&3XJZ2F!t1^d`H5B>`@`72qu-^!ihzkke=K)6|vrf!>dU` z^1}a8QL)j`;_;AxaJb{=da1{BqtinYb{%MXZqm}{Y*Y9J*@JX@?nLc7r%AzO#6PWP zU_f~BI3px$z3!B6p+AHvrp7>LQcxa-K6EZ8vyXBIg8T;fc}fXlO<|4_FC%fz$cCFU z(;P^S)|c@!hdFqAJNizs0!FGQs#>#h0g0Trnl2jY#oL<%h_z0>J9xPK4f-u%E+(@C zb?eN8g5b^KlDD!Dz*(0=jT*}y6)Ev~P-KMZd3HRi-h3bxf#8v4oBniqoO`PMt<@mH zg0YYjE2^fbGT=5{ZWn7HEkf_5WHopn(^q&aN1af3$@Hz6)g7BOW}ese`xaj(Epiw& zAa>~q!*p=ig@FR2C$`khwTwiV!AE3e_AK~)a&gGoVp)@46!FuP1fwf!(KqmAZi=xh zXP%tTZ~DngiRWQ<7`kp}FC8O+W6$cAb1Lc*JyGeKrJGBF&urpn(#3 z?XLY!(g>~H@3;hWH5&&Nke%n(CXxq}S z7c`4;A?4?+eL z#f}2=+{XIkg%-uEMVst34te{K#%%P+W6xEEK@&ByMT74e+4=&&}M|?jP^So#@&LF)OZsF$Cj9_h(y^_iZGP%lTRK|zHRwsp;hgKLY?wKq5qeL=!Yg{z8B zQ@$bQXTId>>N8(5LcRPH^+->yuQkjVk@>WOh^X9DFlQR^GW3!MnL}no`b3wZ*-vyC zs9Uhb9;xm&U)0+M#hhk#%$eHWWGK zo{jQ*s2Vq{AB%9>?2ZJZXT@mKrvqWQUv>3Vd@JW*jnhMDG%5C5R|{KDW$RTh0)NvuTrgo zva*|_B-5t&gF9+{_l+H!qU{kDmJ$3hoK0t)gGS`xEwe_w0>e=g?*iAwp6i4(+*Hnn zXEdK$3+>q+G0UuWU84rYE1X41Xa=NEgH- zLhlb%v2S@+OpK_$)E=luqm6lUeLWKSCUGWlAzZi)63|UR!Dqq`eahuSIV-Bp%flk) zkxzEzaQv;faK+V`tTpr0$X; zBVjw-SNip&)O9bAR|iU}r8*EmEF0}j8a)Wqnl{Vm3e9gX_n=jC71ADL3wQLfHgiEs zv&YgL*V95EQ_vhOQ80(^OX+R{6c`iOLQG2w_QCX{FC9Y= zT!v?u$9`!pwD;d1^@oS2=hjlGyW4wiM^nk2#B&3t>4UaKXrmiU9i9ax47$MRv(1rm zm~}BB@y4O!`x(PIqnj$FLf{1ZQ>HBGf{rd+H4UmC!xU@S)+w9?lY4bMJ+w;@;R_+r z+`Nz`u`0_qG7Et!cl#4Ve?8U2NKom=8>xv@)_ALugXA}!)4FGe5bjiTC!=7rkQYu& zoH$gl5-_Ep0z~Awa31mvNReE<*#}0tbW*e~?b7%I%g;VA z(xsEyb!nHzA6Sk)FtFCpndVm)+ez=bw9n%YEI<3eIg`g|mo9!_`Pm1~**-4q()sm& z@dM|K7?*bG{QAH60qcy};nFUhU;h_BaLx#EX_w9~@5>&5W0qXVc85qumctO~$TSU+ zjtt)r>C|Ukwws1Xr#|bl)i*>s^;zm{eT_LtTIX({-cnkU_^bZ%_qT^{x96x65W{mL z33$s`A7f@S!aQbxNZmxDUGTD={NHI@qWiQA$HGk1}bPwAt+PWHEk&3R>R{v+1BJy9dCg}wbaGl%NX;i=l{}Dj5TY z?7Z=a{uDlfUyD+JvHd&iV+)-Iv3`DSg`u4QeSbg+_l$K)BJ});&{N8l*c7PTf&49& zdN*lDg&-`T2Y<&DIr(Sa*oattqoN+u@1P9x^fvRI()fq} zqnm!(W;LTs<|i}~6HxAr+Pp{Yv~WsWI-yG(Ip##hhnsBb*o&+wIXR3qMYStnHZ})x z=taEQdB39NB}`%n+7H3eXzGOYprm5o__<)G99o0D4jL3}5Wd4V0XHd(jg@r0uFwrj zzGIZcDKDf!8=q~ifX$R}=v+i>eS-M9rv1uz>XDe=op&PZT6TfCk$@v;^2YG$ykOcB zNkRgX`hakDqqZnDRwO5zwlCqH^G!&p>h^ZWg`o=$)rOY`IC&k|;35_fqaW4vWR z&q~q{C`;fF_Q`Ii@nBC}--yT_#4w*!Xt0Ctt9-EQZ_*=iXoz04!Nfz(BYnA=MQW+( zm_vnEYT?{b%dQ5V)(8WAgTq;n(-y$#CPi?twvOC|2o zvQ#c4@Z7;{zv#Hv_jg1rN`HqC+X#$PyMja^td3Q`1i7=h05LDiL*k&glcUq#A+&uG zu5H)@DP1GhTijptd*~wwd+^0ELNM=0ScsX;TQWO*+>rOT+)q>9Bzu4qc6Y}{|4Debp#s%eT2>L(nA z`+w+l{xI}tMFcw8D?9v%#mVA28t_aKu{Kg|1J_kOEweS(pO}$&OG-U5jRBm(!8=O1 zUTQ{>#`4a_EfD7k1J)(a_-&hsGqrA=xZ)ZE+D`B`dq-P!RS8x~vi@qsY{k5;U9VGGK7r2n#)3k)OF(yqit&2B z+Yd~|gR+jd!0?tEO9C$;-)c=|?|eoe;w)j6qY`ZH6eL+F?O-McEQL1&#E>ZhdM7b@ zgS8M_b!&R`)LVb1o&cP?B+}RuFi1{oy|$uj#hGy)b({Y zJGZ0 zc{2W?vABQL#cY}8?72HzAq(w##(q^K*8e^;*m{<9_ru_h8S0n7ue;_7%=?kXo%}_Z z^)Muu33P;b1LLo~gvsxJy}ipmG;n%a#DK75c>5VqnYT5vZG>6mO74*pVjKcX(Z`cNO9FX%s##m!eAu#!(6oHWg&xp?+ zD3?pHXVSpzYamwUB@6=$+RgQHasgTz!o|?+dS(tElj~wzHI3bUB@K84Utn<$v%Wj(pv>!v1LA?m7AQ* zCC%fUt?A*J92jh}!56FrLNd%9Pmc(TEY8^m_Y%zzr!|ZzXmOzHMJ!-$Z?26hft>K# z!)1W14t1-IaZ7nj^gGM}-ppr}K&H|VYcRc8aGqq=S0Xc*u_I$ldnVo-R!t}s) zlRH#o7Rcld#U*(9KzOMw?lSHEr)H!CUXGbz!Y1kK3K*}CUa!>H(#M{!+XxJP_-Cr-@Uf2#D!1uV|q)>S=L0y^-4tyYCEAbe%3@l6x&5H~U$-C}QT! z{FA-3cXKTObCN0A^p1IUSjI|N7!0Tnr~7eDLoZj9 zY2h{r+XxC(Y{d{5JZO6T3dFe1d=}=47b^+rmU|qtln13^32;;|vzW3NP6RYGhf4ea za(^H?HMKm4x^7vBUWxnb;R_WD=A-Zi5p-NPw2>CWPTeWqIcL85wnG3 zH!3L(hkgadJ<0goeqVleX)d$}az{ua(bi$hRz7^naBjFKvT-RXk7tJs$a&fya6Z8? zNjGg+P1NdIodlVeBK|W?C<;bWUvfntE2wxOd?`p{H7!6qdVPB7TO0YoCYbCMzKp~mE7Fv|(1;q3Z}wmJ z_VbU2$EP3m%j=Wa8gDV?GyjJTKzRQpWBH^n(jz=&K88uF)(W!B!G?5{*zB(jX@# zihyaBw6W0ES}2tphw8M282G z=XiNcRWx91Ltq)<>~pT(?Nu{`w*sv-aAn`Y zs928}Th`Y>7$|U*GT~Cx3fB<{igZ3v_sGmwfy)on}b#in^vX`QpAPE<|v>p`brGf`lnRBVLE7>uw3*?J56 z8T&D$0}C<#9Dz>$cLA#Cp<>lxs{hMI&AQRnaP(HL7>)mxuUqGx|I0>Cqx1HD`)rU6 zd=9V%Euv8gTRPx5-%C@)&&RvRCn-*NbeEtSGjP8uk?TQh)c!{I(~P_c@Ld|B_XKKf zO7IFW929gin(J!fZIGij0yu3$-28f>2Qb*#Ud1gNrPC`&j~wr`T*Svlg{Oh?E}ZQL zX~p$qsQe7l2&G?DjiNBKo#J>zw+3l{04ZHR{R>Kmn*%nP5O2pao{qk9lX4eRTaML7 z7*#gjV~SyrDRS!$jRZRDebi9p$f#7Oz$8t(nG3oxG8mmVDP8T<4h&VNULC6T`v;zG zSE~-AT0kY*N+r4)NzQglXiT3QWhN zr%EBvH#IqE?m&o-!c*ji5A@%yZ(w`+xWm(pPk|x!Q-&r9Nb;Z$0pCU3+*UfcIJ6NY zl=f5nq@+M3vouPXYPTh& zPi>FF+DkLvOjO(@f{^UiO3A7L+}F(#yf9HxD`BX%PsFQ)fAyA?WgBI`YbJU48&UFw z=ky7e1s9|ZlDjPov5obdr>?E+>-hAA&ZuH1H3 zMSG3tSwpuEjU>3ZvY+{mTCeZ@9fW8jDJFvghUL;`8~y4A0v(m*%<~ZXJA^siQeWO5 zh}?T>YSwlquLXaT!1^|H^&g&w9y;QK?s7Fl>o9YXBf8-!RNUt|jIF%C7Y@Npu)&F& zg$g=p3oW>02jvJhjYMrviXy2zRH4Bg1J(UFD8gnWk|-1XQQg}P4+^j3O7?-Afk2E* zQxhl?_atxSjXI^~1GP{Z8()FlFt=lcM6oMJNeA6{$d+cXSwT3o5zUnm?LPz*(GvdH zG0nkzoz#WXlu<)=_LNTq##AnRoJ&}8#%=f~-ZRxdBEH~9%UBW7BZc)?+GL-Bc3V9> zSSrO#d#)u}340$-wfALjAYj|t@ftSr2EFg{Jh1z?(xz zudajU6_7E0r9I)7tKFj?5Im%!C16hC4g*mlmzA&1Ki@TaP^dqoteK^^J51iuTE913Kv| z*{HhjF{5qn!$Gg4m9}kH85hK5 zqMF;6MF$;776XzmX77J`XK9ZVD3;)b@;*5!omgh)8&n! zP8gKY#G{J}%$`t9I4&_(INvOQ~m!Drv|tOQmAr+CXy-re#*ZFYzic zWuPtOdB2~u_Bzr2{`oGJABs2(HEF)#B{{ON@^r4Lwk{)nS7UOM30zHNU zZ=d_BMnUjqea(69NFK`4ElNosA%tX417IX@ss!wU@v&om*B5QJbiLmDyif$#Ja@V4 z_K)V#ULvvw4Z{@F!fl_~s+OS9J!x-5M2a2N!A`wyxiB>#bz_DqXdiTKH$n6*kH>s1 zOWLdFs#-nsN3}r%|bbT!xVJp;`$ z_Kd$@>@6trv6uX7I9EXP6AEC0Uw>swestqHkqF`y#Oc#(o!k9o}` z!(e$OMty4ih-6U1tLMl*4A4(7yBAJk2H!02m$WP?twoCu(*p>Vm}y5~(cCOo=G?rt zmY4NJc-z8T5>QSo6C=c|6?P05?qW9o&CPbx-P|w?g%EbaA+=1J1=IdsB;17)A;TS< zR}jB?hPS^qW;tjN`%N?KTaE$Q^@%5aPbp@q>2m#!l(X)e8l(q`4GhvDg{N)sG8Pdr zmA!%Yue_rmd_q5n*paT$YQeHk3eysdOb-?WVPP{{^*J-v9 zumo~wezAG_;xSzS70^CU!eI2s&-PI9shyy<}E(+geg8u(QSg>8cR=%MJP?<+H1^fz`p|=4sS$I-kQ;L61CxQI7ac+b0mJU-uH}v<55v;^` z+d(jAAA&wPsORKiSof8uC0(2r7NHMlyw%|wE-xS2#`iF0pcj=aqDec}iFSIvT9L4n zxCPh_p~g3v@C9l_c1~BA#p$^G|g$^05eTxd?XjlZCY1VbQ0e9k#32|#Ym8H z_#>}Y53kD)DKitg+3I-^kX@^iD#?Q!)6Sx9kMY-KqqH1=UA=%Mdvr5yk${=Ujs13e z^F;?`8tYOJ2(za+1`LSM&NBa0Wo+F}8a z20|!nA23}p-hP2aiAe_^v70BE_(jILKO?^2OYg)wlqPxn(skr`9yztaMi-rsx*qWu z)p-vfF@PlprWAA5`!*2xG2auPrgSeezIf~#vp_*}LHMJpzOg=E7Ql7W)}3Ck)fKmwg~zm+r;-Qu#gM>|B{MYL?ptE=f z&p#sIS87*$?cO&j2&#Zt=HjXs6OwQU-45af z_QZ8_!RM`<0{7}I+JS)5NbQT22HYkr{>dj(AUk$YE;1jE5S)7i)9F~5G~ihuHJEtl z#RXC?dOl2%JH$4Z1H_HS3sSct?iIZ@scEe>ib5AGS$F24tBqc;$adV1Rm~-cV-{wG z=&5Fr$MYcSna`>4`GKMfCExm)(95dSpznPJqld)YNf}T+HU*2Ma?A7sjlCk`VG+~( z_!=&XRn!W4aOA_L-ffb#pJr}r;61Zzq?Ga|O#H6M2{AL-;Uw!H1s7v4sg3ml-o^FA zj<400FHL&kz@}@y8^HfS)Oo~4bQ+oKBa%Fi!M+IKl)ysw@>nubBq1rpmK4}3?*?sz zykFYzOhAD{&gTPJ6?qs*Jo*w&0T!4@3~j^PL@JS^%MXOefSJ6^Q$~K?{B6(odi|Cv zKlO;F5A=+4pI|>SKl4(uMf`=7>}9GXH}c@rzoJW!pqPO^F)&(bpXWB*(k;)u^4v@7 z{2{lODrE0qHSblAy`>;%fjKp)|0b;vy9Ve#4tanrKY>#bTPVo>Znd39U9k0FMTSO$ zt~>PWviuc)i@_KV1=byP)6_6tk6A65Xj8RAGor6bO6_G>^EmLkZmvx_9Oys^>G7?J zH4|g85gA}sC++5oednR>+c#a!)q2Y#`ZC6hurjABDyOubibpA*Q6Ko92;IVqeg04o6}1IH^Id@lmF>t^U8u>o(`WYW`V<7W@#@is>l+4O)iM`?0Qsl3COIyRdZ|vD8|UG{AxI3O@w8H z(*kbgqQm?t%RPpnL6wJssb{uKea1x0lph@4Lu|eWhJA}#ObS*hnPLHY#seC&7qDx` znL%Sv*Z4&YMX_-QgN>EjMn)S$haZj5%^k(tI{E8oNV`9%P1(KceZuYyIngyHse^&1 z64cQ!t5T6cJ(sQR3oY^Uc&?QZ6$rbMCKXuay?L1SzS9S{Qj$yk+{6*1WVSZRNg z@MmDDBIJ7#=p(unE{ z-aQaqXsguv#yM;qL%9Sg7cQ)4iDHf=b_2=!DUrqN0_`uCq#l#-o;s*FM%6Y7K}Y&b zkqRKcSo;{}n@y2)`ogQP{z;=VC*11K3-(9Q|1~Reke+m}@f;bOfzs5%4?|p)qWTpr zwEvt4%>xfqR&ETY`L(_3I09T`ZVVHpy32e?|z4)yFJ!lA2Vzu1x5EWd#efNZ}G0J+9 z6my*ACd^@R1(Ds8iSRAYf0TBHN#Xbiu3}cI-LMV>st8K?5$7sOy@XbY(3y8i>i=EcvA51=GfUf*W7^hU0Zve1k?w6ymvfd2B> zBnYpQFdzux7sRMh)ke#;751siO>24nO);ap3mYw1h@GY}xfpDd7;H#{h{_6hVV56h zb3ydT{ndj6$u=Q70_FDKjf5mlrLE099W?dOJ`iE25~Hdh4re~bGJ91T7$l~VIH0uA zJxaU;wm}v|4Gl%35(u8-(e|)zy4ZE!Bcxb4Xah4v{HA|d0w4R&|NiZJ4SXtd{U3-- zL+E+~9f4eP8*}X@ERHbv8v|RQzlAqj>b*z&AF5luXfLYr+Z1xxZm{IOvY!9*{2TR2$$g z@cFdc&I8WqR;s=__9}!I=iPi%A4C0V;VL}0E+6#p&CH3v;5FrX!t>DZt_{yS)iQW;wBs_ZXIPe$HeX&JB?9v3? z`8xz}#H0^wTOPS!gJizuQEb5nhFB9n`wsTu0rz1f=~SjmDTGl+N&~drm6B%vbBwn7-;^r_((1VU2Rw znRlEjWM|&csT-boSEq`0d=*~3ufMt4qw6+B=vyo=nDF9MadWKN&yY7~b_mQY^KEl6 z`&}k?WblsjTQYcCXHVc)hX9i~6R`B?*(Fj5&x4C_19r#z&-rc`%2ED?Y8EC7D4oxw z186d046GLf#*mVjzaJncsu z76^nJ96)bv%-~_)Dfr@{?dr?*A>Me-)`6###*Vo-Sv!5xoPaJ#ga(o=BL=2tAwm)8 z*!TNmPRr#9sb^R71JU=&oP~ePc;1-f0ricaJ@8aPlH3WIt9ck`#J1c=qx!3ae|+U~ zC=Nc;=GWsq67cGyJnMIb(W_+3=q)ou%cP8WU;$91QB~!FT4`z|N?DeWECYSF*{VbS zK6JjdCrZLCVSP}$yP}VuLju$|V(Px=A@le?D3BQ?G{|iCr5Dc5dIx!H4TCMpq(T}- z67;&4<|S)5(Z|*ep{5Q$7T9m57l{N52jknATiHnT-tjc1VL#5jAr9DljHj4T(9LCX zGGS+jOdUV;g}tyQ_F<_;B35L;&^J6iFkoqszmDj~yb_@42_exQddD2Q8gcQ0Rf@6( zYk*hT%G;W0-&qi_XH3Pq*>v9)VZ4f-Dw+yZ{1GMQ6+Fp$cXip~N=@uG;EelaH^eM4 zuwJ)Rr^CUMj79k=acE+m5f!8x^31n8taRf*J$HK^vT2i{N*WCZ$O3{wjs#@K9Sg zgQMHOhmpNyThjOi8>3U1DK?u;le}ituaI%?wn?w9oHL-H$RV?L`@H@*cw0k%oC+<7 zA_mTuf%uy{@ktq+H7}Tnb7$@-jhKxSGM-Dj8(r6_y@dr%lUykIC+M%WY3VdE7rG-Z zR#|LYZhZHSBb$w=mbGjC1?zKX+3PA`PGB{yI5zw zLMizaGSCw?d8+?QW0v{)SNKkJm9g-wu6{m4*wP%3Iq*H`_Z}n* zVtKmpl1nEpBQjM*mM@-r8$422L(!_=p)#QzQDcCZND9k;CP=f?5MP;#Pds}l-V>)V zazECy1Fn)T3tL{dxk^s{W!28pkJx+uy0$vGrM75(6hGL zTH75Yx=UGht6>fd<{B4gTP56t8&E>-Df~xLnL;CxcsyVzP{?g*}=MG zg=|(ZG^lPVS&u?W#AFyb?p%9k5LK~fdYDfF9}!ad!L<>5%v6G0#B)KgMdV-xw2WDT zI)eZk8`zi`4LSm!iIl=tJ1H5ByfzvEs%l3JLwi~V1Y%mtv6%fz!`2f{L8-MivJ@2T z5EE>{gmATQd5{mu#dko+ zhF_%J!UHJ>RD_+dWZw=C)K?O_ejYTwNxyJBElsvBOVijf$3fFk{Tnv4)Z z3o$aVq#{&d3**oCH$U|gX=#xo{M5+PN~1w^hVDJNP=TjhwsTQMwh8XzNwh?TH1^EJ zYH__>UtXEo2W$}0iv}wyck>8{%~ictu-MG5S0u{pO$ORqW_xV2u`dI=M0f1IDQ>6Z zV`Wgt1D~EdE)(6Y&}9tF|0j(Rl!4F`D-)Z|(q!CRm)e{(EP<6#?WH)v|C-n&>iezb za(!i*(=+ag>q;1a_M8u#mu*4xB;_0!k4z&IU?+nzsDcsNmM0_(z*@qj#L*K7I*0&T zKX;y+(ahK1VrjrxVi*Mmh?1Mk1$&r8FYH$iU*!)nofbd>mQU^hIKzI*oj9LLoM z>i3c`cB80d4q@3-U1->|2dp3eP@;SFR!ipJSCJ-(_%EmXfuKXc~ro_z#58jvtp zup3>1p~ply9?`Ux2S1f9%N38%d|Ab{zOdBGm0v55(Fu3A3%T1p)NP(|p2|4%72PW0CG+LS~2C#d{j==}UtIumThdX&dqL0p=%qg@W3b4%rSaC*)!u3-%vg}v-!{-+WM%40>%Tz#I7*RLjg^vdtFDP6O zg&g+zvV9~jGB|kMl~*(d{nG`$2^MC2AX(p0-nuk2r`gE0AW0&?*jT?WFq{+) zyd8+8GK;d@H|8-O!GgU6MbyNo!{RlM^VCKi#qRCvdbPY=!}+Ex7{J~=U27YJ5*P(7!11}e4&Ri4uG75Uo$;t< zY^x|W=f^fS9Lxn&>tEqmUDjUucW{sqHh}jt!;WA%!PoZAhm9?!;ur0R2WVTUeMHYn zH)$vIFntlBJ*A~1a`;=qgwR0M;SmEiFPr+Qcl;!o^&k1ohbo(Qhq%#R9VjcZ99S+; z!2r@GFm*wTeWtM(wwxV}Cz#s<62V00e-UM`AU}Ej639hO^4P7~cZ_7df5t}a`hM}w zoI%nn(7Ul;FEP!vEKSAMv@vQM88@#l%r2+DMc3yu(8|Ab*yO0X*?mVSHc&8~Ub*Ts z24}d$Qqqpt!Ek#{g`64%Tn%iT+9TM{pptIKLH*5*t4H+JzQ(ma!e1c}6da>*EDmMH zYOl%PE4e(J?5ov!d2KGQCRbOgD?nL{s8w!T&?n=0$ZQUB4E>1M@CXYFg`?DT05n`R z%A+9-8kF2<6An5(JpIC10WnF&xl`g4i#&WN1IPh)Y7m=%$ImU0dR=U0yG*SBoX$ znnp~%YuVi!g!O42xnwZ<%7oF&ixV2j`}-e19`xmUF$<04^Pi6&3_nj!fPq*Ij6%KY zfF$3{fFGZ7WKRijt4zBsB3?!k5IO5}{!FBYwZFc07)>p)zJ$%wk*fC-i` ztnisY$JZB@)$tL|z`F$kV?ZKcGyANhLb)~q)GuHuK^|Hwt%FT=#cSGum&X{5g68Cm4$AdJe3XD;n)V9>n6H!~fHbz<-EdCBX}cUkG-;3&{(; z53v9(VTXhqN?hiiTd{uj8%6%RFx5>81lesA06OZipNRpS%x7EKU~`9{2sBTT^SLc% zhNL#)v6hU^l?@HB(<6Lr+Gto>vX?LilK?35%a_}RDHm?AwZ{l`UtUzyJ$Tu4mJ?Sm zs;ev$>p#ls7}d!Kp`U+|*GZu(Y&>t8tA%;FdJWO&@4tM~BIZ$4d5R4~?-dAtow*Wd zkh#r1*%E`W_geE_@LIm$5?}C23rGNyEZ0{T#$A9p1@eCq=>*IkSP9SV_4bLGmuo+H zd>1mZH~zS>r3Wrgm2EO*@hH@ST7(Wl$(L z6y*oDx7?F`$2&g$hSW2xx9c07j}tF@DbiGp*J7Si-K+f6iW-lD#7YMYpFtm5=<0Wqh~zc z!=I=x>m7lw-GZh6Sfs6RX4PRT(*zvWh`7cRizJ}V4oCsmzbxRhc4$LBkqv$3X#&T( zJ3-kN`91Gzh-vVG;Ab!_qaa2ku^hw7r=x-h=Cvk*B8yA$R5xdklD>L|Kmn>Q2cg>7?5|d^^NQAQAZ>WMfo=><5~?*JcP@!t##1LyK}q( zSW+YBj`OWVPytOE%rJ+9JLA)%n{x83J=`L>V)iI1^(m%0^zhEP?OfnaW^nR6gr@`B zGvj-pBo#7`Nm+5(cER{ewoNAj>m)WI`eWg5VK1XcM(t&|2aOubJ{wk|$fV$} z71%+L3aC!cc|4+7%EpxS<$(>GZ9;>Wi?e|&!G2%>jVP*5+A@|eE}V8Uaa zh*Vy>)C{6X)){t}1uWb8dF2{`!c+eQ&v4L5&~|jGx89q!<7lv*a+Ok5=T|FWCF(er zhzq(GwFat6r@>+0=snAgKklA?-q?@W7CZ(@CtRl9Q&|3z4O}@aD|r_@m6fgsjcsH2 z@Er89qDr`fU5i++``=TJklu*~rU%vnW>OJLK^OeZb5***$4=b@Z=n&l7QZyC{>GkS z1V)vfOC&Cr79ANb>D+~H3d#1Y_;0sNKlMlG6qos+MQwn32mONb*2*o|<)7cUbr&oC z8G!~)UI@sUP0IR3T`H%hGSzY7CdgHz_mRgUqw2kKDsIJg;zVWtd?oPre{v%v&Pw~{ z^Kr+(4V=x$tW9Qg&h~$@c^n_lB$jQ7(@ZYwc=8x1me|*oADH`MY8ke$-fVQjKwoat zofcCNt&TC`hr%3+PU^SIv&_Q=+412xGIJ@(n^R+o$?){eQN371f83xhCOrygz^&fSRe@%z%F7&-4LOctrctpd_L=U6Zjhu!&{xE zOM|c3Y`X1^sg-c7CYN=};iz(REz9=oEU4y*|cGrII!b9vcaf__5dRIiS61A*@W zf#P77s6KknyWI@t{@xBln7 z@s&krAwCtW=nPqB6i5SH`P4Dh?=&p!nnnsplH?Tden3J0j5PI;A4`4Ha@O|0U@47O2v!ObnBSNr zi?sO+@=kltkGClZ(ysoQVYeiBNj!N7*AGUeY+YTZ8-l6}A8G8taG}V(m;fb-y-*!3 z^u?ul0e@a-5=#a+B-mc6&165dVxw0%TqOKvt$UF&pZ?7h)^FeS2m_y`^-aQ!4&sbw zoeeuRQcBQVOn|DMc%JmQ_vPYpkU7I7ptd4!jxt115ZrJZIL8WkB(&1Tg47GKUm)?C ziv#{cwj9?tnT1U>;jgtL|K@{z3*s5SPe$$!xoIt~+rf1_4#07g@s&nbtE;PqJ3?9- z?Vru+XRNl#u(NMQJ)_<}WFV57T}g*L+!8MbX|RurniylW8F>ssZNjiVfn=R9#A-yx zSxYiF%A7UInls7;2|w?ta-=zXh&g0UIYd4IOU=a zK+6rOOfA4r+1`4$m_pf*) z^Xo92m_=pJn!T!1#D<7^879PX(iAGrWq0T-T$4+@d~Kngm`uRbu5Gxil&7)WC=_ATNtav|U&7kmbF4LdS6liY)8Jp(qd>Sb_F9Cux4pc*o7+0`L$5O#C1 zxJ0BX^s)eNmsu>8A#y7{-<2tnfTD+yz);`bP&S4QFb^F_f3j zyy9vxC~CJUr9lJ5tLk(k%W26LR7_yIAa}4Cn8dJ}c#C9fUTd&Nt(ZqC>Ot_5n=jg( z%SFVU^?E(TjW80pSmPzG0q`Y_rw@VZf5WkoP>$81{{`(?B+Ej#y4T3CQZ){VVM60?e~G5YImlFt3(_ zJLO|`(Lhf;x~CaC9w&4`Euy~1ytrY>_WId^`i{s?TWl*^>T8WEiPuQ}^O?j>14c)c`$%2;Q0Y zoC-loBY3q`w*R)N_AzAv;#3&>t(V6^FJYkiS+D+rD+4Q(hfG<~ld50M1{ETwKEe&n z>12;nl9B{Y$q4B20&E1K9i@9$M?YDw2`Uak+gS{P89NS)?U`L`NZ_-JA|Cv#bYE(ak$T<-IkZtfEngG*4 zv}&%vuw>h|BBmn9r5-l@P(;&~9>uEH1$wjPuu``DKxc#DMmx}0dC+rx?-{ner|I@2hd@0_Ktrnk{R8*-mG!mezo#oT zQ0xI~Q$gJM#2C))&~o@|78!X^SE-ND>`HM|QHTn`#vJasC!2O)`C<1>wXa~P!7u|w z6{@Wf&ESY;zOj>innBA$&kh3ak}OM^ldJ4yA2%!B(nj*uP{=`ID8P5$iwOGZKV?i$4^qPj|DK=v}3 z!r_G;xl;UXC}!>Om|ugOyjZL+E5--BuHt<)!}~_C2Mep|TEoQ)gbd$zc{-w{OEo!V zdy)yVC$NPn=^;P)<3MY*4cKl4Zm^vmnHpM2!NmY#7S~yDHfGcv_=}w| zZ_DDoecLi*JDN_KV}ep@pQzzWSddS-0JZAm0K$6eQyS$BX!I11-m3ypJPr$tT+$;0 z7HVrZF^`)O=ZD@7jU1`mxpAw|QkN3!_>C z2zym%g^#tjn2TDRz>TqAOx>IJfyBRH1ZGQ}cs!7tmxowO8S{w47IO^0sA8H5Zsb&V zZ zSu@>Kh<|T+ySaXe&q7`{dQO`j(1GH$6zCveDVlYJYxf0>4EzIV8({#bfPsgNxMlMRS_IJ&I9K2XG4%jW&2Q>S!&CB-gz&iBj`wu^DbFt7|g3r3T>iEa( zwd%q?elw_UUs9Rth9&q2lOofu`z)DdVh2Q@G3p@<;YpyLMIri0fx6(Ymi7deJ)HMT z(K`_&CfK$5o*YPc1FF}Hf$rK=Zv-X!UGlJIY?&L1g>^Q@=2C0zT2gqjswg3)=y=LpAyP51WLE8a+C znmv}yNl2*L0t<7uxVX4DW&DFZfw_QSTgM3fGFm7T!s-4-0+KYwG;;kw|5dQKIP)oz zBkzq_?qXJ%UN`pLz*22S@U$eBZY8xa(p<_f?-!=ZE0iC*R4Z(h!SaN4J6mC5IuoGM zvfk>~RXm{fA~a`#jgmZ~|ISSsi;xt7dx-*607uGVFyTR*Muw_!LOtl!xlUMeOkb!K zf{0APiclf13Lvagd#WR#fJR_V;{!b6z3g(9B9IPjZ0n#eyZh*qqI8c7nhl#7=i)$Z1Cly(=6L3s2Sd9QIeC#-- z{r$hsAP)D`auceGBF2cy2HPd<)$4|l_LHJ@P}jwI+-#JzS8^ZpGsm4O};n{PnV0`4H}Qj-BjY`aB* zI49@%zB#H`fy_=eA?Y~*1){}w`zjPN(i0OefaNIY;Q)$_AjR3h3^qeV{h^6Hi}huQ zton-)UNEDqpS7Qwio@!Iv>BgsVIFzt9}Y9);kja_XzO~^{`CFkL)SFM{zpL5De*}(bxmU8W;C3k^j=tv zz4>|bzkg-^HQf@C3*C)U*IJlY$a>NP1DQ;Gse`A54V4Ostx_XU%@xE-2Iq! z!(TB6h*pr_*sYC%M6AlsRuaGoPo$uR>`Yby(xYOVWrrPTeVJ#piiZXO%CMs!ELk{E z8V8onNex5DVvuL1X<5tVKyp%dYT1=9>D*TCkvaTxSHmO;6~yO-UeORj?qKUWZ_m;# za8(NLfC}1^@c`04tp9xwRYF)-wyjH~qyVTpVhIU?u_x|Q*Sxk&9X*Rh#DTE;-5%<} zIH%;Sdd#+9rx8%54_LC?C2DgK*u#X~1AMu3%r@vtZ^Y6$Gr)8%&yG0vkTqf=w1&i7 z>RC=mBhU_eE}$Ua@?47w4nhLR%lPo+=Ke>gqjT{nm2p%;&!5L-<2(}C02Y`uP}q*n zz-|Zj63}b|a;T@0qVl1Ea6N!Y-#nZMLy)Hk5w8c>Cov}7T=qsFd+}~PdG%V`l3d8{ zTE+Q=5zZ($0nF+BLeRz0fl36}*J4>deVMuHiq869|9EkmH8A zdWL3)kL*xZY2AD=r1py?E1)+o2Y)rKsSRCRUoXsw0oM!Z_Me!+#5pDgsMvxuq0h~t zZ&cxT!(z3%WyY?wQ<0ps_kIpsm+0~`87Ct@rJFJ#60{MLBm|?F7AB&M+|h6Haay?1s~m;t@N7JR85w%;YYk zmzH9|?w}7`v9PmyWKU6x>EIilpW{k37Cm#{m_%2O?mWc4ZL==bt`mPM8{rZ z>=|Q(i{Yv97g$>58%(JimTsQ8F3Dqh$hqs**+)#zu$nQ#JUfGRZVKzn^>t61Z0k)^ zcVC=;fr~TWaB+4OF3#-4;_M7pXWrrJ%pzUQc*5C*SS-)H1q?X%n8kY5bL1EwAyfHR(#1{rVO!F+0`uqEv@86zgJz=fo*px6zbWe%)<@*Zx0;GA8 zwa5i5?TS+7%zfP%WevZ;nH?&F4P)@)Al}nr1Kf)CN+uGpWWmJ5tf%a}KxstU2BQHI zxx*<=QGxMM`||>{@wD@%|Egj7Pad4}LT7PKG%jYy#>II)WS)5wbKX-Xtp+^Z0SB|M z$0WqTBQw5W`US1A*&~u*rfqjMA@M%ZzJRXTa=4td(&m{n&C{X#OZqR! zlk9N_Hz&kP3D>I=+(PFS*zz7-*91tln`%=>F!tsJV%87B-v2@Er~cn&=Zdz+KvSK%d_@5 zC(Mz#0V==7-X(1#r@~yvlDW{K9>4k0Eviz#pSf(!-(ikTC#46g2WjEZbaAyPk2@K9nSj4dtxC1*=nj_`Tjb-*$8PGZ^k?2E>NYR@EfA217 zf+)(^2{XZF&3!3|nu+okwPFfm}%JqS9AJ`!bNL#`C9peW@{*DtfPi z4(J@V!5aVLMnj3|$WP4&&3)ul3A({M;DK;1;1*QS`h_F^<^k_}pk%`m&Bg4Y)Vf&r zQ|qv_0+hX?QYD@qZtm~VK}ny!-+$3VhW#Hsoqhz0z#l*#Q<{a2%3pa?XRO{BvmP1K zny;bCoEg^m#e!d&FY)E!5q<_%(NG!b>1KQvU5&wi$9bw*&51gU;dJuNpVr3TZ8)!ulZk3Z&wAZP6_11TpbH?_6POqgeh;*6iCcrW) zew~Cdyy+2py-Kv+S`^DdF;zVqa%^Hv`3B@Q5L!T4svk)lOF*r&vi_|zg6Ir(>A;T^ zQJ;GGR`mWK{<19Xq_x9%J9;^6bJyMQTo1B|=-B*DLRuQEY5aAfd}95?6* zi4;^5SlcAb#d!zY*sIlyw@k8Ep8w9HKqugW9%Tj*=^lufM~on{L$BT%G}8z)&0=o1 zzEd)6%+mwiGE&1`;1o2Ee@$cp?b+|0u;>vPxVv7>Xh3?2U8i}wu1fcoNK z`ptjqeX9+)dwSOH!kBEgB)un&0pH=Pef;mfXz(llf2Y@h(+Y;Tgap$C(_FMtvirZ4 ziPhb%b#__qP!_0C02IJ7?})m|Bt3LypLO5>M134nhpNQ?WH? z@_i>G!;Uq1b-kFLdHQB8aSqv7Cx!EAsA%CmQJ<^iQl)tRQRe%6I^~r$Z~_&~^G}k1 zc6DZ*&usBxdFJ|R`ugQG5lnky91LxKXQB8&q8qRm;cw-ENski8Yk3OqNeyNYl%bAr zVTTJE76NolbQJ7f@?+hZpn=-2niFU-*?^Grzq3FJ284D-p;76LLv6H_9@}a)Jv2<^ z`Zq_N%Cyycpr=73SR=<`&ReivQoRgqI##suq(G}n^YV_vPx_XNe zjdY0C2vHpp@4~Qn{;ZEbs*ZI$W7xT`=EdSL;J=Z9(p%lBu43X%Ky==#e4k;wC=c%d{a>R zB1?+u8J>ZnLM#9(69^h04Y1D$o@8SpZUTBT6+$_SaJ#F>aK&XGPg?$z^dQhlO$92}= zqZ^n5EcQuA>JUyGWz7i`Xb)&djr%+EOL*Mj%MNyQ2v1eQjZwgf;%%WIOJFeuYMzFw z@LV?{S;~&MnsKNB+u9dpJD92RDOXS@rx|vWs6Plk)OKP76dSurV;G=X0v_@m=I2Ie z)-y183KcoxhYXG01oLGom>-1&A>iL*pr|-2JZ@lek33{>+#_o2xYOv9t8Gv_BOwLO zi7D0~FV)`vA~QSz&0 zApm>kZ&Jh*QKtl=f5?Bs+@cw8W_I)3laLgqtW^2r!#VjIJ2j=UyI+0TI+d-L>dMu1 zguSRo@~o_jHONF#AjaT;YKa0Z3M1Ks0bQc9ycU0SqlFe?Ua5n9ld-4geSR#fW(Izh zXTtk*_jB;Fx_bA$!!j_zT4EFDDQ3;4#?4D@G$vIL2KV=ON^!V)?6gYx=73b4DMyEgPI- zQ#BpKfTpEiEEZrr_fQ>(hbT5AVX`4k2v$Rq_91>4c4!#AinoHODJa<1oLDPF5ksQ- ze)kht;$BE5&~Dr*Wx!bDPVFZU;U7SSfwcpj19U-VUY?gSQ>y<;dnCdo;dh=f#P%nk zL`Xhl%iv6RP0gt-=x>;Lc87`wJ@v&!@CD`;Up{R__M0LT{EZi}*85rU*;r%LLGS0( zL20Xpj&_76{DYY6LkLwju_uw>EX`Y_CT3;WpbXfu^Db6BX`c(q6}X4&7(E1;0*nn? zN{{Zis@U&3)1!1_gE&gFt_1|5(c_{3i5HDdDV==U&G#?g?w&FH)mtsBWG2{lqTRF? z7f6QBOx=?XuL$MoUVh&()PdcCJ_uV6I0OxTz20Z|5;7);1;7f=MCdY$o4KZQ;&osUrjbY%R@K{Tg-O1GWc-% zPl>as5f;S!06IytyF^1HP3!6atc^FV(q^t2IFB#6HF^ypXB?306F0B4@0`bno(jfx za36>edd$;^M-ww#v_(Ig1J`xgtawA=^%5s-Vr=y6E)dcL}m32ZE)eGPDm`X!*-y?%et`0@{iC zjT;jd2X@La^`Tct9A|dIgwP6>M$DmtZ^QgW9c3X9*B4GSykLl2(;FCtWlF6f5h-?g zI9~eF=F*I(TLwe~WXy&SCh&2JxfBxLb7BaOcQk8vj|66d=*8w`0Cbw5GIai&Hf!O& zVw*qpFj(maus$EVkKUj-;iuhH^=+WtYy+Ptu=!6nUw#_s#X|g39VI%$B5+K4PY zYu_+WetkWFuk|3EtS$u|63gR*h9}ETatGw2mItX~io(c)MnUVSYxaa94CVkOt_X@= z`6j$F)&t3kP5XfypURCJ02Sd0jlt;V4Y2YX2|tdVl&^HF7yorLCuLi#Qts7HW7LU( zJ?h9hyTnfj;~_DUtU8_edD13T>_YpLa&!wmFOsCrp&PqRHSrv~3Ofet#z(KaB9qNB znhc|j{5QogDhZ1SxuC&qWX+zc!J854LfsV$>hJ$*@Dpuz!R zg&or3m}GefMu39Ab7K7$5^d$U(1<6CT+80hWice0aXfz^M%Cs)w&Ykhv|_0W%N0W0 zhTa7QLE)XwU8&$oEt4LlDT#l@^Vb-Y0e1u%&FH{Y{En0$qruJJ(uPa3HLh+P*=Zor z8P)QdwJrfMBpjavA_t^78tU!qnBY4(xg-Pyn$urJ30qMI4{ucMzklXIBbLlWw~JeF<#nC_$lmDW4_DRJ#XO@cp~- z413+eRyZw^%)*7`NEx;kuhpd5Wmz?AZ8>7D77OW!>HKUuEBqCd@B~5U4F)f>r3yB? zy-yk0f&$#V-*VOivtFoK2}A3SVuDVDJ3~@zTSsEq72SnJyfTd_m#b-SbC!|Rj-m)Q z6jMy7iX=CUETzOYn%!a+JZJ_vQ1X^@Pqj%AF}iDdCY5B9JBI{8QxAGiBw`o3V9qGz zIyGDMzymyK#MfpcJg4~@x1DTFcD*nq0=H$hw`cGamAkVe7zIMN6Dk6aN)f1k)SoIO zV>&+mL~>ig1H$2<{6#U1)10T-^v42pXV=&7G0-3(hhFQ1SJlFu zr>3raP;lKO7_%NXR4g}ydu}EY`_?00qUEPoE$0{b_)!Ph+=n1)pU*8Rg*;&yjV?7 zjSo2}AaJ|H2=p;}XFQeB;o;!bT}quC#C1rb#bRYpc)+$2FOp2Kgk${T64V)it!VIE z<%uB=k*r~^oT#^|#p^SENBLs#@T(3gGGB1;)7VSN(B zD@d^y1Bv8x6r;7b?uB_Z9I-4LZQVpXd_urg;PImhe#*gk&xp|?OFP2?vB7={4!T$n z6(}O7M)esfLY|5P+hpcaiv=dFBMcyh+QJeStno8!boJvCOP>5Fv_dmGt_Ob$h$ zSj`cj-!|loOLHR2P3p2yl>Bn&{hQ-R1b8yk0aSUquhj3Db$Q$b6i0!jvT#sfa- zef(fvpBNUb0&uJ03xpm=u6WxnxK7Pp^}1VMhS1hp3LlIsl)erZTKZacKYDK~mghLA|-Qr9M-CkX8wlKqF+&M^>! z?n+;K_-Z0VjBF*nEMMp&0VU&Q>l=UESRW8%wII5SPO`3-hi@@-1T@NW&tvCXjtyy8 zu%^u+cOlIY3mLc+npoQqRM3Fy%Xe4K3|`nQsyzQN5JTOVOc&!2ee{7xx7-`8bMfGa zh756#4xn1bs{@@e6lgQW)0AiDQ44`_ZnhlkHa<{<9A;bc@Kk0Jz$gBRy8(`BPc--*5zvoGze@0Li{kD;mhj89lzae~r`NE5} zX`K_6BX42NUxe8sSN)OQ40kwPA<6b*GhEDm*7fX>m;I5L*i56#rSXYACiEFAdFqwh z5|M#8J^AufN{Mt+aGsEXqT^UL-Raoa*sad>*=n)UzJuwH*2F?#cLccdOr(jU?vWc_r_JFQf6gkG}Y>z6?K{8WUX zeJ1hK)93TvmO1ZoIs1Dr=&S+nL_&wlc1_Q<6iNe~>ug%`zEIq2#`Ums6X zD!~h8k-_XIT5@D22=!z(x1jKcX}!h^0!t~KAaj`OdN#M1Tr{iy33IscayC~}3kY^f z0z!+t(*8)%sTaObI09XM2X?7PdYY_?H`}23@{Dx*z_{1I^S9l0T+3?@1bkm31{DE> z=AN=}Ah`z_7}<4S36T?BJKA)9H@A5l6ZwbENQ8~yn4>4Lg9XXGdUv!Mup@o#-W@PM zh!2zWTD^k7g7Jxr4>Y0x$?uZUXN|#=_!N=ty$JX=h)I112HV)s$Spyw!Jcsrr0D6H zz^u=!Tg~eC4{VRk8YVFj=E%B>*%It>wr+7XTYg^8SAt5Bb2=+kU*VxR-}n1R`+2Q> z&bL05%_fj5Xg-m93EnNPR#cV1Wr^WvS%En^f%bp)FrFL zDeD=N&mZ*zMI+g)-am^m0muMjZ@aoOP4vzO1lu>n$@R*T8NGd>r$q3loHi0bN=2E< ziULga&qM6PSqya72C2ct0o3l!!!3OJATLvmkx!QzKUOixq0|u=T$Wuh44hSgyyiWf zRUW;CI0a3^!rJ+x7V*@Z49qxRP0|s3Ak}}qpD*uEw?tI%kY(^xwQ8n$iIqe?5kxhb ztkfLU5e2jC8oiICtDm@N&&kalv8K&;O9vFKfWN?osxF>b7M{rnAE#S`is!XZp5Lhx zg9pTVx9B^!vf8mF{WF+VNIbRyQjpH#j2!J>TbqDj!fx9znStq+dWuf22y-&J5(rb& z{d{)`_W4Eu-lK_9cZX@*%;WedXJ~j`(!BPz*co69i^3t z4@5s*<)-_a;ih#fG%2toDl_h5s>NB5`!P1VkM**4|2xS<9x(mZALwiy<}V#$?i>Lc zvb9!#T`P4vbjS-D_}H(D8R`LcBW>E|vE6EyC4r*$i#}q4O8vgcU@EXD9^nvRVrIFB zdsBP(glpmhgPr}9HP+6iWRD5&Vsx#ikFNaOlnVla(}R}_1A01N!ezQd0vZ}odQIyg zvi}X}K+NOe2|53lzEzqrwkX=LW7G9252W1Gs147lNL#kf1G<)!hp0p(r>Oz5gX&e^ zHUUaFO9>FAIgM`AsXcz_|Dq?oejI6v|AGbBR3!YM%aT(UCIux3m^k|-JIeuac<95& z%B%+xg4!68Xm~Yb0E1%Y1r}yYOF_q;SwzN6+v~LB7(oJ>@OYEow_Q7@nz|~|aLQFR zX<`fd3sY4u9FSJPCH5RUvp$e5a}{8v{-kWz4{Wo^h0Mzu9`^z9*EAtZCa*5XXiWzV z4!eiMJp9$t#ql9RmjR7#pVBme2}rnIED-jR#Q$S|cEaTq5IP9IB*f%XmJX%lUO4tr zezL|zj^10V>tB6(zWHvy|M83!e$PK|ZkIm|1uv*lG5kD)|GxOSQ5DZi7uX3;r~24| z2UJev>IqMhbG&aD&k<&xs{Vo4UQk8Fv@a3yZeG~SX{INzNjw=cDpW<7wYb99%&^ys zyJ`ZJGgT~y4HzGuHH$`MLI&ysHsU}G1(4OpU+!EN1xyJuegGTk{jFsgm>Mb*Mytnu zeAfTSc}nc309`<$zw(Ox1U6Wyz}%40fudf85l| z;}-};G1P@9&Lc1ZVarbnq?dAR9~8s?Uf7si`iI47&PMt8PYM$2(X{#idjWcfvv=6p z>xqTvmekGF+5p}K?CPYvp0}Zzb;H>E8MGmX!=4w03#w8WMj9Sokrg2(xw|}aWQG_1 zXydQcmgR9cd86oPAoFc+RmpG72|ezDQGo|&WX8_ZWmm6xLxEU98$l*G>jv4^VC=JG za*h6xC5h@!E)mR-?A2b!;qt<+Ls!@t$^NVTovthw9-F@zn5~^1r>HE8JV%#Vbl6Zw zW_emj}=gmgcM>WiG~tSe30cIszed%P}ct%L=TK@-c6! ziwaIM1XuW@_@gjn=$*kDgW?K8YKOe%uP@K*^Y6OWu-zNzb6Ii!0A_HKJLtcN%eHB$ z3V$}oAZv9o+S?k@VrwG_L~X8SY9uT`@AY#c#YfM?8`dfwIRd!A0i-Dn3(g%jSmA`c z+Md&h^{QE>zbM3c!7yU?tTBqX=giyWpu=Mm-1!bLME3c58UyM%fjitpD9#8#@EEZ#odk4>=a@z++ zDD%0&`UjbN=dnxV0;n;@#7TLW%XX}Jf-PymszneAU>%1jGcUBX$YXA;hu=+KgTWN! zp|vue9wh$3lSG)f1N#lO`#}NxJk`|{@9Q{-2BudbZ9LB_|DIA=-~pl)e%dYk7?#u+ zMfqb{t?OsMNNvG_fFjqIvU+i>O=$ONps)6mkfP#sIdc*7U_#F*HY`QZ-aOU8)(An9 z>u0DVkq_3)=vd-^S{Zz?4tWf1u8w20kFXe_ZVnB)yZ^EtN8SAi>(-0eVWtLXG1$m2 zbPw0p_4Wr6%CrT@F`#Y1KO@Qy`2Sw-WE)iQi1ggGZfGqoyKZ1mEYN2GA9BEI*{=GJ zJ*<6muydU%hUj|F(4*{db|4PZz${pZar)Y%=SBc2of+X#%|*=<%y?z4qHCnI56;~S z^c@kGU@lT&)G1<^xD|#(#pUfh4QCCqWo)s-12Cf8`DxW*H6zI@J4Rkcn(IksGnZ!Z zw_X!nklzm4?x16&2xt@dEEK^QYlN*&bI-?MT0xR}6ke-9aJPB7UR;m9?0JFLKz}K* z3tsnuI@w}>#HvF1ex3UCBwEGs8PW_a3|l@XG;qLo&_Xr@R}+!RXQP(@uK0Xha_l^z!qzhrp$p; zn$bPkN|+8=jR6`MP-Hk>sfaZZ<5vSZaVyCkj8u)ilewV%-l#E?xj@Yi?UUsO+xO8Z z$;?ToM@fEdU&Mz;`{MmSYkN8K5tel7FoN+H(+FHCO>8*KQjKv{iAm#Fo7T8rRpq0? z1U{EO2$m28OJ0q>yr4T0Vn&+rB%uOMg%AzTIb!4-b*Wt_23R$YYkSgLwJblvEtz>> ztj@FKTD4~W1T@TaP+_pkX3^Wz5Hw>V^R}!DeM2LUN6MY0M+_kmga|1k3`9=VTXyk;i|Fr*%iZrC_YN!^xA6WtmI#6;-i07e!_ zm}bE{cDIqP)ouu6=#~n^X7rv{=0^4U+lBNf5{^-CAj^J3l7UxhybC?(!1=&P(G^5w zE1)9~332h}8Q%U5tJyOwt+#%~*bLU2XPEyL7pu2^#n=qin`fB+747Kr?~&Bl6xQ3P zSansxbq|mhAumqm0Vd14EGs~g#ys@IKy2jFF^7M}s0j&JXkMGf3C3E*UPw^>clI|~ z>o*_P(J8FAPcffFFcaa8A2K?H_4X-VLF-sL_f}#box}PM=2*=WPQNJ-erF<(@iYXx z*Xo1E|3^<)XWq8VB)neGFSYZl$JT`{TG-1701|zwQoYf zr~GFxXuaVD-*WG2#=UP@)K^LK-&we~e88N0$5nwz5>^e~ZEQ*O`_Hi6aPO!2KKowl4foD? z=PBkACUAi;Fm1%I@C{R0Z@72HC%okp&la4oxpxk!Oo)eXbk7i|XFSXI_h+}>a`TM3 zo2w??vJpu2KDttTMWV(ky zqZs7KT%WlCwv@y^&@M^CM)>0!!5D+aQW}HJo}Av0h+jl^oe}?6lr`oE2zLEumiC#F z?8QLz%c{?~Og$Q#op;e75j2t@#+uM#vfqJ4yut9RqI4*{+Im`(u?wW?3ci=D0I0!{3 z3PgweYhY=XYH0>@6tIY*O3rN;hDBUYc$N$8CjBKr)jFwS#M{$2%TtPJE4`96m-B!D z6~tJ2rrkb12*XXHcRqWE@B2<-RKGK=cY?jpcjk4M5P3@CE$m|+CZI>A#1~iwior4L ze6g_9e|u5!(?G<60}>oM28a^ZElCFA+QWJQF>et6THxOzY#zd60wkq9r0)?zh{)KA zL1R1McGZP|r=81ijmFK(qiH42MT#lmofN8uF&@V%Ue-#e>gL})+;@wvZo?c?i&Sd) z?fsv3Wo68ix=yGF-LdjOV2;&aVXatP(_mBEtB4S}UBDdENEyL5EURi$SKF}|Q+ADh zTD_jFRU;x~wI5|2!26KAPyJcH*XNs z=NB2jZN^$*rKC)XYyzEgEcMx9sxN$Sek$TXy4Ax-^Ix_v#=k{$`~36%bRt!Ba42mE zt4xV!Y}nBT&fsP?{DA>mEDusVsW+l?y%{{;QfoETvla_X3%dk9?3CnU6DznzdUzs9 z9xxZ9;Q5{yd4gD#0WHe@TPinjyrKyvJlLIrHO06P%)8CF)bDQOwSP_s2pm5GjvV*% zJikP6{7gljdFtgQPFVZY%Lddy2_f}zk0P0RECVTnC-fT$gSN0z3HhZosS}ep)?n^RJ2yw&Sm zZ-E(lk^VDxipK1!ea4C=_NpsBW9k4)ySlv4!aQOz4;|n*#%CS@1?FKca0M|=g?Sak z$t{6R;5ulA^@S0Q%ib@0c?ejyEn}{bsa&51DL$|D zpZ8CypLhFPZCMe8T@mCd!TZ!14Y=-Ayt^kkBbIJRd&zu-&JiNxoi=**v)13TJ_X#)tr1T`_roKP%Nn z;hmp~h_Dg}fyK8nr5Zjv@tKHJX95=?W3hDpG>9Q~ESxCWnsj7L)tyTwt5PvK4!=ER z9v-r>AtIqzpTf$Xa%0002W6R zAnCznne{21HJZ3*4(|l+srewf^JY7>{x7Aj4<=Q{P%b_fK%0g_ZO1Y@J1ac)i`Zdg zHxQQVUKX#suPSy&{F%G&pY-Ru+t*G}HE8YXg^}B<%McWn)yMu+1-AOadNO{L`En}qg0{D_=j8d zhj%p*plpyZQW2?YtF;dVtGm9j$oR(pygwH@?<8Z5zQf|3wXR>IZ{kKx_DF@jS_B%F zHd4aD1QWpT;Ek)T)-sTu0SF+61V&xys2W>NUF%v(n4T$fG|`@nDIY}zpRra*NDkGWk1||*5a;hDU(v_p+#X?+9#53?vAW%vA1oA`^&}UcnW2h z>Ly)J97M1w7>EFwxWRsfs*t2pUy&99`^yS{cgVd2&KHp~$ziEC2^?G>3<1A{@&s$o zC7NH^IQvwIC<(a4`WqjmzN#A5X0}qP0Z!Yf^XZ<7stn`YkhI3F7|fm(J_#sDTcAbR zZ39Rk2L%q^jm#)sJBv=ZSeuKv&j*_S6R4XCAP^A#C3%4L^n&ToNt#oKU~__4{90U@ zpyYnJxxc%89#3J1u?c8Ip7xz(c+NBVL77jOEt`!9YI~|N^kabp`ug{LK&c3hJJTJf_VFk8%M9x#mutE;J(r;7{+P|=^<}s<#=COwr zu6?6_XFD-n&C<$DZx4{k@e|h@DfF#TPYKw8p6Math;bl$Yfs%A3!puAPn9HgLBnK*i@w=vZL+tIdXc@^ZC6`%sReB>#CHQD z&dy~Cvn)$&`VmrcKvU1yaX-ddDuTZ1y6WIW;F6;CQs=9T@>|$rCb20pUsfW{RISY} zkBwrUC6vmZ%v=atU=Kgh(+lb=2(_Hq*hEv<4i%a9FZG^%`e*C`cQ$^)+7TMsU@C91 za-ee+KG)tDDKX4@v@;OuboIpmz7vGVNXW7{C0YCM9WKw|_G}2j1LUS#=r4!k$(vBd zMVe^2_?qXX#}!Bq;`%8K2q;NLiQ{6IfEW_Ax2IRj`q}=^remT)7mo>|(@yvAT{@$Q z5}m*ui>uD#psp;bzSiEq|NQM|cOS3`tB{>V2@(;}Fhynk!f9q8cQKRR@ zMU9Xm*iZ0VnGmN3yde{#Gl}(IOtSi|C0gTd{Z4|#>(}A@B%|wac9Z{uhpz^Y&*g6= zbG&|W&QD_f7nA&Eg2~+Pc{`=ec)Haw8>T!gIKUouu>2RV@|(FYz2$uP^5wm>l|aNf z%pDYO|HYH6|74cmOqY56p_nm?^`Ff0yU8@YPdcv{H(S^J#wl9PJ4G{I*7|RzS)K0% zi`soh3WwO63wtaC+BaHM-7HTKZS4a*>_+`cL1_^F2_O_Sq^+=*>+>)Qy0f$f?oUz0 zgDI@l#6@%R&Z&#$)zqEKsXMQyE?!Jrocxl>i3+Is3M zrk*!-PThH-edAlO{f(#FpI;u||M>UEbjuncdLD9zWmysPV>j;2 zvm$VF@4~t|D|B@~6{CY#rl1AS&l0AhmnFso6JdVrgLKQr?c0A5YYc1%)p~s(CY_@g zMOzZ_Gnn?tXPc*pm5m?UFQSQjhnZ~FxNHJ56i z@&k{%=FcBFh=4BE07cU-*b;AxJ$ZvPYIqzT{@3<9wy*w>Ib%-<5;@wQ9R{FHEFxz& zYvpy>gzP-~44Yfs9aZmj`+e&HKjOx_KR#Tj{kP1pjFM-d{v z$J_s-?aTVx)V03v`7RXWA;V>+rbCiuCvN-fbHh)73<`q?0^9i0ziUZ=F_WF{zUSqWs1ry@{EUj{ui_`Xt+FBx`Yd>VU5fxS$ z9b?%D6`w~Xz8a0wBA?G-?=l6sVUb+gxnOtqJ6qB_#Z2BiUm^o+DWi%G!`LVW(RXjFpz2xF*S## zl{ZR9pt7SdWW7}syPf@MLC4;aeRxPN{f~7>p@aWYmJ%NSd-IFfnyc)u4&}pRfMxmX z^YI_H$bVa0=-|&L)U?gNQsVY6EJ$xJC+@IT7z3ryY_&qN>Qh)M5(0hp%|uIstde4AJpVaB@j+(xbDa9fm3|YIiA*cPus{nggeT-&~HDG{Jz| zaDlZ$=|G;f8)FP?gPABOuYHSzB(x*@ar^t}n{gL06m4P-@|95* zW3dol)}1}JRS}Lg(i2)ZdX=Y87BKE0LE>=$KAZBum$h8a7Sqc*G+>%htjClJwe3Tc zKN_A`{1yzeI(6rEuUKbgRhTxD*YTisN;HKbMm@o5eTSnK-u{qt_vz;Dnp`7+SfN)C z+JE9Uh!pEGChe0TpB4%$^b?v}toigmK0o`9&(DuN4{{BPn}0C!!6#>b{N&NmCMk13 zf`H|>NF*!uQ7fh%7U`pZ@ChI5ZuWP(JNmJ*BV1kVwZilMgReZXpV?pPXa2D*3yR5q zJTyH$%>Hu^Cm)td(-@|VgODcmc$vV8E~Yx zzW24q^dITzpKSJzcKC-h^-s?5$vw^fT2FKB=3BS62TTl2+sR1pInO{v!J08a+lZN_ zJPgsNBQqmFmc#;5%vesW*>y5l<7|px|Mvv;(j#VTb%x>LEs!dwrGQn2+;lCNG7m6U zUeXi#Gc`w0JEvJ3CPw9>veYkotB!ULuX}-yMqACYlvoqkDIyo`d&(SN-5jA}7b8?G zC1K)61yGRwGVLn<_@G?-apD}fblw2RKNLxWDBcjZ%6){U#o9k2u<%DDEw|TKFG~!& zqP3+@kCqGVa~V^O-s(IoGsX2dQ~@e7G2;a4e>ko_r2UU;-k6RBnk)lxe(%i$f|K!g zf-cB!(7jR3=RQDijqyM-L+~(C8B0gjHMAPBS3~V(5N1#N{)7^zonmMamqf73(x79; zZ`geGOzd`{_JS7MkkS19*S(>VOk)cAFP=e6j7V+JjxgTMf$87RYd1VSc1eupUmdH* zrZkVRN?79S5v&%qJ89!<7RzJ}fjJBWk@i`LwVKv4Gc&Mrv}VT#C%(vhMsyQ(Dp|#@ zbLZ3C9=J1b{akg`b`s6vRp#e$HcNY+nVW;}pUT%9v6)X>M)PhzXP+)x9SubQEE*92 zUt>^_W9E#7EFLU&3Oa95TDoJjPQ*N>s%9?iIa;EoAGPHCn${TSBqXuEAz3DXJZS+U zKEPXDkN{+S^!}j0-p-v9s&~Ksu6MgyoIHy3lHCvAoXzS4lPY<{I+AHJ+?jb^5uuOC zts}!bJGiM#9rNe`ar;u-Z;VygJ4%C&M36^ zm|`g>y2K^Fi})SJmv)*eLtKB`f$_l*{<4TU)jq>nOz1aGc9f;uC=vQ~mAO1XOkL{2 z8FxpB>Szl|uEzT~c7J-%0D*QeZ75fX7nliO9zo1V8W04!hj5i@aM)=Nw)@SBDzziS>ZQYxW+?!c) znAYcqpUbTp=m+_U@(|=tS!x2y z@I}oS7f?{-Z3V^=TL1Teffo(e2>Q1{Vzr4p#Ii~!#t-ceGA0ay>I6&T8!udio0Mbf zzg3|`_1;u=lNXADRn`aEFnT0P?roFI@j>V4I~p6TMs!?IxyoVbX()^vkYZgdVzUI@ z;D3}hGqXw?NQqBl?I^X@m{{-Tn3q5WPB&eVcpplXa;$0!6sWg}TKu}r(ud!~)5E=S zvz+MN$P~mCV=m<$N{k0ANk$AbB#Bnk2#{w3ckrBbbg^dVTLg&eq)WTXC4+e7)7Q}KFzNOZh;8!IB;wF>HJ!YIq?IT*$=}lLvM*QX|^ycl1e7>^U365zymF_tzL-ZgU*>@kdZnh zRKy|EC1w(|_VQFpP+BG^yPOP{Eb5iS4?nG=c^u8jnoi7#PUo;e)_f-nCQ<@~0r`$Y zQ#ru{YWK|6B#e)jQxO@B8mg<5;AK6@>{N>cu#Xg!yA?$oJG6bIJhT`hKFqX$^YA;# z43G`Wefr3^Oc-BKNwl7&mMHVqtfp;fq|50?4yRPi5HMYzA>>uN(%E0OFaXD4bLzV;P$8K5AZ0#eCw%sApt_Rgz2zD zLoD5_W*;RKnP>>Ya8IU&jzJi@40|spxQ!cxa4~`n!%&daTnGZQpL&d^+zEu1@QsXg ztjSFcLw9qNQ7dU6ikE zT~o{u#UNOTkVShL=)+_Mz7l~pgg>2KUJl}{>SW}rA5m;u64(;ecj3tF+;ySfOqQ*( zaBM=L+CN{kmD+?;!N?aT@z)&k5up%6dup+;mFkQEw>Am_ddvh%Fsu3yr?NGv+s@RZ zc+oZ_%bCSO*0miu@!zrdsX^Co>vv*BSO%E2fM2jU5dIj!%bDuH5I;chVBwmtaNztE zmPk-GI=F$tBqpRs#3yT(!ZZ;WLxPI{pP-3UkPQrCCdH4LZJjSB8LVZ$Gg0l(4^tNX zy;J23*bBm~O(v!}F*R3&z`tarIh=d-nid%?J(d+29lJXny*nGYt8ZB5OKOc+k1C^o z{B6TeOh5d@><^@!GoX5Y9-j9WX#^G`Egj|`$QozELOd|qG4Zm7_mJ}CSj(n#{IS-+ zA|23F+}s|ZO6Pq=ypn8F|^RiaTPt%Z}Duc;7gmVHQoIXg1K%Q5CcT>v(e9}gNXHFspFs4kjNy2d-#96}!5wiSk3v+x7A>g(E3i9pCw}u`YDZs?_ zRL8=j<1L(U^^sMB2{^JI-Hp{o{dz-Um<~z|H@~j#l-Tfe_fmJV6x7jQ;5Qh!zdt4@ zeYvOw10#qF4MeDzcM*=Akhh)V{L++68q`jmFlTQlX!73{D2BQvC(sd^1B@b_%d)}} zu(Qw0*fMvrHFE-5bmc51;6!P}d1}C;xOMRBpZ;BH&fB>#+fl05k3U+Sn`g;3?CIiW z`L&C5mckL6=rL$P6sb1Vu{;+Z4;Z(Ga40K+(Im#Nm#e3%@4!MiiT%q9BZ3h~pZoq2 zd_jG2kcdjzvS}7Rv*!)7u#QpJT0*jv1-m2E2lhSs*FaZWGgR;nzxd@&&RH8HF5+q7 zBSIYQw#Nx-haktR9C1uVCm+wVEQ_ycXJt9ol&4PafK%kjK^`Tc82wu zIC&nykBAF=n|KAN7pXTxVaAVJ>Il3*G$m{Wm2^u#YfHWnFoNm2g; zTWS(MACXCAy2{HB{o(8K4vUmw?8`dO@*q!{;R5rnj6;1>m1TiM`?EGS=&Ideg&b2EkYf^&Unv31vd(8~3CYf}_X1kgR*oe;$8l>lUVi7^g&N}j&)F2PWD??r2r2@g} z*ukweydAW`%o0H5I^}6F^{cga5pCv7vzhRLI%CzN0zSR@uco`Zz(Ylvp&>0PfD}lM zUBv0jpbJ^m1K!F*BI}kZQp6XZ}%11zka>yEloWgLqGnHYK zdaK9;EK!8Tm0s+A6J!{eJyW`_5k2!^8DmXgqRIY;UP> zQkLKfAi`%i4gewBNept1?qSs%CG2!cQOTICPF?_AM`XM0)=OBKRvb?>SxD_-s@xVB z^;RNdbi_CzNLYZ}(56WO_AuIEV6$}CYnofcg(FwyfVYAmaYI=99nszO)#Jmt+edo5 z;n5AEckaunec&B`JY0+d{nKYpo2dbDeyTmOP~4K}iWxEd2J)o@;@)D&`}$16$`=tD zR19?Miz1f!PdkJ!E`4z)xyxjmegda5B+$uQQI$3Ap>N$Cp3F`ZvC$C>OSJ>CQxMR` zsqVf-IM%C&2i?@~WTB>>JCpL(ug49--`5}4rp;Jejq??5aNw59)#6&wJq`pUphc5f zwzy6}E%Yh_fz*m@$69b|R~WRvdFi+CvdFb%t**8K0Y23(FulJ<5(bjw@@PZCKpZf8 z4)gaKU$#?4&dh~n zXU+*;lJka_q(Q$tL?b9m4E9~slMvIuPMO9Lxu$I*rPSgp3zNhMkUxjO2fH+Zwjs!r{^W$+?4#+Yuc9{Jhfc`OamBxlE0uuF@q#w~2Xj%W1D40Qd+x0$P#) zOKHU7H>NjYbP#C?1+>s5n+~bNavd1ar~z4o??$3?80XOhARhu2N4%5pgdK3v*a0QP z*9f?m9HFl2WSrVs8WjjnM3%#0z^ZXoEyRxLqY$8pkUTBO2Uul*XM=`7v!!9}HV2`S zS3qT0aQ4FPWCnuB3w(LvbYe6lX^O*rh(?QNSg;OWPP~p_j1h>DEm}wO^TXBCa-sj< zLtFo30{=sI(V!!wVPWxMF|#S6iKfRR`DUg$8SX0LcHv^(xD4?|Qo03h=3U4z6X_>) zeDm`1!jR>L>e$)A-im2}1^K83kLO})U~sc4*^sM1=Yi|ffvmTWWOP)4wF9|ujjmRp zbmnCip{k!`iQG=9>jIsHeG_7>L7Lg{aTw{SIcXl*#)IxP`e<4hb^u$?>gZqU^>F9)`eAzh4Z5jkRsruizw@q)h z{3}uRTC| z3VD{o9WSS$hv-OQ$c=-K)Ua}4ETco(>>;8dcMH46_ZPqUc}zer263$|t4XK(TOPr7 z&UPK6^tM2&JfT=Tr3i8jRA9;y8XD@A54lr-Tm%H((%^Rj^QVHm6n6^}8f)8~Wd0v?(n%wb8cmh#Gn{QuHEU%Y+`=vb!M^95zIz>K zP{&Ox{1t1<7;?RFYs%tLC`T$aLSe`8BB@UBa+QU#<>Fk~UmbLCR&Ej}wL z%6#-YM)W5ZGLYhY!n$cN7z^d3*rhm0YPs$KV}maXd3)Od5pi9hKj>nq+vpf`nbPyY zPU;2&5^9f#n$0r=HW9_aZj9L~D=I_%FRT_P$SW!WAetIL@pFv0jS?NjFDE6dOafJ; zT=OaQirffz?de-jR0+gQkaCKmqHzy8+P3&i(ksxD^m<9Zkoc8{?FazWxKTC8avsx= zXz`k`Adht?%8inrOZjDVkM8S8ogM^GJv^es1oVwzy=rRb9(+Cq^_G>?_gFY}9raVH zgh}QYgQkI%(uIu7KJ~E%r|g_0Om{kAb6#C*w*=T|(~%)fNfmk_b`L~U?x}`@95mVA z1SIB+7|$wAM-w7qq9Df3*WVJWf*Rtf7Q>EN8?ta1NqSr{EDu(}C%ZHcNdRkikOAS? z4Xv>immvMe7*xW;cHJTpkcbOwHq(F&>~adzUBO19>97Mc4TmIQTN>^e%Xgl_MCy{c z97dhTE9O%4pZR3d=0o}em%f1~plg{#BkAVMq1Fe~V6~MoH2aF2tu5_@9BW5&dvbQz zMpu(j->J7kd4q(Yy9+{AB!_wTyY&O3oLv(sogLXv)5+8K{62Cq#xh!x1*82dPo|^^fH#BRHRwgXp7mOfa-AWew{xPmd74{^4LSX!UK@E045_ zQ@Eid8|KWeqGo{~1t9X;=txa2=Q8K55xElsa|O~_$h5nDKPbzD9p*0QZj-LaYQUN& z-5BLOR?-3*W4ukrlY^m6m{l;HOxlNcGI4>?C!h+^kImfaCPYac@%0&()vsIT-zrPD zecT+|yF76bI^={zOsei{&Kx=jdZfyuNNV>M5qO?|J*XP=a+9LjRziv99VyXv$-dZ(&!^juQ`91VX}~;0DC8 zPg3cWJ+$485O$KO8;V&hT~Y51%a0Ga;AQSSt~Qepje0=wvz*l-Ypwb^unG2InNrExKxoE;}LGB)aj zVtr?(sn6-q@|Tx~Zm;qf^Jj-1X3-la&jM?~pm)=p93t@FJU#Ug0J33m6dKve64U{G zQ)CW5QNDc01Ns^i=-&b6a@sRXKczHbr@rDBA_AN`9LmTKSmc;!nTLv&GCrH;`NiVI zF8<}9kai+){#4TN{b zOg&>U4Pi*A-xUyC+?|@n5vKCdW+{7aaN|=Ly?eSK!AQne@^$QZA z-S?P8Db`q_^3Y^gqgmg=E`J8Wl&_66uL$DIQhZbD=dOizD2y=#a(2qsd^G5~{rrgN z5xo~Mt3`1x3H=0gyAhNnN<6A^P!M_}q6&k`dyb)nsZ8*RB zdUTUY-7X^Vg&8xt#r_7z_npt!g*U~>eCeP$>H40x@i$r z&QqBeanSs%-~UNvDVMz$`A^Ia?M_A>2jwNITc^5G#gG zKACW4GEo>JNAwfeG>O>J2oBu7co+&OPDvPFZx4>WjdGu7$zVtVvhpeWcv_7GhJa-@ zJ1)5-1%?+Qh>I+7txP-;_2A)AVzsGxf4uIbR7rsdC{^;H+jTYrgU3;kEtB8v;U4`ov(rqev#BbkJt5uVS+E-F)F48JR&sA7hev!alB!{sfjO}Um35xQ3(#^q# zKJ@9LKL7_fDZP0BAI2EAc~iR$C|4z^m=k#?UmghP7BnV8Jf_+AlJLHMAe(a5^r3rE9E z^`+GI8f_zxj3|7$()N_H2b|;T>tH3f$=TUi>-69W{)d6)vnO)s$_90OlNbRlFxN#* zT>>*rO`s|f*VO(Y8SHjDSEbl}3HjvFDj>70dLE)-D@}4yq6dsUs4{b8Py@*3Knje1 zP!zoH`tLaq4fGt(!Ppk~uKB1J3un{7ylfed@7wsQSQD=-m+%B7lzV&_p*xRXKSPw(=;@!20x~FEmxNR4-)oz@^Uy12KWb5?{nf^z)C*POf60p- z&0m+~3}diCx_6pgH6J^DlSomw+U`SApxpCsyl~zIPejUA0V7EcG-m%{%&nX0ImpLC zfA=~s>+PkHknZ5G^L_*qTzc^y*0S2qm|d%#PR|yz z^SSXX`?`7fd8g(_>OwJ!P8o}aH&XvJ9!5Qm5|S0gf`D8IZAp9qMD&pql)~QJmzJ*P zcB(m`O~T9MXn=%)5b07N9G*{XA80+7L5d`7IO}8|jg38Zbh7p=2_|X5M$Q$kq$SUn zthi02>-4YpYh$k|R-P@}0xPkEQ*s z-SkpJEHA8BdG)mk(o`Y*=`ug2dR zlc}q_)At@LpY9iS%3M$`L=)ce2BV+T?166(YERH5|CuD}*G^$$Vi&MF0Tqks{2*=? zi=XlO1U!NuCXawV)s{RiF3uL`ZBYWRzhcdDEM-<>om8KJ@D^x+ci@D_VFHpTuxC=H zj#iD{NJ6AJshmq&TX$$LYuB};+f;gJy$l_F83*l!h1zNhZ-hgdaud7?JIoyWei@@mXt&yKx%epRy#M)R6kCQWE10_7BMJMGIq?*VE-LRf~A+1w~0ZY2`v z0nhDC4S3@;EF7Bk1b0RzjjbKP zMm0_I(zw6*X)PC)*|{?9T$y#Q%sW>WohxTr7`=Ok;9DU5y%SGcz8ScGkeYWn5BxHn z?8Qtebs|VH9gH07>ExgXm{rOki)crnAQ<_ZgRMTPKrD7`2V;g)4V zKP0m(AI^;q+l~@P1O<>W&exzObBC`uxJfN))3=M zaSxPKidh)-Sgw3oZ?&=X&qd~gAmN0`Q?OffdvdWQ+$`PO=(J(GfGd{~A@n&pNFAC@XaQN198UpPA^WlVdejG^x4 zLy)*{IgIFCV>YvCFl@{Ju*5T)9?VChI*GbE^d=C#yd4%b;T>9j?2HAl8X}YNTgML6 zDc@tZzX!pFB*Lf*`x&?}oL)T+z0yyM6K$H7IoDqAQTOm2KM(e2Bq#FB{RM?b#r#@H zO8-A-Q+=IFm8yeOy9$dqwgX3((a6qr&6qBLCV_~G$s5`i1a@w6sf|Q^OI1k$CyWO7 z>OzBc@?rRUndDJ9#9pY2JY|W2gVL^9+L3hbWIEP`kOz0D-?I}}a536$u>13mVElwE z$)W!<1q0mCY8o`BR&0jed!fZLM*vRrF+cnx_es3y=Ll%xbVxY(noBK6!!0dVR)h-nlfW-=!E%lTYPr;l0yd@!D0ER3zb)xP|E z`Fi`~=Cxtd5~X<`6fx@YG!J)JyoMB*X{*i?$wG#{QCZT03D^m#j*-wjmF!WN9-bwl-A3 zSWX%wGO#o*$9Y=U8OgMQQoFJ2cxq+9@rvhI++2k&{X$<|EvW^x08!Z$=$7#%ON!~K z0V?_`55xX$^8h={MIA3?rx^1F8|fJQDTz5^q!L@Ib0Btn2KxT%$3LC0El}HX(k9+f z0uME*_xzB0Tei^8=0~5BG=F;V6oUJl^3<&T)JaiEo7g58dZ|2!e}Q(tp-b)m15ar6 zE7?JeX!mC`892M&nrfTEMD>tpY4xw@bSDcjbLo2E*bN=hN(NQm(Ud{^x2N3iuu1E1 zK8$lCLZ-N<1Xa=%qb^pooYu6>oWVCvCe7Gjk_!?-D^*;h*YE+OEDan-EFW)9KRVGM1q+>*7p7hR^9w$8#FtBgnV-b88Cf(EvY-OA`S%hCG zhh`LZqG5q_hegU@H}P3UJb`uBShmAULW}L#UQCR40s8HJFFidxgN{uikgHv00o8y# zAj55WYJFp#Ae-BA1K?X_WY~efd`E#?7ZL5kdhY71eRbX9HDmS-T3`+4p|I>l%v-Y-xQxkz4D}<^EsKJUC ztl&nITvhT#4U`kd#Km+^26GOlp)M{7Z7YwMq|$ND~yO;XN_yJCJST z37$uwo*bwq>%`BZ6NofRm^SvQJc*`x9vy5(i~w(WE3lg4ZdWwoV-IRfzz$48>X2+Y zmoXOB3rHee{EL)@gS_mAlaV#c#aBaCcOt(g7uuS7G#iiwLh2ETo2i@AMYP{Q%KVSn z7}4RLNl8J`-_Lv9s#}Try_Y$w0~djkSe-W=<&Jeo;wD}bke(rLa0Sxjt{D!_H|yUf z^>0({J!f&eW1WC=knkA71Olav=ncs8y^)%dLn-rghrS|t+P_ja`?gZY8iRZ3EhoSd z5_T~VrCVV7oFhwp==+bFX;)!Ndt)mPosO_NSpPYmw&7AnB`4*M>y@33NnDe~#~;Jj z^}NkI`?FCVdv0KqCqFj*@W-i9PXBCDrtMMsO40*rEb8#WKN|Y!6FmL1nKJ)yrp!N^ zDf17%&ior+XP%uPm5c-c-T^I~ouAJ^o5Udg61wbv2uS@p{eG_);Fzp|#5vIB^xIc{ zO#?%T5SDUf#`&8I3Y}F3Q;#=VvCJoa2X-7~HyX74N0TiB)rq=<>++YKPq+otiC*XF zjy20|S#NLj17u5IgF4nEkHduVgT2mruwka3E@Tz+EJyc}Z#EomcZlK$qF+EWUkyS= zqE-peZyeEQYJI3zdeoG=z|S8IXVT0=`dz zt6^5vqyFl!&upNK2!=5^B+3QXm7yRKK2}6a2itWrtk<;IVC{)|V<7M}@qNm|gr;qm zEENQE%sXkw1?<|;mW9liM{H#JhC{qAECL3V>N4p-0MivZiaV}NJ9ykf*I`S*TUeZQ zqNFAEeJ3sxqpC|N^|5<81*Iz8H+2Jo{$dit7B+mIasfM>T8+?yrk{DAK(0K_l3G~G z?~MCRaQJYHZ4SE$eKAa2SyUUV`@!&XUgT88=HCBUn!Q&W8R7N8l87oNov!{q8z)zL z{r!(|e|LjNsk-<9@pD)%O)xA*_fiV1QAR|p2+-{?j1cK*m*#_cBMhr4y1DY(uX42a zDa>>U@0bfMBYa1WwgKb-7fkyN|NcV521y0BgOK`qlmSiZ=|-ul&F2(+L-Vn| zeKBwBi(9N*hxk!0G5hO}mB81azhPDDbK{mfd7U5ddaETV=p2z~vkK{_mjwDXqif)z zNFoq2G%YS?vyb5|5EtkmsN|rb#`=o-DQF%rFtk&J#1>5wg_YOK>Q)+Juz;YJ8~ZoN zneOwc&t%mX;y5nPK%i(ByO6hZpc^SqH4hWZ>>dW-@Gy^TuDubo(bR^h23FVbBEw>} zQu*ZM%odBN6&f^bngG?#0wopQ0>!EAN_)l&FDBDVBT8fyo9Uznvoj>>@@G@P*(Z(o$bYKgUCGc} z9A1LBr?3Ib8_(*Wct?fj9v64iIeUE2pH=k=p?_y63F0m*5Cf_mjF1*vkuXl<08U_z zyG8gm4FjLL4J{W-f0>i-8puNHzL-0eD;x7VrP%RVC}HqU-Km)J9Tyr2Q}_~detyw* zJbz~?3)!3nMojY*ma{+j5KGMQGnRnPzu^`v*2r_(9&JToV^q6m4s_F{?Zo$`<*Gvmo#9D{jt-QKv!Oa;xpfNrf>td1W7=k-tae| z*Ran@N1L96i>y3Y?ewnctaIsdezCZi&znb8CfsXp#hDb?-o3`R`aA9n`p{1T#wj%$Mt5k?ai}k~bx&yJ&`cZ9`FlKkO1;@vlDmHR@#7JV`+A4c=r^}F`VDYT*Syr1NK zk#z&quVkLmb0Smc8iorQRRO{&4Uu4V0HK_e(l}yU4HIr2h}|q6=c#z^4c|@8{`&Bc+UG~coy&3e-uOVzosndIL~@vAbOj@b>{xwq zX|j;_r`i`zwv)@*#3-q;mE|D*p>*9DfyYTWRl&kJ9sNod@sy9;$61JX8^%gxaMPTe znU`l6@XMx)$-;P~?r&jLz5L7&`M6FoY{m(GI}Sq`-&?`|y|7$f^dmnr_m= z3x|2vB$P?l`gEZ;6{5x+bAorw!#kwiYaVKj&s8fGW6`qv9qAN{ayMbP5y2?W< z01bp5`q_QpZ?KFV1`X7ARiI{^0jKUkn#Ft%$Jcg#jx_{4;Nn^{>RHB{OagKtI zPY!Sn(75DlflWe}9#;{DCZ`-wuNGe;DN9q64CspX34M}=0@olNJZfuVam&O#oP{V& z5=6>Is~fdJh4q2+?%(la`SrE>h*n(94%A|v#vrP#m`Z;Ifyb+|nYH`-ACJZ>ORjl_ zziQujaZ5mfZg_5>z4dQS!y+GfJECOPX*-7ryj5CPRkTTHFTw$WM#G&_t*sRgEsVLe z)^LvCnD~i1MN|M_Hz;h78Yfr{7ghgiysG?wToCJ|A_S_7yRaal>f`C(s~P`u`gLd%Jvf5Mn2@YAzf)DBt)=XoOM4vYvzdrqV(Z5>D z#m6_6Wp?(p!m;asvAAhoP$1+w8aOvB^D&rwpA<6aD3TR&+Pwio_llSTkwa$EAMG?a zlO3a5$GdRlx>7?Q1URnsCsYGmRAAjK&7e;IhlLL%)4l6ZjJuZ~zh zwNf;S%3?#mCB~7ytPUkj0}^kG9n6LUoHS1ZATKXeR#pLiBXPVnH{2jTdMJ~TtOWX! z!K`~nXnSq@!xoa1!kWXB4;CKiWAx+1XWGt8&aiBs<1=7~+6`!YpzL-c+t!#Gn+wt6 z-Y#u$@8bo#B5@3M@x(4h3xN+S2J)5;^04P?!cS>|s4bvO?c1g_lWtL(WEg>+1VER3 z(i;;Z3)E;KCAdcvP{RVsw(UcF0iETq! zT&m`Y$_+DsxmWpOROm}xswpYp)N3S&B9R^y2QAgE#ctXG!H4#$(EM`NG9nl?0~jA?%0c;jMS;x; z`1-2mHm@vYFE1~>8&d9H8#j?nyhh5YgUHVr@I+wl4$20~-b)hn`X}&EM?>*wO2SS) ze~v(BRt^LvCc-7}XmZTkHCdfcy1o246Ke7A| z@sDam%!oKSW+ENpWY$-kZ|dI7`z|)j5{;{*_o`xh=vFG@f23Ov^GuZJPy#;f1(T(6 zB@825H-x>g@a6x8_ug+3QtDo%Y}H=zN31CX-<-nsEvhh=-ah(@$ni7-;lVDfJXxa{ zJtlY`^5s?9;LH6uW_yqMVcCpG1{WaYG_AodF_*%V1%gRfNDN`n!6Z&ar|&`Kt)~!G zW>FClb-mJbk1v&=r-X)1`b~adL;}Nmx}EeamGv8km$4 z!<~$G&baOrl5a~-63I1uS zNQEh^E>O+PdZDD9HUzV>@nkwy%jLqE;PG20HkXEi7Cy3P8G9MAL=+e`gMQwi0O4Z4 znd^KZ*vjoFli$?-=ZI(Vz?j)!)o8u*xd<2*-`3F$3Wp#`IbY$ouF>lCf%ToLp?zkz zYE1u<_>Ix2(lAkt2i}vA97K>L;602T2&Kw9ZMYuy7^rcqfKB9{KW(v{D2Ek3t?iWv zUX@V(S=prE$y%ToNA53cn>JE`Umm`E)?aU@x&khuX;0cyr*=A4kQbMOIhh}R8 z4cWE4f@1OA^JQZ{J}wtJWep673W}1CK6yxXivaOGxYf2 z4sCU|7n}Eo=`fx7*j_4a2gi5JIV!DBguhOKsA5&>#biVrC~e~I7`IvzX2TvcFK2U8 zrj(bFtkw}2thN&m(JK*YNLp{P)QWG1SejY*q4q#F-$)9lSlWMyEqIuNx&i!g1tZzj zMI{b*S-=~+>@f0(I27HQAZ9Wxh=BixaE6Wgx5hP*z*I;B2j6PtKhpg0G8#$fnuIyf zALH;~#XQriTW+8Kv~rXl@s3GjLrm6hJaylUOk{dhX%Th#`o;kguZ0ywIqWG99dRIF z#TjvA&Bg<(#m$$m%bPD(OAGeKqxPAFT<{eU9f9`w>f!ln`Ss~;IGKPB>^?C8k6%ky$LS`1v!_y05x zKCfeG=uOoDQUCtOvgyYdZ-73gp@G8e+af#_qhcSVa>HW>$U@)g2VKyLsW*1&W16Eu z(B);72Mq8kLmLu_K&QhkG_qo9KUN7X<@q-j7dUDuq?|(36avoE^6^R5UTRNpGcWF> z?p(SepdW+oBxDJ`hkUgv8tO78U;>%4&@9+{6Et%h>#fQLBa4E(dE~Y{&?EQH$L^P# z6JN3C7uOhioudF%I~#^%-56E}vFwddRBH@zp(L2OgzFhi#AVy#d-(H>t_P(FUW(>^M0a zYI^ibj}f?@hNEBHBrvD68U5~)=;KK1qhEgl#q4jZ<{)07+kg(9w@1(zeY)9fWKh>r zkv%D>?h|%|%o5^1CYojFn2*Eo_gnyLqk7YhVuzDz+npuN(vj%t%E>$%jKew>D-mEw7qdnU^&wRbf zj^G~w#WXEtd(%@4dEda5%&$}|*s)nwo&0wgG@R#66Nm2b?a6bv=tEYhVH6aWLOJ^H*XHcluzR*$ z6_-ikg3@Cj^m_O6>HhbRr=xXs`)9N_oJWo9?&i)szc|yc?hTdO+9;6Tcl_Y&3C`1k zn7vvoIz&RAyMhKPF$q1yUM#nGIkp$-((SPc%a9(1NwXe@h4naEc@oq4d@{Xkwyqo2 z*Q5uVI=-M`nQo*Sd|{X`>;wkgV$Ju%2li1O`1<-7VzswaJ>EJ%;dF9ddynhBA}k^= zn;${V*oL?@+mRItX)wt&p9#VPQmd6#g?ozFzC7e!QN}qJNTXn0EaW8EJpIrPEb)5)FKcdRm$a;-ENfUtac)RdAc`e3f*ea4w6=Ac zyJVvWxsD~e^y%WP&Y!8b%VGjQG+^^?<~HA5#vUWos4jCt>$u|5Op7UBULF}K=A~n0 zcpxj<23Wh8!47Pje9DkCG6jVv&ZP&Sm1)p4v*wA76(A%&PyW`b^c+cS7_1I~HmWxU zE#OaCWjHyjoLS8~dn*gJ=sYviC7KBDxzW>Ec?T&BBC{UEW~^4K@C?R(R9F@Vc{Xf? zCVDt2;h}XK2+SH&XF&pq83|fpCGm>681f&)Iq;andrnYTa0C$=si!b*-(A z9fMXGve1h6C?u7|5;KG{drM_c{GP_v_r=-NlCf78lgY%AW_n>w zCl`|?v$pdweE@@XkXrUi9|JOp%{US7r;Zt2_*GMCAN#t`phNr*__%l8Bq>4#e7J12 zQn*Q{bvXGnt6O5_h1gS*FUCgjp$8_P&d19hKo_VLNy5*zu$S*siow%HJ6%AB_oiGX zas_*TEfwvWgw=hOlz`N^eUNg5vBkPxBwi<2Ck$>Sekb;dB4V$(lL({`u=t7KM;VQr2e@3TnN=?awT>o)Dr4 zfAqFprg>k}Q`b~7V0l+*0)rHrogI5m|+rFN6igu zfE??aqRV`EYU*B;A6vaS;2!Jnh4Lgx#!yYb9*-IhvD8O!Z&?TPf{L_WvOPnk$8nZQ^QSHHHWo80yCX3iYx{oY`*bettCzliP z^Q)0=+U43`mB1>?wa=?^?bDIk@$-F6cg$uJ{x%8?DR!_`Vck4iK7uI5o)&Snd6;Na z4sL+$xE{hjz-$@ckv%Sd+@7*?;5V2WIYkP5NAqlw!tK!-vMP|!;i2eTsxLITA6=^t z9~1e$Fv9Q`hB)ZvtluM^gASs~x;u_Wat~v09N|bCTBNDE#fBCTD-IcQqAXA8 zM|Mzm)=rt~m;?9ss@#z>zZpd=2FmTqMwpO|E+>oaMhclVAJM+a@cd`830crNY*p-j zS^2vW8rF#D^-I2pM}UWITf&&a{(L!-6sAx{)X|Q4hNMD#Xo`Dh>y&AhdlM53RQ>u< zN;K0#w#Dkjj-SWI9xD;EByiJ61@1yO&#+9(sZGu41(s+mVj2)8XlmT&8I4hIvz}$F zopmdvGflzjWC#Q{n@-vy`i96)Zsomk6cMsa`!~C0usw*UJ0z(BI7Q++(3^4h<;8k@ zK$?}Ss29uB95}9qNQi^s2g-jTI7u$&3mIqC7KEUi9RoI!!3+jK7+p@{scKqs$&}kR zqaF;?l_eFmjSsSHghP{yUnWK-MjnlNGBV60rv+XenpwaBa}7*xpgDS505+h;L*~4&`?J`w#2k>gE2<`h4~9+WPtP;Xz9`;e5Cj_&{IF zm!Cad^`*sDsDnqcVUIjIl8f8YQuf1BTFO&%fS*ZDgL?H8sdizk1^>p%uDrCu; zcvm6jKWz4!fY?f7ZZlO1t)~duDW^~5E6{#*9Bolb8y^{>wP-Z|ey1N_xsUX&FB%Z* zzu~a?JocuaCJmhRYtUtvl~kiUCEohrms7O-#9M); z6roc}T4U)p2|<@mEuVtUW2sWjJ;@LH;)J(dT_3*eBh+hjq5D>@`?`CUUtDwwW(&f# z7Yr@5jr-?f+11z@b%&ZarCEWdAg*g+&UP2mGXs+Y2@PLS1_4>W?R+3{hIltDmSMwM zNT~_`!xB#}yaT(3zgWDZy)fbLUe~`+`xOu-!hw^z%Ji{8BMh*Ed~b#MmXr8~NVt+dBK-8Apeh-E{73)%a_~MS zz}GLt&4$IrxH4+@1{uhz0SVbxVR|Pb=?H@>KNmZaHVr*x{Kc@Pr+*)*L-L)g{e(Md zq|Y~Zb?UKe_87h8@$o?BQA@_C1-Z^O?82jD5p14|i^-@|+5(SGXiV70_T%K!rRL>@ z58K35@HMnIGA8x&797ZWd9#o~J% z&OXLeBu0?JVQxk#OJ&}w_tTM;YLkk~Kd>>uK1r!{d#7OzRhfvIQcP|@vUzHEzs$+R z+D_}vo?m}AEVP)Yh9(d}sS6rq8|`0;ps%+hEc)|vlOF(03scH4CuuAiyhb*s=~@;d zkm%;aBb!afM^MWNIEJe8s?<5GpNxR7-t{5UdiOLeMIhl5M&{@)D6s;ZcZ)BJlAIn zeK8x`$Vd3!<;ZBKvwmWE%(mWWQ=xzed!_6EC^=yjIweP`V+g`<%6Mv;(?OWab{=~Q z^Z>rG&XIF+=ph%)jI`>~KKrY6W1mo0U1@+iRF^O?>oq8T^E5Ev?;9Al_MD=t8AJfo z-IjY7r;a8Ktmu6h=P{d~oy`{LX~MWVS9j7?WL(46r0xTT24iLxmdo5x<9T7(l;l}a z&dkXtX21Emi1hj+!t~!hzw{y458uRu-u>MZsmFdCuT0hIV3;f#c|hBKnPri#mwo~s zkPMp&J&eX*r%vC&+fMBmxK?SU-h&W^;VE_({1l8?5fJ3Lr0cm7W zlJYh5Kes_c&?7h0qItNPr!%^xt-E#Sa(+AZiR$ihk|c+B_VKV^U{mq5xXDuxv9r51 z{AefqMk*O$lnx#Cn!eeWja3DyHLVn*}L8-Z!IQ$|<&q+)9Zid+ox zbjU+uye6RG(`(*110k@$v_iU3Ce+H3+IVSccW=JCaaYNv&6_o>#Wa%1^H;W;hXKKg zZ}7!Ha9?P0h2SpIS+XA>W`*l$HgiH6VJ&5v?a9_uyLrU2f<2k!V|1!@vc?T^1<$kG zrX#{etGmPPr|kYakcKE1AF-2QSJe^Ny9kFZcn2z=Qq&IQr{VcHwe?Wfds_dYckCbg z52x=>JeK>1D||u{W8tJejHv2XM^ve9Gz1e_xg z3^Q$Q;TE5&cCbJg`LLiN!rDpQ9Z0szR3$Q1MUT8F;A?Ah#w17Ua>bs>N8nhL~ z+R(r>P*B>>0YZbGq%YuWPm=A18up!%@lJah$B|va5hlc;y1!~8X0_Z^42xos32G#Y*;>&9|rzbxoO>PnZf@NJ6U9DU~6^ zxrb>;f+l)dwp&(fqEEmvmpA_!Wr-LpxM(@Dd`)@gKk!-mxozTATux316VuDG;41rCGwYU=|_?P^9@mE<@6>Bxsr= z5@uO3q(BQ0!_Au8K7=&oPr zYJ~-VVkvz*Nl=={!A0y+kh4>Tg|ibl!3X_ggN~yUm~`7svwx;?clMb1V+?WM2We_Q zqo22Q-OZE=>Gs!CukjKE@SdMCc%qys;|w zpmReDiU|HQ)L)v%u>hV+JWhm|J_5V5}*<(|E z6(AGQZh?gFk0@#%iRkL|TgMh@AX)K(?0}L)KwDvvnXul8_5NO2l`_wogZ`Gf55|v& zN99-iR~CfSzLS8zGULjTrCZ_EJVaq4`5f|MpEv<(q6SI}Ur}iTwVNxI&~AuL$a98h zU+6R-n&64gh}*?oJ)fLwx5Ve9EV(LHnT{C}A+2%@_oM#pGj!j;)7ry&n@f&i#asnO zOH@hu;Mhsf{^b~YM7TMf^lBZ_60+!+pfX;F(f|c?w3ogT5Mh0poug_#AZ-aPi5`fk zKdH*C=y_Z&VEcs%?Pu_n+wf@kpA741#K^Ya0P<*3_TT%pW5epbSDNYMJ>Z8v`fQCW zU?7Mr3hE=BPHw3KkJ;pnVW5pfJ^U9VhQ9IRF0CvLKUkvh=o9TydZ#?lu8>zo1ZNAO zM1>^BiW4dNWXfMHrH)H&9A^tepagL;(GW(r7*iRv>VlTmRG%*97xVM;%Zr7!lc6!Sc-xk3+riD# z3Tf+7C04$Z-eSY%WHQkshBn}cVOd?7g_kWf{8Ca}o*Ag^IMNw%JfnKn$f#~0lV2dv z_2C;7Wm~o}?SZok#^9(?*7>3thTHKC0g1{53K3BcWOuIe5%t-85w({y5{U*RC61>9 zg~j=rcIrEa6xN+F3^ms7(C;q;eI%3=NPdD@OSDQ_wHMFAqiTV&=RPy)PzysntbGJ4 z*5tJ%2O_BgC(`TKqHvh90x$MDp#?rIc${-ApoF<`FT<7HQysy;K=O(x!ScV<&QqCIx`w4^x~V@tvfni~$`P=VHte}5i>o`rRf^@>p- zP(B`_6>G~@ieo>)mSfH{1?_{y#%l!I5UbO8u!7UNWX|5%ta^GPE4sUeiKw~+jVBQ@ zAW_nMX*5hpVPnw^!{_)Bw0su5L4|Y&_0d5%YXkw;ad&VKL)7+$uJR0yy(>wMlTbZ~ z@+?zYA|~9+$Y$ht&3Y*@dfBC{=}Q=h7|RpYyYm$T7ypIb@IYx_mS`2p)_CMM?2O;= zl=jM8H=oQWXRQ>_Wu68P&_FDqzn?Fke;SEEgOaDO2+$Ijl@dS`nzDp!BULQHzHeE; zNUy9`2ve#6Qyp^}{mC}a&jL6cG!fd%-3x{s$HI8`5U3fGR6G)OW?Ief3Ddga+>J6) zggkAR@4n43-J=sW8|Ja&65ggwWCv6qlY(GKSi5P%;8U2J!`?zb-FOKqBCWt2535!n zqA~^HkfgLLPRi=+9rjd`ltY-1C>L}??GC0fcLE3VT5?!vj?pk6(?mF}z;HLP2LmiB zMe-mZ0n8C75F|esM;cYbxblHMPbTNa4Nq9evHlkj3eHo}kxkoK11OqKCnG(eIc4nb ztdVzxneRm->8iagq%PRG8ozfgK|7~&F-zH+5fB(2NRA$&7oPb!5ZxHbN?Ld=n)1j3 zDkEEvHZ(G1bqqK@Dj61RhvzwDxuKu|5v>k1c@31rl)*|Fc}74MhO+{qL1&uVHA|{_ zK4>RsxUx#KQwcIT@@Vfl)?sl{tjIuKNHH2i)u>@!rp2q}u%vJb>xamm4bqhB|6nZ0 zXH0P7!jAB(%IZW-BXf)F(7n1Jr9c~sK!$4}mP=i2SC)a=e~l8k>Z5N-#bSV#W9T>H zjGRp_;amwvznCF5iUQP*(gI;+WMNe#Vs1&r(7Qrin^N>@dX4H*2^ZKQ4j_%0AV&S0 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

&aFa`KajOQc~6a&U+ar- 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ⅅ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