From 33fe45719a2829a5b240934f2041c00ad6865c0e Mon Sep 17 00:00:00 2001 From: jiltseb Date: Fri, 1 Nov 2024 08:51:32 +0000 Subject: [PATCH 1/8] update to mobius-faster-whisper package --- poetry.lock | 319 ++++++++++++++++++++++++++++--------------------- pyproject.toml | 2 +- 2 files changed, 181 insertions(+), 140 deletions(-) diff --git a/poetry.lock b/poetry.lock index 2f2176cb..da38895d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# 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.8.4 and should not be changed by hand. [[package]] name = "accelerate" @@ -481,6 +481,10 @@ files = [ {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a37b8f0391212d29b3a91a799c8e4a2855e0576911cdfb2515487e30e322253d"}, {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e84799f09591700a4154154cab9787452925578841a94321d5ee8fb9a9a328f0"}, {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f66b5337fa213f1da0d9000bc8dc0cb5b896b726eefd9c6046f699b169c41b9e"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5dab0844f2cf82be357a0eb11a9087f70c5430b2c241493fc122bb6f2bb0917c"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e4fe605b917c70283db7dfe5ada75e04561479075761a0b3866c081d035b01c1"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:1e9a65b5736232e7a7f91ff3d02277f11d339bf34099a56cdab6a8b3410a02b2"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:58d4b711689366d4a03ac7957ab8c28890415e267f9b6589969e74b6e42225ec"}, {file = "Brotli-1.1.0-cp310-cp310-win32.whl", hash = "sha256:be36e3d172dc816333f33520154d708a2657ea63762ec16b62ece02ab5e4daf2"}, {file = "Brotli-1.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:0c6244521dda65ea562d5a69b9a26120769b7a9fb3db2fe9545935ed6735b128"}, {file = "Brotli-1.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a3daabb76a78f829cafc365531c972016e4aa8d5b4bf60660ad8ecee19df7ccc"}, @@ -493,8 +497,14 @@ files = [ {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:19c116e796420b0cee3da1ccec3b764ed2952ccfcc298b55a10e5610ad7885f9"}, {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:510b5b1bfbe20e1a7b3baf5fed9e9451873559a976c1a78eebaa3b86c57b4265"}, {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a1fd8a29719ccce974d523580987b7f8229aeace506952fa9ce1d53a033873c8"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c247dd99d39e0338a604f8c2b3bc7061d5c2e9e2ac7ba9cc1be5a69cb6cd832f"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1b2c248cd517c222d89e74669a4adfa5577e06ab68771a529060cf5a156e9757"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:2a24c50840d89ded6c9a8fdc7b6ed3692ed4e86f1c4a4a938e1e92def92933e0"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f31859074d57b4639318523d6ffdca586ace54271a73ad23ad021acd807eb14b"}, {file = "Brotli-1.1.0-cp311-cp311-win32.whl", hash = "sha256:39da8adedf6942d76dc3e46653e52df937a3c4d6d18fdc94a7c29d263b1f5b50"}, {file = "Brotli-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:aac0411d20e345dc0920bdec5548e438e999ff68d77564d5e9463a7ca9d3e7b1"}, + {file = "Brotli-1.1.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:32d95b80260d79926f5fab3c41701dbb818fde1c9da590e77e571eefd14abe28"}, + {file = "Brotli-1.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b760c65308ff1e462f65d69c12e4ae085cff3b332d894637f6273a12a482d09f"}, {file = "Brotli-1.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:316cc9b17edf613ac76b1f1f305d2a748f1b976b033b049a6ecdfd5612c70409"}, {file = "Brotli-1.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:caf9ee9a5775f3111642d33b86237b05808dafcd6268faa492250e9b78046eb2"}, {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70051525001750221daa10907c77830bc889cb6d865cc0b813d9db7fefc21451"}, @@ -505,8 +515,24 @@ files = [ {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:4093c631e96fdd49e0377a9c167bfd75b6d0bad2ace734c6eb20b348bc3ea180"}, {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:7e4c4629ddad63006efa0ef968c8e4751c5868ff0b1c5c40f76524e894c50248"}, {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:861bf317735688269936f755fa136a99d1ed526883859f86e41a5d43c61d8966"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:87a3044c3a35055527ac75e419dfa9f4f3667a1e887ee80360589eb8c90aabb9"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:c5529b34c1c9d937168297f2c1fde7ebe9ebdd5e121297ff9c043bdb2ae3d6fb"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:ca63e1890ede90b2e4454f9a65135a4d387a4585ff8282bb72964fab893f2111"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e79e6520141d792237c70bcd7a3b122d00f2613769ae0cb61c52e89fd3443839"}, {file = "Brotli-1.1.0-cp312-cp312-win32.whl", hash = "sha256:5f4d5ea15c9382135076d2fb28dde923352fe02951e66935a9efaac8f10e81b0"}, {file = "Brotli-1.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:906bc3a79de8c4ae5b86d3d75a8b77e44404b0f4261714306e3ad248d8ab0951"}, + {file = "Brotli-1.1.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8bf32b98b75c13ec7cf774164172683d6e7891088f6316e54425fde1efc276d5"}, + {file = "Brotli-1.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7bc37c4d6b87fb1017ea28c9508b36bbcb0c3d18b4260fcdf08b200c74a6aee8"}, + {file = "Brotli-1.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c0ef38c7a7014ffac184db9e04debe495d317cc9c6fb10071f7fefd93100a4f"}, + {file = "Brotli-1.1.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91d7cc2a76b5567591d12c01f019dd7afce6ba8cba6571187e21e2fc418ae648"}, + {file = "Brotli-1.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a93dde851926f4f2678e704fadeb39e16c35d8baebd5252c9fd94ce8ce68c4a0"}, + {file = "Brotli-1.1.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f0db75f47be8b8abc8d9e31bc7aad0547ca26f24a54e6fd10231d623f183d089"}, + {file = "Brotli-1.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6967ced6730aed543b8673008b5a391c3b1076d834ca438bbd70635c73775368"}, + {file = "Brotli-1.1.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:7eedaa5d036d9336c95915035fb57422054014ebdeb6f3b42eac809928e40d0c"}, + {file = "Brotli-1.1.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:d487f5432bf35b60ed625d7e1b448e2dc855422e87469e3f450aa5552b0eb284"}, + {file = "Brotli-1.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:832436e59afb93e1836081a20f324cb185836c617659b07b129141a8426973c7"}, + {file = "Brotli-1.1.0-cp313-cp313-win32.whl", hash = "sha256:43395e90523f9c23a3d5bdf004733246fba087f2948f87ab28015f12359ca6a0"}, + {file = "Brotli-1.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:9011560a466d2eb3f5a6e4929cf4a09be405c64154e12df0dd72713f6500e32b"}, {file = "Brotli-1.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:a090ca607cbb6a34b0391776f0cb48062081f5f60ddcce5d11838e67a01928d1"}, {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2de9d02f5bda03d27ede52e8cfe7b865b066fa49258cbab568720aa5be80a47d"}, {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2333e30a5e00fe0fe55903c8832e08ee9c3b1382aacf4db26664a16528d51b4b"}, @@ -516,6 +542,10 @@ files = [ {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:fd5f17ff8f14003595ab414e45fce13d073e0762394f957182e69035c9f3d7c2"}, {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:069a121ac97412d1fe506da790b3e69f52254b9df4eb665cd42460c837193354"}, {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:e93dfc1a1165e385cc8239fab7c036fb2cd8093728cbd85097b284d7b99249a2"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_2_aarch64.whl", hash = "sha256:aea440a510e14e818e67bfc4027880e2fb500c2ccb20ab21c7a7c8b5b4703d75"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_2_i686.whl", hash = "sha256:6974f52a02321b36847cd19d1b8e381bf39939c21efd6ee2fc13a28b0d99348c"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_2_ppc64le.whl", hash = "sha256:a7e53012d2853a07a4a79c00643832161a910674a893d296c9f1259859a289d2"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_2_x86_64.whl", hash = "sha256:d7702622a8b40c49bffb46e1e3ba2e81268d5c04a34f460978c6b5517a34dd52"}, {file = "Brotli-1.1.0-cp36-cp36m-win32.whl", hash = "sha256:a599669fd7c47233438a56936988a2478685e74854088ef5293802123b5b2460"}, {file = "Brotli-1.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:d143fd47fad1db3d7c27a1b1d66162e855b5d50a89666af46e1679c496e8e579"}, {file = "Brotli-1.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:11d00ed0a83fa22d29bc6b64ef636c4552ebafcef57154b4ddd132f5638fbd1c"}, @@ -527,6 +557,10 @@ files = [ {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:919e32f147ae93a09fe064d77d5ebf4e35502a8df75c29fb05788528e330fe74"}, {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:23032ae55523cc7bccb4f6a0bf368cd25ad9bcdcc1990b64a647e7bbcce9cb5b"}, {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:224e57f6eac61cc449f498cc5f0e1725ba2071a3d4f48d5d9dffba42db196438"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:cb1dac1770878ade83f2ccdf7d25e494f05c9165f5246b46a621cc849341dc01"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:3ee8a80d67a4334482d9712b8e83ca6b1d9bc7e351931252ebef5d8f7335a547"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:5e55da2c8724191e5b557f8e18943b1b4839b8efc3ef60d65985bcf6f587dd38"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:d342778ef319e1026af243ed0a07c97acf3bad33b9f29e7ae6a1f68fd083e90c"}, {file = "Brotli-1.1.0-cp37-cp37m-win32.whl", hash = "sha256:587ca6d3cef6e4e868102672d3bd9dc9698c309ba56d41c2b9c85bbb903cdb95"}, {file = "Brotli-1.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:2954c1c23f81c2eaf0b0717d9380bd348578a94161a65b3a2afc62c86467dd68"}, {file = "Brotli-1.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:efa8b278894b14d6da122a72fefcebc28445f2d3f880ac59d46c90f4c13be9a3"}, @@ -539,6 +573,10 @@ files = [ {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ab4fbee0b2d9098c74f3057b2bc055a8bd92ccf02f65944a241b4349229185a"}, {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:141bd4d93984070e097521ed07e2575b46f817d08f9fa42b16b9b5f27b5ac088"}, {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fce1473f3ccc4187f75b4690cfc922628aed4d3dd013d047f95a9b3919a86596"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d2b35ca2c7f81d173d2fadc2f4f31e88cc5f7a39ae5b6db5513cf3383b0e0ec7"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:af6fa6817889314555aede9a919612b23739395ce767fe7fcbea9a80bf140fe5"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:2feb1d960f760a575dbc5ab3b1c00504b24caaf6986e2dc2b01c09c87866a943"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:4410f84b33374409552ac9b6903507cdb31cd30d2501fc5ca13d18f73548444a"}, {file = "Brotli-1.1.0-cp38-cp38-win32.whl", hash = "sha256:db85ecf4e609a48f4b29055f1e144231b90edc90af7481aa731ba2d059226b1b"}, {file = "Brotli-1.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3d7954194c36e304e1523f55d7042c59dc53ec20dd4e9ea9d151f1b62b4415c0"}, {file = "Brotli-1.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5fb2ce4b8045c78ebbc7b8f3c15062e435d47e7393cc57c25115cfd49883747a"}, @@ -551,6 +589,10 @@ files = [ {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:949f3b7c29912693cee0afcf09acd6ebc04c57af949d9bf77d6101ebb61e388c"}, {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:89f4988c7203739d48c6f806f1e87a1d96e0806d44f0fba61dba81392c9e474d"}, {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:de6551e370ef19f8de1807d0a9aa2cdfdce2e85ce88b122fe9f6b2b076837e59"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0737ddb3068957cf1b054899b0883830bb1fec522ec76b1098f9b6e0f02d9419"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:4f3607b129417e111e30637af1b56f24f7a49e64763253bbc275c75fa887d4b2"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:6c6e0c425f22c1c719c42670d561ad682f7bfeeef918edea971a79ac5252437f"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:494994f807ba0b92092a163a0a283961369a65f6cbe01e8891132b7a320e61eb"}, {file = "Brotli-1.1.0-cp39-cp39-win32.whl", hash = "sha256:f0d8a7a6b5983c2496e364b969f0e526647a06b075d034f3297dc66f3b360c64"}, {file = "Brotli-1.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:cdad5b9014d83ca68c25d2e9444e28e967ef16e80f6b436918c700c117a85467"}, {file = "Brotli-1.1.0.tar.gz", hash = "sha256:81de08ac11bcb85841e440c13611c00b67d3bf82698314928d0b676362546724"}, @@ -879,13 +921,13 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} [[package]] name = "colorlog" -version = "6.8.2" +version = "6.9.0" description = "Add colours to the output of Python's logging module." optional = false python-versions = ">=3.6" files = [ - {file = "colorlog-6.8.2-py3-none-any.whl", hash = "sha256:4dcbb62368e2800cb3c5abd348da7e53f6c362dda502ec27c560b2e58a66bd33"}, - {file = "colorlog-6.8.2.tar.gz", hash = "sha256:3e3e079a41feb5a1b64f978b5ea4f46040a94f11f0e8bbb8261e3dbbeca64d44"}, + {file = "colorlog-6.9.0-py3-none-any.whl", hash = "sha256:5906e71acd67cb07a71e779c47c4bcb45fb8c2993eebe9e5adcd6a6f1b283eff"}, + {file = "colorlog-6.9.0.tar.gz", hash = "sha256:bfba54a1b93b94f54e1f4fe48395725a3d92fd2a4af702f6bd70946bdc0c6ac2"}, ] [package.dependencies] @@ -1412,28 +1454,6 @@ typing-extensions = ">=4.8.0" all = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "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.7)", "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)"] standard = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "jinja2 (>=2.11.2)", "python-multipart (>=0.0.7)", "uvicorn[standard] (>=0.12.0)"] -[[package]] -name = "faster-whisper" -version = "1.0.3" -description = "Faster Whisper transcription with CTranslate2" -optional = false -python-versions = ">=3.8" -files = [ - {file = "faster-whisper-1.0.3.tar.gz", hash = "sha256:1a145db86450b56aaa623c8df7d4ef86e8a1159900f60533e2890e98e8453a17"}, - {file = "faster_whisper-1.0.3-py3-none-any.whl", hash = "sha256:364d0e378ab232ed26f39656e5c98548b38045224e206b20f7d8c90e2745b9d3"}, -] - -[package.dependencies] -av = ">=11.0,<13" -ctranslate2 = ">=4.0,<5" -huggingface-hub = ">=0.13" -onnxruntime = ">=1.14,<2" -tokenizers = ">=0.13,<1" - -[package.extras] -conversion = ["transformers[torch] (>=4.23)"] -dev = ["black (==23.*)", "flake8 (==6.*)", "isort (==5.*)", "pytest (==7.*)"] - [[package]] name = "filelock" version = "3.16.1" @@ -2067,17 +2087,18 @@ typing-extensions = ">=4.7" [[package]] name = "haystack-experimental" -version = "0.2.0" +version = "0.3.0" description = "Experimental components and features for the Haystack LLM framework." optional = false python-versions = ">=3.8" files = [ - {file = "haystack_experimental-0.2.0-py3-none-any.whl", hash = "sha256:a4601d12d824a6fc2f4f6fb3583376f01aba9207c92e0d6a7d4e4f358a8964aa"}, - {file = "haystack_experimental-0.2.0.tar.gz", hash = "sha256:393c543f29c50ea21365f5d032cd8b6bca10256016a3791546f1acc7ac623b07"}, + {file = "haystack_experimental-0.3.0-py3-none-any.whl", hash = "sha256:e85e55380b3af8527c69c309fc5695b9210741619ad21d6fd3af2f7ed44575f7"}, + {file = "haystack_experimental-0.3.0.tar.gz", hash = "sha256:4838f470f5a76a293f477caeafa24882bcc2aab28328a030f5236e0f97c5db76"}, ] [package.dependencies] haystack-ai = "*" +pydantic = "*" [[package]] name = "hf-transfer" @@ -3452,13 +3473,13 @@ pyyaml = ">=5.1" [[package]] name = "mkdocs-material" -version = "9.5.42" +version = "9.5.43" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.42-py3-none-any.whl", hash = "sha256:452a7c5d21284b373f36b981a2cbebfff59263feebeede1bc28652e9c5bbe316"}, - {file = "mkdocs_material-9.5.42.tar.gz", hash = "sha256:92779b5e9b5934540c574c11647131d217dc540dce72b05feeda088c8eb1b8f2"}, + {file = "mkdocs_material-9.5.43-py3-none-any.whl", hash = "sha256:4aae0664c456fd12837a3192e0225c17960ba8bf55d7f0a7daef7e4b0b914a34"}, + {file = "mkdocs_material-9.5.43.tar.gz", hash = "sha256:83be7ff30b65a1e4930dfa4ab911e75780a3afc9583d162692e434581cb46979"}, ] [package.dependencies] @@ -3605,6 +3626,31 @@ numpy = [ [package.extras] dev = ["absl-py", "pyink", "pylint (>=2.6.0)", "pytest", "pytest-xdist"] +[[package]] +name = "mobius-faster-whisper" +version = "1.1.1" +description = "Mobius Version of Faster Whisper transcription with CTranslate2" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mobius-faster-whisper-1.1.1.tar.gz", hash = "sha256:f0e369418cddabe149d94876ef998f67c6bbd5a1dd8edc59ff37b3d2ead4c097"}, + {file = "mobius_faster_whisper-1.1.1-py3-none-any.whl", hash = "sha256:282988f9c7b683967d2a5ff8053f71af6beea0c3b0fa2c9a348300b16588f055"}, +] + +[package.dependencies] +ctranslate2 = ">=4.0,<5" +huggingface-hub = ">=0.13" +onnxruntime = ">=1.14,<2" +pyannote-audio = ">=3.1.1" +tokenizers = ">=0.13,<1" +torch = ">=2.1.1" +torchaudio = ">=2.1.2" +tqdm = "*" + +[package.extras] +conversion = ["transformers[torch] (>=4.23)"] +dev = ["black (==23.*)", "flake8 (==6.*)", "isort (==5.*)", "pytest (==7.*)"] + [[package]] name = "monotonic" version = "1.6" @@ -4295,13 +4341,13 @@ sympy = "*" [[package]] name = "openai" -version = "1.52.2" +version = "1.53.0" description = "The official Python library for the openai API" optional = false python-versions = ">=3.7.1" files = [ - {file = "openai-1.52.2-py3-none-any.whl", hash = "sha256:57e9e37bc407f39bb6ec3a27d7e8fb9728b2779936daa1fcf95df17d3edfaccc"}, - {file = "openai-1.52.2.tar.gz", hash = "sha256:87b7d0f69d85f5641678d414b7ee3082363647a5c66a462ed7f3ccb59582da0d"}, + {file = "openai-1.53.0-py3-none-any.whl", hash = "sha256:20f408c32fc5cb66e60c6882c994cdca580a5648e10045cd840734194f033418"}, + {file = "openai-1.53.0.tar.gz", hash = "sha256:be2c4e77721b166cce8130e544178b7d579f751b4b074ffbaade3854b6f85ec5"}, ] [package.dependencies] @@ -6218,13 +6264,13 @@ cffi = {version = "*", markers = "implementation_name == \"pypy\""} [[package]] name = "qdrant-client" -version = "1.12.0" +version = "1.12.1" description = "Client library for the Qdrant vector search engine" optional = false python-versions = ">=3.8" files = [ - {file = "qdrant_client-1.12.0-py3-none-any.whl", hash = "sha256:6db5ac1e244272f8b67e9dbc0da557816efef6f919cd8ee134469c751fe72c03"}, - {file = "qdrant_client-1.12.0.tar.gz", hash = "sha256:f443db39988aa6ff7c7a605770084ddaca8fdb5f8b22f77c10e661bdf0974cda"}, + {file = "qdrant_client-1.12.1-py3-none-any.whl", hash = "sha256:b2d17ce18e9e767471368380dd3bbc4a0e3a0e2061fedc9af3542084b48451e0"}, + {file = "qdrant_client-1.12.1.tar.gz", hash = "sha256:35e8e646f75b7b883b3d2d0ee4c69c5301000bba41c82aa546e985db0f1aeb72"}, ] [package.dependencies] @@ -7142,23 +7188,23 @@ files = [ [[package]] name = "setuptools" -version = "75.2.0" +version = "75.3.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-75.2.0-py3-none-any.whl", hash = "sha256:a7fcb66f68b4d9e8e66b42f9876150a3371558f98fa32222ffaa5bced76406f8"}, - {file = "setuptools-75.2.0.tar.gz", hash = "sha256:753bb6ebf1f465a1912e19ed1d41f403a79173a9acf66a42e7e6aec45c3c16ec"}, + {file = "setuptools-75.3.0-py3-none-any.whl", hash = "sha256:f2504966861356aa38616760c0f66568e535562374995367b4e69c7143cf6bcd"}, + {file = "setuptools-75.3.0.tar.gz", hash = "sha256:fba5dd4d766e97be1b1681d98712680ae8f2f26d7881245f2ce9e40714f1a686"}, ] [package.extras] check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.5.2)"] -core = ["importlib-metadata (>=6)", "importlib-resources (>=5.10.2)", "jaraco.collections", "jaraco.functools", "jaraco.text (>=3.7)", "more-itertools", "more-itertools (>=8.8)", "packaging", "packaging (>=24)", "platformdirs (>=2.6.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] +core = ["importlib-metadata (>=6)", "importlib-resources (>=5.10.2)", "jaraco.collections", "jaraco.functools", "jaraco.text (>=3.7)", "more-itertools", "more-itertools (>=8.8)", "packaging", "packaging (>=24)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] enabler = ["pytest-enabler (>=2.2)"] -test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] -type = ["importlib-metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (==1.11.*)", "pytest-mypy"] +test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test (>=5.5)", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] +type = ["importlib-metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (==1.12.*)", "pytest-mypy"] [[package]] name = "shellingham" @@ -7291,13 +7337,13 @@ test = ["pytest"] [[package]] name = "speechbrain" -version = "1.0.1" +version = "1.0.2" description = "All-in-one speech toolkit in pure Python and Pytorch" optional = false python-versions = ">=3.8" files = [ - {file = "speechbrain-1.0.1-py3-none-any.whl", hash = "sha256:a8f55cb3509062d11ce10d3748d19c959980eb7753402fcddfcd7b15d886edf4"}, - {file = "speechbrain-1.0.1.tar.gz", hash = "sha256:521202e32ba05ceb69db2908928b8eafdabd8c4674525d2734333d1c29f1ca70"}, + {file = "speechbrain-1.0.2-py3-none-any.whl", hash = "sha256:fe5328554c28bc8fe8bfef355144ee9de5cf569b9706cee2267e19c99b092578"}, + {file = "speechbrain-1.0.2.tar.gz", hash = "sha256:b293d665161d7cd34caa3ee8966acce6c43b611b7fc9cd0b24637ce871bd7a73"}, ] [package.dependencies] @@ -8024,13 +8070,13 @@ test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0, [[package]] name = "transformers" -version = "4.46.0" +version = "4.46.1" description = "State-of-the-art Machine Learning for JAX, PyTorch and TensorFlow" optional = false python-versions = ">=3.8.0" files = [ - {file = "transformers-4.46.0-py3-none-any.whl", hash = "sha256:e161268ae8bee315eb9e9b4c0b27f1bd6980f91e0fc292d75249193d339704c0"}, - {file = "transformers-4.46.0.tar.gz", hash = "sha256:3a9e2eb537094db11c3652334d281afa4766c0e5091c4dcdb454e9921bb0d2b7"}, + {file = "transformers-4.46.1-py3-none-any.whl", hash = "sha256:f77b251a648fd32e3d14b5e7e27c913b7c29154940f519e4c8c3aa6061df0f05"}, + {file = "transformers-4.46.1.tar.gz", hash = "sha256:16d79927d772edaf218820a96f9254e2211f9cd7fb3c308562d2d636c964a68c"}, ] [package.dependencies] @@ -8103,11 +8149,6 @@ files = [ {file = "triton-3.0.0-1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:34e509deb77f1c067d8640725ef00c5cbfcb2052a1a3cb6a6d343841f92624eb"}, {file = "triton-3.0.0-1-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bcbf3b1c48af6a28011a5c40a5b3b9b5330530c3827716b5fbf6d7adcc1e53e9"}, {file = "triton-3.0.0-1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6e5727202f7078c56f91ff13ad0c1abab14a0e7f2c87e91b12b6f64f3e8ae609"}, - {file = "triton-3.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39b052da883351fdf6be3d93cedae6db3b8e3988d3b09ed221bccecfa9612230"}, - {file = "triton-3.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cd34f19a8582af96e6291d4afce25dac08cb2a5d218c599163761e8e0827208e"}, - {file = "triton-3.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d5e10de8c011adeb7c878c6ce0dd6073b14367749e34467f1cff2bde1b78253"}, - {file = "triton-3.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8903767951bf86ec960b4fe4e21bc970055afc65e9d57e916d79ae3c93665e3"}, - {file = "triton-3.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41004fb1ae9a53fcb3e970745feb87f0e3c94c6ce1ba86e95fa3b8537894bef7"}, ] [package.dependencies] @@ -8820,93 +8861,93 @@ files = [ [[package]] name = "yarl" -version = "1.17.0" +version = "1.17.1" description = "Yet another URL library" optional = false python-versions = ">=3.9" files = [ - {file = "yarl-1.17.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2d8715edfe12eee6f27f32a3655f38d6c7410deb482158c0b7d4b7fad5d07628"}, - {file = "yarl-1.17.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1803bf2a7a782e02db746d8bd18f2384801bc1d108723840b25e065b116ad726"}, - {file = "yarl-1.17.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e66589110e20c2951221a938fa200c7aa134a8bdf4e4dc97e6b21539ff026d4"}, - {file = "yarl-1.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7069d411cfccf868e812497e0ec4acb7c7bf8d684e93caa6c872f1e6f5d1664d"}, - {file = "yarl-1.17.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cbf70ba16118db3e4b0da69dcde9d4d4095d383c32a15530564c283fa38a7c52"}, - {file = "yarl-1.17.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0bc53cc349675b32ead83339a8de79eaf13b88f2669c09d4962322bb0f064cbc"}, - {file = "yarl-1.17.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d6aa18a402d1c80193ce97c8729871f17fd3e822037fbd7d9b719864018df746"}, - {file = "yarl-1.17.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d89c5bc701861cfab357aa0cd039bc905fe919997b8c312b4b0c358619c38d4d"}, - {file = "yarl-1.17.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b728bdf38ca58f2da1d583e4af4ba7d4cd1a58b31a363a3137a8159395e7ecc7"}, - {file = "yarl-1.17.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:5542e57dc15d5473da5a39fbde14684b0cc4301412ee53cbab677925e8497c11"}, - {file = "yarl-1.17.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e564b57e5009fb150cb513804d7e9e9912fee2e48835638f4f47977f88b4a39c"}, - {file = "yarl-1.17.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:eb3c4cff524b4c1c1dba3a6da905edb1dfd2baf6f55f18a58914bbb2d26b59e1"}, - {file = "yarl-1.17.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:05e13f389038842da930d439fbed63bdce3f7644902714cb68cf527c971af804"}, - {file = "yarl-1.17.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:153c38ee2b4abba136385af4467459c62d50f2a3f4bde38c7b99d43a20c143ef"}, - {file = "yarl-1.17.0-cp310-cp310-win32.whl", hash = "sha256:4065b4259d1ae6f70fd9708ffd61e1c9c27516f5b4fae273c41028afcbe3a094"}, - {file = "yarl-1.17.0-cp310-cp310-win_amd64.whl", hash = "sha256:abf366391a02a8335c5c26163b5fe6f514cc1d79e74d8bf3ffab13572282368e"}, - {file = "yarl-1.17.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:19a4fe0279626c6295c5b0c8c2bb7228319d2e985883621a6e87b344062d8135"}, - {file = "yarl-1.17.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cadd0113f4db3c6b56868d6a19ca6286f5ccfa7bc08c27982cf92e5ed31b489a"}, - {file = "yarl-1.17.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:60d6693eef43215b1ccfb1df3f6eae8db30a9ff1e7989fb6b2a6f0b468930ee8"}, - {file = "yarl-1.17.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bb8bf3843e1fa8cf3fe77813c512818e57368afab7ebe9ef02446fe1a10b492"}, - {file = "yarl-1.17.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d2a5b35fd1d8d90443e061d0c8669ac7600eec5c14c4a51f619e9e105b136715"}, - {file = "yarl-1.17.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c5bf17b32f392df20ab5c3a69d37b26d10efaa018b4f4e5643c7520d8eee7ac7"}, - {file = "yarl-1.17.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48f51b529b958cd06e78158ff297a8bf57b4021243c179ee03695b5dbf9cb6e1"}, - {file = "yarl-1.17.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5fcaa06bf788e19f913d315d9c99a69e196a40277dc2c23741a1d08c93f4d430"}, - {file = "yarl-1.17.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:32f3ee19ff0f18a7a522d44e869e1ebc8218ad3ae4ebb7020445f59b4bbe5897"}, - {file = "yarl-1.17.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:a4fb69a81ae2ec2b609574ae35420cf5647d227e4d0475c16aa861dd24e840b0"}, - {file = "yarl-1.17.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:7bacc8b77670322132a1b2522c50a1f62991e2f95591977455fd9a398b4e678d"}, - {file = "yarl-1.17.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:437bf6eb47a2d20baaf7f6739895cb049e56896a5ffdea61a4b25da781966e8b"}, - {file = "yarl-1.17.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:30534a03c87484092080e3b6e789140bd277e40f453358900ad1f0f2e61fc8ec"}, - {file = "yarl-1.17.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b30df4ff98703649915144be6f0df3b16fd4870ac38a09c56d5d9e54ff2d5f96"}, - {file = "yarl-1.17.0-cp311-cp311-win32.whl", hash = "sha256:263b487246858e874ab53e148e2a9a0de8465341b607678106829a81d81418c6"}, - {file = "yarl-1.17.0-cp311-cp311-win_amd64.whl", hash = "sha256:07055a9e8b647a362e7d4810fe99d8f98421575e7d2eede32e008c89a65a17bd"}, - {file = "yarl-1.17.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:84095ab25ba69a8fa3fb4936e14df631b8a71193fe18bd38be7ecbe34d0f5512"}, - {file = "yarl-1.17.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:02608fb3f6df87039212fc746017455ccc2a5fc96555ee247c45d1e9f21f1d7b"}, - {file = "yarl-1.17.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:13468d291fe8c12162b7cf2cdb406fe85881c53c9e03053ecb8c5d3523822cd9"}, - {file = "yarl-1.17.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8da3f8f368fb7e2f052fded06d5672260c50b5472c956a5f1bd7bf474ae504ab"}, - {file = "yarl-1.17.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ec0507ab6523980bed050137007c76883d941b519aca0e26d4c1ec1f297dd646"}, - {file = "yarl-1.17.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08fc76df7fd8360e9ff30e6ccc3ee85b8dbd6ed5d3a295e6ec62bcae7601b932"}, - {file = "yarl-1.17.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d522f390686acb6bab2b917dd9ca06740c5080cd2eaa5aef8827b97e967319d"}, - {file = "yarl-1.17.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:147c527a80bb45b3dcd6e63401af8ac574125d8d120e6afe9901049286ff64ef"}, - {file = "yarl-1.17.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:24cf43bcd17a0a1f72284e47774f9c60e0bf0d2484d5851f4ddf24ded49f33c6"}, - {file = "yarl-1.17.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:c28a44b9e0fba49c3857360e7ad1473fc18bc7f6659ca08ed4f4f2b9a52c75fa"}, - {file = "yarl-1.17.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:350cacb2d589bc07d230eb995d88fcc646caad50a71ed2d86df533a465a4e6e1"}, - {file = "yarl-1.17.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:fd1ab1373274dea1c6448aee420d7b38af163b5c4732057cd7ee9f5454efc8b1"}, - {file = "yarl-1.17.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:4934e0f96dadc567edc76d9c08181633c89c908ab5a3b8f698560124167d9488"}, - {file = "yarl-1.17.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8d0a278170d75c88e435a1ce76557af6758bfebc338435b2eba959df2552163e"}, - {file = "yarl-1.17.0-cp312-cp312-win32.whl", hash = "sha256:61584f33196575a08785bb56db6b453682c88f009cd9c6f338a10f6737ce419f"}, - {file = "yarl-1.17.0-cp312-cp312-win_amd64.whl", hash = "sha256:9987a439ad33a7712bd5bbd073f09ad10d38640425fa498ecc99d8aa064f8fc4"}, - {file = "yarl-1.17.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8deda7b8eb15a52db94c2014acdc7bdd14cb59ec4b82ac65d2ad16dc234a109e"}, - {file = "yarl-1.17.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:56294218b348dcbd3d7fce0ffd79dd0b6c356cb2a813a1181af730b7c40de9e7"}, - {file = "yarl-1.17.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1fab91292f51c884b290ebec0b309a64a5318860ccda0c4940e740425a67b6b7"}, - {file = "yarl-1.17.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cf93fa61ff4d9c7d40482ce1a2c9916ca435e34a1b8451e17f295781ccc034f"}, - {file = "yarl-1.17.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:261be774a0d71908c8830c33bacc89eef15c198433a8cc73767c10eeeb35a7d0"}, - {file = "yarl-1.17.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:deec9693b67f6af856a733b8a3e465553ef09e5e8ead792f52c25b699b8f9e6e"}, - {file = "yarl-1.17.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c804b07622ba50a765ca7fb8145512836ab65956de01307541def869e4a456c9"}, - {file = "yarl-1.17.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d013a7c9574e98c14831a8f22d27277688ec3b2741d0188ac01a910b009987a"}, - {file = "yarl-1.17.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e2cfcba719bd494c7413dcf0caafb51772dec168c7c946e094f710d6aa70494e"}, - {file = "yarl-1.17.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:c068aba9fc5b94dfae8ea1cedcbf3041cd4c64644021362ffb750f79837e881f"}, - {file = "yarl-1.17.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:3616df510ffac0df3c9fa851a40b76087c6c89cbcea2de33a835fc80f9faac24"}, - {file = "yarl-1.17.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:755d6176b442fba9928a4df787591a6a3d62d4969f05c406cad83d296c5d4e05"}, - {file = "yarl-1.17.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:c18f6e708d1cf9ff5b1af026e697ac73bea9cb70ee26a2b045b112548579bed2"}, - {file = "yarl-1.17.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5b937c216b6dee8b858c6afea958de03c5ff28406257d22b55c24962a2baf6fd"}, - {file = "yarl-1.17.0-cp313-cp313-win32.whl", hash = "sha256:d0131b14cb545c1a7bd98f4565a3e9bdf25a1bd65c83fc156ee5d8a8499ec4a3"}, - {file = "yarl-1.17.0-cp313-cp313-win_amd64.whl", hash = "sha256:01c96efa4313c01329e88b7e9e9e1b2fc671580270ddefdd41129fa8d0db7696"}, - {file = "yarl-1.17.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0d44f67e193f0a7acdf552ecb4d1956a3a276c68e7952471add9f93093d1c30d"}, - {file = "yarl-1.17.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:16ea0aa5f890cdcb7ae700dffa0397ed6c280840f637cd07bffcbe4b8d68b985"}, - {file = "yarl-1.17.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cf5469dc7dcfa65edf5cc3a6add9f84c5529c6b556729b098e81a09a92e60e51"}, - {file = "yarl-1.17.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e662bf2f6e90b73cf2095f844e2bc1fda39826472a2aa1959258c3f2a8500a2f"}, - {file = "yarl-1.17.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8260e88f1446904ba20b558fa8ce5d0ab9102747238e82343e46d056d7304d7e"}, - {file = "yarl-1.17.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5dc16477a4a2c71e64c5d3d15d7ae3d3a6bb1e8b955288a9f73c60d2a391282f"}, - {file = "yarl-1.17.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46027e326cecd55e5950184ec9d86c803f4f6fe4ba6af9944a0e537d643cdbe0"}, - {file = "yarl-1.17.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fc95e46c92a2b6f22e70afe07e34dbc03a4acd07d820204a6938798b16f4014f"}, - {file = "yarl-1.17.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:16ca76c7ac9515320cd09d6cc083d8d13d1803f6ebe212b06ea2505fd66ecff8"}, - {file = "yarl-1.17.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:eb1a5b97388f2613f9305d78a3473cdf8d80c7034e554d8199d96dcf80c62ac4"}, - {file = "yarl-1.17.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:41fd5498975418cdc34944060b8fbeec0d48b2741068077222564bea68daf5a6"}, - {file = "yarl-1.17.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:146ca582ed04a5664ad04b0e0603934281eaab5c0115a5a46cce0b3c061a56a1"}, - {file = "yarl-1.17.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:6abb8c06107dbec97481b2392dafc41aac091a5d162edf6ed7d624fe7da0587a"}, - {file = "yarl-1.17.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:4d14be4613dd4f96c25feb4bd8c0d8ce0f529ab0ae555a17df5789e69d8ec0c5"}, - {file = "yarl-1.17.0-cp39-cp39-win32.whl", hash = "sha256:174d6a6cad1068f7850702aad0c7b1bca03bcac199ca6026f84531335dfc2646"}, - {file = "yarl-1.17.0-cp39-cp39-win_amd64.whl", hash = "sha256:6af417ca2c7349b101d3fd557ad96b4cd439fdb6ab0d288e3f64a068eea394d0"}, - {file = "yarl-1.17.0-py3-none-any.whl", hash = "sha256:62dd42bb0e49423f4dd58836a04fcf09c80237836796025211bbe913f1524993"}, - {file = "yarl-1.17.0.tar.gz", hash = "sha256:d3f13583f378930377e02002b4085a3d025b00402d5a80911726d43a67911cd9"}, + {file = "yarl-1.17.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b1794853124e2f663f0ea54efb0340b457f08d40a1cef78edfa086576179c91"}, + {file = "yarl-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fbea1751729afe607d84acfd01efd95e3b31db148a181a441984ce9b3d3469da"}, + {file = "yarl-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8ee427208c675f1b6e344a1f89376a9613fc30b52646a04ac0c1f6587c7e46ec"}, + {file = "yarl-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b74ff4767d3ef47ffe0cd1d89379dc4d828d4873e5528976ced3b44fe5b0a21"}, + {file = "yarl-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:62a91aefff3d11bf60e5956d340eb507a983a7ec802b19072bb989ce120cd948"}, + {file = "yarl-1.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:846dd2e1243407133d3195d2d7e4ceefcaa5f5bf7278f0a9bda00967e6326b04"}, + {file = "yarl-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e844be8d536afa129366d9af76ed7cb8dfefec99f5f1c9e4f8ae542279a6dc3"}, + {file = "yarl-1.17.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cc7c92c1baa629cb03ecb0c3d12564f172218fb1739f54bf5f3881844daadc6d"}, + {file = "yarl-1.17.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ae3476e934b9d714aa8000d2e4c01eb2590eee10b9d8cd03e7983ad65dfbfcba"}, + {file = "yarl-1.17.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:c7e177c619342e407415d4f35dec63d2d134d951e24b5166afcdfd1362828e17"}, + {file = "yarl-1.17.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:64cc6e97f14cf8a275d79c5002281f3040c12e2e4220623b5759ea7f9868d6a5"}, + {file = "yarl-1.17.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:84c063af19ef5130084db70ada40ce63a84f6c1ef4d3dbc34e5e8c4febb20822"}, + {file = "yarl-1.17.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:482c122b72e3c5ec98f11457aeb436ae4aecca75de19b3d1de7cf88bc40db82f"}, + {file = "yarl-1.17.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:380e6c38ef692b8fd5a0f6d1fa8774d81ebc08cfbd624b1bca62a4d4af2f9931"}, + {file = "yarl-1.17.1-cp310-cp310-win32.whl", hash = "sha256:16bca6678a83657dd48df84b51bd56a6c6bd401853aef6d09dc2506a78484c7b"}, + {file = "yarl-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:561c87fea99545ef7d692403c110b2f99dced6dff93056d6e04384ad3bc46243"}, + {file = "yarl-1.17.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:cbad927ea8ed814622305d842c93412cb47bd39a496ed0f96bfd42b922b4a217"}, + {file = "yarl-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fca4b4307ebe9c3ec77a084da3a9d1999d164693d16492ca2b64594340999988"}, + {file = "yarl-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ff5c6771c7e3511a06555afa317879b7db8d640137ba55d6ab0d0c50425cab75"}, + {file = "yarl-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b29beab10211a746f9846baa39275e80034e065460d99eb51e45c9a9495bcca"}, + {file = "yarl-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a52a1ffdd824fb1835272e125385c32fd8b17fbdefeedcb4d543cc23b332d74"}, + {file = "yarl-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:58c8e9620eb82a189c6c40cb6b59b4e35b2ee68b1f2afa6597732a2b467d7e8f"}, + {file = "yarl-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d216e5d9b8749563c7f2c6f7a0831057ec844c68b4c11cb10fc62d4fd373c26d"}, + {file = "yarl-1.17.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:881764d610e3269964fc4bb3c19bb6fce55422828e152b885609ec176b41cf11"}, + {file = "yarl-1.17.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8c79e9d7e3d8a32d4824250a9c6401194fb4c2ad9a0cec8f6a96e09a582c2cc0"}, + {file = "yarl-1.17.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:299f11b44d8d3a588234adbe01112126010bd96d9139c3ba7b3badd9829261c3"}, + {file = "yarl-1.17.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:cc7d768260f4ba4ea01741c1b5fe3d3a6c70eb91c87f4c8761bbcce5181beafe"}, + {file = "yarl-1.17.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:de599af166970d6a61accde358ec9ded821234cbbc8c6413acfec06056b8e860"}, + {file = "yarl-1.17.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:2b24ec55fad43e476905eceaf14f41f6478780b870eda5d08b4d6de9a60b65b4"}, + {file = "yarl-1.17.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9fb815155aac6bfa8d86184079652c9715c812d506b22cfa369196ef4e99d1b4"}, + {file = "yarl-1.17.1-cp311-cp311-win32.whl", hash = "sha256:7615058aabad54416ddac99ade09a5510cf77039a3b903e94e8922f25ed203d7"}, + {file = "yarl-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:14bc88baa44e1f84164a392827b5defb4fa8e56b93fecac3d15315e7c8e5d8b3"}, + {file = "yarl-1.17.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:327828786da2006085a4d1feb2594de6f6d26f8af48b81eb1ae950c788d97f61"}, + {file = "yarl-1.17.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cc353841428d56b683a123a813e6a686e07026d6b1c5757970a877195f880c2d"}, + {file = "yarl-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c73df5b6e8fabe2ddb74876fb82d9dd44cbace0ca12e8861ce9155ad3c886139"}, + {file = "yarl-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0bdff5e0995522706c53078f531fb586f56de9c4c81c243865dd5c66c132c3b5"}, + {file = "yarl-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:06157fb3c58f2736a5e47c8fcbe1afc8b5de6fb28b14d25574af9e62150fcaac"}, + {file = "yarl-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1654ec814b18be1af2c857aa9000de7a601400bd4c9ca24629b18486c2e35463"}, + {file = "yarl-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f6595c852ca544aaeeb32d357e62c9c780eac69dcd34e40cae7b55bc4fb1147"}, + {file = "yarl-1.17.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:459e81c2fb920b5f5df744262d1498ec2c8081acdcfe18181da44c50f51312f7"}, + {file = "yarl-1.17.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7e48cdb8226644e2fbd0bdb0a0f87906a3db07087f4de77a1b1b1ccfd9e93685"}, + {file = "yarl-1.17.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:d9b6b28a57feb51605d6ae5e61a9044a31742db557a3b851a74c13bc61de5172"}, + {file = "yarl-1.17.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e594b22688d5747b06e957f1ef822060cb5cb35b493066e33ceac0cf882188b7"}, + {file = "yarl-1.17.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5f236cb5999ccd23a0ab1bd219cfe0ee3e1c1b65aaf6dd3320e972f7ec3a39da"}, + {file = "yarl-1.17.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:a2a64e62c7a0edd07c1c917b0586655f3362d2c2d37d474db1a509efb96fea1c"}, + {file = "yarl-1.17.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d0eea830b591dbc68e030c86a9569826145df485b2b4554874b07fea1275a199"}, + {file = "yarl-1.17.1-cp312-cp312-win32.whl", hash = "sha256:46ddf6e0b975cd680eb83318aa1d321cb2bf8d288d50f1754526230fcf59ba96"}, + {file = "yarl-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:117ed8b3732528a1e41af3aa6d4e08483c2f0f2e3d3d7dca7cf538b3516d93df"}, + {file = "yarl-1.17.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:5d1d42556b063d579cae59e37a38c61f4402b47d70c29f0ef15cee1acaa64488"}, + {file = "yarl-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c0167540094838ee9093ef6cc2c69d0074bbf84a432b4995835e8e5a0d984374"}, + {file = "yarl-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2f0a6423295a0d282d00e8701fe763eeefba8037e984ad5de44aa349002562ac"}, + {file = "yarl-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5b078134f48552c4d9527db2f7da0b5359abd49393cdf9794017baec7506170"}, + {file = "yarl-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d401f07261dc5aa36c2e4efc308548f6ae943bfff20fcadb0a07517a26b196d8"}, + {file = "yarl-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b5f1ac7359e17efe0b6e5fec21de34145caef22b260e978336f325d5c84e6938"}, + {file = "yarl-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f63d176a81555984e91f2c84c2a574a61cab7111cc907e176f0f01538e9ff6e"}, + {file = "yarl-1.17.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e275792097c9f7e80741c36de3b61917aebecc08a67ae62899b074566ff8556"}, + {file = "yarl-1.17.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:81713b70bea5c1386dc2f32a8f0dab4148a2928c7495c808c541ee0aae614d67"}, + {file = "yarl-1.17.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:aa46dce75078fceaf7cecac5817422febb4355fbdda440db55206e3bd288cfb8"}, + {file = "yarl-1.17.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:1ce36ded585f45b1e9bb36d0ae94765c6608b43bd2e7f5f88079f7a85c61a4d3"}, + {file = "yarl-1.17.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:2d374d70fdc36f5863b84e54775452f68639bc862918602d028f89310a034ab0"}, + {file = "yarl-1.17.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:2d9f0606baaec5dd54cb99667fcf85183a7477f3766fbddbe3f385e7fc253299"}, + {file = "yarl-1.17.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b0341e6d9a0c0e3cdc65857ef518bb05b410dbd70d749a0d33ac0f39e81a4258"}, + {file = "yarl-1.17.1-cp313-cp313-win32.whl", hash = "sha256:2e7ba4c9377e48fb7b20dedbd473cbcbc13e72e1826917c185157a137dac9df2"}, + {file = "yarl-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:949681f68e0e3c25377462be4b658500e85ca24323d9619fdc41f68d46a1ffda"}, + {file = "yarl-1.17.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8994b29c462de9a8fce2d591028b986dbbe1b32f3ad600b2d3e1c482c93abad6"}, + {file = "yarl-1.17.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f9cbfbc5faca235fbdf531b93aa0f9f005ec7d267d9d738761a4d42b744ea159"}, + {file = "yarl-1.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b40d1bf6e6f74f7c0a567a9e5e778bbd4699d1d3d2c0fe46f4b717eef9e96b95"}, + {file = "yarl-1.17.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f5efe0661b9fcd6246f27957f6ae1c0eb29bc60552820f01e970b4996e016004"}, + {file = "yarl-1.17.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b5c4804e4039f487e942c13381e6c27b4b4e66066d94ef1fae3f6ba8b953f383"}, + {file = "yarl-1.17.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b5d6a6c9602fd4598fa07e0389e19fe199ae96449008d8304bf5d47cb745462e"}, + {file = "yarl-1.17.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f4c9156c4d1eb490fe374fb294deeb7bc7eaccda50e23775b2354b6a6739934"}, + {file = "yarl-1.17.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6324274b4e0e2fa1b3eccb25997b1c9ed134ff61d296448ab8269f5ac068c4c"}, + {file = "yarl-1.17.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:d8a8b74d843c2638f3864a17d97a4acda58e40d3e44b6303b8cc3d3c44ae2d29"}, + {file = "yarl-1.17.1-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:7fac95714b09da9278a0b52e492466f773cfe37651cf467a83a1b659be24bf71"}, + {file = "yarl-1.17.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:c180ac742a083e109c1a18151f4dd8675f32679985a1c750d2ff806796165b55"}, + {file = "yarl-1.17.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:578d00c9b7fccfa1745a44f4eddfdc99d723d157dad26764538fbdda37209857"}, + {file = "yarl-1.17.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:1a3b91c44efa29e6c8ef8a9a2b583347998e2ba52c5d8280dbd5919c02dfc3b5"}, + {file = "yarl-1.17.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a7ac5b4984c468ce4f4a553df281450df0a34aefae02e58d77a0847be8d1e11f"}, + {file = "yarl-1.17.1-cp39-cp39-win32.whl", hash = "sha256:7294e38f9aa2e9f05f765b28ffdc5d81378508ce6dadbe93f6d464a8c9594473"}, + {file = "yarl-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:eb6dce402734575e1a8cc0bb1509afca508a400a57ce13d306ea2c663bad1138"}, + {file = "yarl-1.17.1-py3-none-any.whl", hash = "sha256:f1790a4b1e8e8e028c391175433b9c8122c39b46e1663228158e61e6f915bf06"}, + {file = "yarl-1.17.1.tar.gz", hash = "sha256:067a63fcfda82da6b198fa73079b1ca40b7c9b7994995b6ee38acda728b64d47"}, ] [package.dependencies] @@ -8966,4 +9007,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.0" python-versions = ">=3.10,<4.0" -content-hash = "ae7be5b51b483815408f4ca9b1b15e6687768f5f26490791e7da47a13572c49e" +content-hash = "75b2b7e4c2c7c7f34fc97268eae9ce457cc220f6303aa4bed449d761653dda25" diff --git a/pyproject.toml b/pyproject.toml index aec1795f..507d0d35 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,9 +30,9 @@ bitblas = "^0.0.1.dev15" bitsandbytes = "^0.42.0" decord = "^0.6.0" fastapi = ">=0.111.0" -faster-whisper = ">=1.0.1" hf-transfer = "^0.1.6" hqq = "^0.2.2" +mobius-faster-whisper = ">=1.1.1" numpy = ">=1.17,<2" opencv-python-headless = "^4.8.1.78" orjson = "^3.10.3" From 528d9662d2e80756b5c59887c84ee4f01ab75329 Mon Sep 17 00:00:00 2001 From: jiltseb Date: Fri, 1 Nov 2024 08:52:01 +0000 Subject: [PATCH 2/8] adding batched inference --- aana/deployments/whisper_deployment.py | 154 ++++++++++--------------- 1 file changed, 61 insertions(+), 93 deletions(-) diff --git a/aana/deployments/whisper_deployment.py b/aana/deployments/whisper_deployment.py index 24d67300..6bd31a76 100644 --- a/aana/deployments/whisper_deployment.py +++ b/aana/deployments/whisper_deployment.py @@ -3,7 +3,7 @@ from typing import Any, cast import torch -from faster_whisper import WhisperModel +from faster_whisper import BatchedInferencePipeline, WhisperModel from pydantic import BaseModel, ConfigDict, Field from ray import serve from typing_extensions import TypedDict @@ -15,9 +15,8 @@ ) from aana.core.models.audio import Audio from aana.core.models.base import pydantic_protected_fields -from aana.core.models.whisper import ( - WhisperParams, -) +from aana.core.models.vad import VadSegment +from aana.core.models.whisper import BatchedWhisperParams, WhisperParams from aana.deployments.base_deployment import BaseDeployment, exception_handler from aana.exceptions.runtime import InferenceException @@ -149,6 +148,9 @@ async def apply_config(self, config: dict[str, Any]): self.model = WhisperModel( self.model_size, device=self.device, compute_type=self.compute_type ) + self.batched_model = BatchedInferencePipeline( + model=self.model, + ) @exception_handler async def transcribe( @@ -282,92 +284,58 @@ async def transcribe_batch( segments=segments, transcription_info=infos, transcription=transcriptions ) - # TODO: Update once batched whisper PR is merged - # async def transcribe_in_chunks( - # self, - # audio: Audio, - # segments: list[VadSegment], - # batch_size: int = 16, - # params: BatchedWhisperParams | None = None, - # ) -> AsyncGenerator[WhisperOutput, None]: - # """Transcribe a single audio by segmenting it into chunks (4x faster) in streaming mode. - - # Args: - # audio (Audio): The audio to transcribe. - # segments (list[VadSegment]): List of segments to guide batching the audio data. - # batch_size (int): Maximum batch size for the batched inference. - # params (WhisperParams): The parameters for the whisper model. - - # Yields: - # WhisperOutput: The transcription output as a dictionary: - # segments (list[AsrSegment]): The ASR segments. - # transcription_info (AsrTranscriptionInfo): The ASR transcription info. - # transcription (AsrTranscription): The ASR transcription. - - # Raises: - # InferenceException: If the inference fails. - # """ - # try: - # from faster_whisper import BatchedInferencePipeline - # except ImportError as e: - # raise ImportError( - # "Batched version of whisper is not available. " - # "Install faster-whisper from https://github.com/mobiusml/faster-whisper" - # ) from e - - # if not params: - # params = BatchedWhisperParams() - - # if params.language is not None: - # tokenizer = Tokenizer( - # self.model.hf_tokenizer, - # self.model.model.is_multilingual, - # task="transcribe", - # language=params.language, - # ) - # else: - # # If no language is specified, language will be first detected for each audio. - # tokenizer = None - - # self.batched_model = BatchedInferencePipeline( - # model=self.model, - # use_vad_model=False, - # options=None, - # tokenizer=tokenizer, - # language=params.language, - # ) - - # audio_array = audio.get_numpy() - - # vad_input = [seg.to_whisper_dict() for seg in segments] - # if not vad_input: - # # For silent audios/no audio tracks, return empty output with language as silence - # yield WhisperOutput( - # segments=[], - # transcription_info=AsrTranscriptionInfo( - # language="silence", language_confidence=1.0 - # ), - # transcription=AsrTranscription(text=""), - # ) - # else: - # try: - # result = self.batched_model.transcribe( - # audio_array, - # vad_segments=vad_input, - # batch_size=batch_size, - # **params.model_dump(), - # ) - # except Exception as e: - # raise InferenceException(self.model_name) from e - - # for count, (segment, info) in enumerate(result): - # if count == 0: - # asr_transcription_info = AsrTranscriptionInfo.from_whisper(info) - # asr_segments = [AsrSegment.from_whisper(segment)] - # asr_transcription = AsrTranscription(text=segment.text) - - # yield WhisperOutput( - # segments=asr_segments, - # transcription_info=asr_transcription_info, - # transcription=asr_transcription, - # ) + @exception_handler + async def transcribe_in_chunks( + self, + audio: Audio, + vad_segments: list[VadSegment] | None = None, + batch_size: int = 16, + params: BatchedWhisperParams | None = None, + ) -> AsyncGenerator[WhisperOutput, None]: + """Transcribe a single audio by segmenting it into chunks (4x faster) in streaming mode. + Args: + audio (Audio): The audio to transcribe. + vad_segments (list[VadSegment]| None): List of vad segments to guide batching of the audio data. + batch_size (int): Maximum batch size for the batched inference. + params (BatchedWhisperParams | None): The parameters for the batched inference with whisper model. + Yields: + WhisperOutput: The transcription output as a dictionary: + segments (list[AsrSegment]): The ASR segments. + transcription_info (AsrTranscriptionInfo): The ASR transcription info. + transcription (AsrTranscription): The ASR transcription. + Raises: + InferenceException: If the inference fails. + """ + if not params: + params = BatchedWhisperParams() + audio_array = audio.get_numpy() + if vad_segments: + vad_input = [seg.to_whisper_dict() for seg in vad_segments] + if not audio_array.any(): + # For silent audios/no audio tracks, return empty output with language as silence + yield WhisperOutput( + segments=[], + transcription_info=AsrTranscriptionInfo( + language="silence", language_confidence=1.0 + ), + transcription=AsrTranscription(text=""), + ) + else: + try: + segments, info = self.batched_model.transcribe( + audio_array, + vad_segments=vad_input if vad_segments else None, + batch_size=batch_size, + **params.model_dump(), + ) + except Exception as e: + raise InferenceException(self.model_name) from e + asr_transcription_info = AsrTranscriptionInfo.from_whisper(info) + for segment in segments: + asr_segments = [AsrSegment.from_whisper(segment)] + asr_transcription = AsrTranscription(text=segment.text) + yield WhisperOutput( + segments=asr_segments, + transcription_info=asr_transcription_info, + transcription=asr_transcription, + ) From 4cd0490cba948de187ecbc50b95e5a5b80cbb80c Mon Sep 17 00:00:00 2001 From: jiltseb Date: Fri, 1 Nov 2024 08:52:18 +0000 Subject: [PATCH 3/8] tests for batched whisper inference --- .../deployments/test_whisper_deployment.py | 108 +++++++++--------- 1 file changed, 57 insertions(+), 51 deletions(-) diff --git a/aana/tests/deployments/test_whisper_deployment.py b/aana/tests/deployments/test_whisper_deployment.py index 824157e4..ad00bfd8 100644 --- a/aana/tests/deployments/test_whisper_deployment.py +++ b/aana/tests/deployments/test_whisper_deployment.py @@ -1,12 +1,15 @@ # ruff: noqa: S101 +import json from collections import defaultdict from importlib import resources +from pathlib import Path import pytest from aana.core.models.audio import Audio from aana.core.models.base import pydantic_to_dict -from aana.core.models.whisper import WhisperParams +from aana.core.models.vad import VadSegment +from aana.core.models.whisper import BatchedWhisperParams, WhisperParams from aana.deployments.aana_deployment_handle import AanaDeploymentHandle from aana.deployments.whisper_deployment import ( WhisperComputeType, @@ -99,53 +102,56 @@ async def test_transcribe(self, setup_deployment, audio_file): verify_deployment_results(expected_output_path, grouped_dict) - # Test transcribe_batch method - - # Test transcribe_in_chunks method: Note that the expected asr output is different - # TODO: Update once batched whisper PR is merged - # expected_batched_output_path = resources.path( - # f"aana.tests.files.expected.whisper.{model_size}", - # f"{audio_file_name}_batched.json", - # ) - # assert ( - # expected_batched_output_path.exists() - # ), f"Expected output not found: {expected_batched_output_path}" - # with Path(expected_batched_output_path) as path, path.open() as f: - # expected_output_batched = json.load(f) - - # # Get expected vad segments - # vad_path = resources.path( - # "aana.tests.files.expected.vad", f"{audio_file_name}_vad.json" - # ) - # assert vad_path.exists(), f"vad expected predictions not found: {vad_path}" - - # with Path(vad_path) as path, path.open() as f: - # expected_output_vad = json.load(f) - - # final_input = [ - # VadSegment(time_interval=seg["time_interval"], segments=seg["segments"]) - # for seg in expected_output_vad["segments"] - # ] - - # batched_stream = handle.options(stream=True).transcribe_in_chunks.remote( - # audio=audio, - # segments=final_input, - # batch_size=16, - # params=BatchedWhisperParams(temperature=0.0), - # ) - - # # Combine individual segments and compare with the final dict - # transcript = "" - # grouped_dict = defaultdict(list) - # async for chunk in batched_stream: - # output = pydantic_to_dict(chunk) - # transcript += output["transcription"]["text"] - # grouped_dict["segments"].extend(output.get("segments", [])) - - # grouped_dict["transcription"] = {"text": transcript} - # grouped_dict["transcription_info"] = output.get("transcription_info") - - # compare_transcriptions( - # expected_output_batched, - # dict(grouped_dict), - # ) + # Test transcribe_in_chunks method: Note that the expected asr output is different + expected_output_path = ( + resources.files("aana.tests.files.expected") + / "whisper" + / f"{deployment_name}_{audio_file}_batched.json" + ) + audio_file_name = audio_file.removesuffix(".wav") + # Get expected vad segments + vad_path = ( + resources.files("aana.tests.files.expected.vad") / f"{audio_file_name}.json" + ) + + assert vad_path.exists(), f"vad expected predictions not found: {vad_path}" + with Path(vad_path) as path, path.open() as f: + expected_output_vad = json.load(f) + vad_input = [ + VadSegment(time_interval=seg["time_interval"], segments=seg["segments"]) + for seg in expected_output_vad["segments"] + ] + + batched_stream = handle.transcribe_in_chunks( + audio=audio, + vad_segments=vad_input, + batch_size=16, + params=BatchedWhisperParams(temperature=0.0), + ) + # Combine individual segments and compare with the final dict + grouped_dict = defaultdict(list) + transcript = "" + async for chunk in batched_stream: + output = pydantic_to_dict(chunk) + transcript += output["transcription"]["text"] + grouped_dict["segments"].extend(output.get("segments", [])) + grouped_dict["transcription"] = {"text": transcript} + grouped_dict["transcription_info"] = output.get("transcription_info") + verify_deployment_results(expected_output_path, grouped_dict) + + # Test with whisper internal VAD + batched_stream = handle.transcribe_in_chunks( + audio=audio, + batch_size=16, + params=BatchedWhisperParams(temperature=0.0), + ) + # Combine individual segments and compare with the final dict + grouped_dict = defaultdict(list) + transcript = "" + async for chunk in batched_stream: + output = pydantic_to_dict(chunk) + transcript += output["transcription"]["text"] + grouped_dict["segments"].extend(output.get("segments", [])) + grouped_dict["transcription"] = {"text": transcript} + grouped_dict["transcription_info"] = output.get("transcription_info") + verify_deployment_results(expected_output_path, grouped_dict) From 206837a6d4ab3281ba1df78446cb0185c5f76a01 Mon Sep 17 00:00:00 2001 From: jiltseb Date: Fri, 1 Nov 2024 08:53:06 +0000 Subject: [PATCH 4/8] add batched whisper inference test files --- ...isper_medium_physicsworks.wav_batched.json | 99 +++++++++++++++++++ .../whisper_medium_squirrel.wav_batched.json | 10 ++ ...whisper_tiny_physicsworks.wav_batched.json | 99 +++++++++++++++++++ .../whisper_tiny_squirrel.wav_batched.json | 10 ++ ...hisper_turbo_physicsworks.wav_batched.json | 99 +++++++++++++++++++ .../whisper_turbo_squirrel.wav_batched.json | 10 ++ 6 files changed, 327 insertions(+) create mode 100644 aana/tests/files/expected/whisper/whisper_medium_physicsworks.wav_batched.json create mode 100644 aana/tests/files/expected/whisper/whisper_medium_squirrel.wav_batched.json create mode 100644 aana/tests/files/expected/whisper/whisper_tiny_physicsworks.wav_batched.json create mode 100644 aana/tests/files/expected/whisper/whisper_tiny_squirrel.wav_batched.json create mode 100644 aana/tests/files/expected/whisper/whisper_turbo_physicsworks.wav_batched.json create mode 100644 aana/tests/files/expected/whisper/whisper_turbo_squirrel.wav_batched.json diff --git a/aana/tests/files/expected/whisper/whisper_medium_physicsworks.wav_batched.json b/aana/tests/files/expected/whisper/whisper_medium_physicsworks.wav_batched.json new file mode 100644 index 00000000..66238780 --- /dev/null +++ b/aana/tests/files/expected/whisper/whisper_medium_physicsworks.wav_batched.json @@ -0,0 +1,99 @@ +{ + "segments": [ + { + "text": " Now I want to return to the conservation of mechanical energy. I have here a pendulum. I have an object that weighs 15 kilograms and I can lift it up one meter, which I have done now. That means I've done work. mgh is the work I have done, believe me. I've increased the potential energy of this object. 15 times 10 is about 150 joules.", + "time_interval": { + "start": 0.0, + "end": 27.789 + }, + "confidence": 0.9381295831854712, + "no_speech_confidence": 0.00011801719665527344, + "words": [], + "speaker": null + }, + { + "text": " then that will be converted to kinetic energy. If I would let it swing from one meter height and you would be there and it would hit you, you'd be dead. 150 joules is enough to kill you. They use these devices. They're called a racquetball. They use them to demolish buildings. You lift up a very heavy object, even heavier than this", + "time_interval": { + "start": 28.112, + "end": 54.198 + }, + "confidence": 0.9271675420636102, + "no_speech_confidence": 0.0003886222839355469, + "words": [], + "speaker": null + }, + { + "text": " And then you let it go, you swing it, thereby converting gravitational potential energy into kinetic energy, and that way you can demolish a building. You just let it hit... and it breaks a building. And that's the whole idea of wrecking. So you are using, then, the conversion of gravitational potential energy to kinetic energy.", + "time_interval": { + "start": 54.353, + "end": 83.173 + }, + "confidence": 0.9374754273050169, + "no_speech_confidence": 0.0002598762512207031, + "words": [], + "speaker": null + }, + { + "text": " Now, I am such a strong believer of the conservation of mechanical energy that I am willing to put my life on the line. If I release that bob from a certain height then that bob can never come back to a point where the height is any larger.", + "time_interval": { + "start": 83.867, + "end": 113.767 + }, + "confidence": 0.9766190616221792, + "no_speech_confidence": 0.0003609657287597656, + "words": [], + "speaker": null + }, + { + "text": " and it swings, then when it reaches here it could not be higher. There is a conversion from gravitational potential energy to kinetic energy back to gravitational potential energy and it will come to a stop here. And when it swings back, it should not be able to reach any higher, provided that I do not give this object an initial speed when I stand here.", + "time_interval": { + "start": 114.175, + "end": 140.953 + }, + "confidence": 0.9551772970356361, + "no_speech_confidence": 0.0008778572082519531, + "words": [], + "speaker": null + }, + { + "text": " the conservation of mechanical energy for 100%. I may not trust myself. I'm going to release this object and I hope I will be able to do it at zero speed so that when it comes back it may touch my chin but it may not crush my chin. I want you to be extremely quiet because this is no joke. If I don't succeed in giving it zero speed", + "time_interval": { + "start": 141.276, + "end": 170.045 + }, + "confidence": 0.9597654424717829, + "no_speech_confidence": 0.0015277862548828125, + "words": [], + "speaker": null + }, + { + "text": " then this will be my last lecture. I will close my eyes. I don't want to see this. So please be very quiet. I almost didn't sleep all night. Three, two, one, zero.", + "time_interval": { + "start": 170.183, + "end": 187.899 + }, + "confidence": 0.9628809292164885, + "no_speech_confidence": 0.00191497802734375, + "words": [], + "speaker": null + }, + { + "text": " Physics works and I'm still alive", + "time_interval": { + "start": 200.727, + "end": 202.901 + }, + "confidence": 0.7648569824334006, + "no_speech_confidence": 0.02923583984375, + "words": [], + "speaker": null + } + ], + "transcription": { + "text": " Now I want to return to the conservation of mechanical energy. I have here a pendulum. I have an object that weighs 15 kilograms and I can lift it up one meter, which I have done now. That means I've done work. mgh is the work I have done, believe me. I've increased the potential energy of this object. 15 times 10 is about 150 joules. then that will be converted to kinetic energy. If I would let it swing from one meter height and you would be there and it would hit you, you'd be dead. 150 joules is enough to kill you. They use these devices. They're called a racquetball. They use them to demolish buildings. You lift up a very heavy object, even heavier than this And then you let it go, you swing it, thereby converting gravitational potential energy into kinetic energy, and that way you can demolish a building. You just let it hit... and it breaks a building. And that's the whole idea of wrecking. So you are using, then, the conversion of gravitational potential energy to kinetic energy. Now, I am such a strong believer of the conservation of mechanical energy that I am willing to put my life on the line. If I release that bob from a certain height then that bob can never come back to a point where the height is any larger. and it swings, then when it reaches here it could not be higher. There is a conversion from gravitational potential energy to kinetic energy back to gravitational potential energy and it will come to a stop here. And when it swings back, it should not be able to reach any higher, provided that I do not give this object an initial speed when I stand here. the conservation of mechanical energy for 100%. I may not trust myself. I'm going to release this object and I hope I will be able to do it at zero speed so that when it comes back it may touch my chin but it may not crush my chin. I want you to be extremely quiet because this is no joke. If I don't succeed in giving it zero speed then this will be my last lecture. I will close my eyes. I don't want to see this. So please be very quiet. I almost didn't sleep all night. Three, two, one, zero. Physics works and I'm still alive" + }, + "transcription_info": { + "language": "en", + "language_confidence": 0.982421875 + } +} \ No newline at end of file diff --git a/aana/tests/files/expected/whisper/whisper_medium_squirrel.wav_batched.json b/aana/tests/files/expected/whisper/whisper_medium_squirrel.wav_batched.json new file mode 100644 index 00000000..10731654 --- /dev/null +++ b/aana/tests/files/expected/whisper/whisper_medium_squirrel.wav_batched.json @@ -0,0 +1,10 @@ +{ + "segments": [], + "transcription": { + "text": "" + }, + "transcription_info": { + "language": "silence", + "language_confidence": 1.0 + } +} \ No newline at end of file diff --git a/aana/tests/files/expected/whisper/whisper_tiny_physicsworks.wav_batched.json b/aana/tests/files/expected/whisper/whisper_tiny_physicsworks.wav_batched.json new file mode 100644 index 00000000..0db1fdd0 --- /dev/null +++ b/aana/tests/files/expected/whisper/whisper_tiny_physicsworks.wav_batched.json @@ -0,0 +1,99 @@ +{ + "segments": [ + { + "text": " Now I want to return to the conservation of mechanical energy. I have here a pendulum. I have an object that weighs 15 kilograms, and I can lift it up one meter, which I have done now. That means I've done work. MGH is the work I have done, believe me. I've increased the potential energy of this object. 15 times 10, it's about 150 joules. If I let it fall,", + "time_interval": { + "start": 0.0, + "end": 27.789 + }, + "confidence": 0.8900576637530443, + "no_speech_confidence": 8.493400673614815e-05, + "words": [], + "speaker": null + }, + { + "text": " then that will be converted to kinetic energy. If I would let it swing from one meter height and you would be there and it would hit you, you'd be dead. 150 joules is enough to kill you. They use these devices to call a record ball, they use them to demolish buildings. You lift up a very heavy object, even heavier than this,", + "time_interval": { + "start": 28.112, + "end": 54.198 + }, + "confidence": 0.8824645134738218, + "no_speech_confidence": 0.00019971330766566098, + "words": [], + "speaker": null + }, + { + "text": " And then you let it go, you swing it thereby converting gravitational potential energy into kinetic energy and that way you can demolish a building. You just let it hit and it breaks a building. And that's the whole idea of wrecking. So you're using then the conversion of gravitational potential energy to kinetic energy.", + "time_interval": { + "start": 54.353, + "end": 83.173 + }, + "confidence": 0.9030846484357529, + "no_speech_confidence": 0.0006614253506995738, + "words": [], + "speaker": null + }, + { + "text": " Now, I am such a strong believer of the conservation of mechanical energy that I am willing to put my life on the line. If I release that Bob from a certain height, then that Bob can never come back to a point where the height is any larger. If I release it from this height,", + "time_interval": { + "start": 83.867, + "end": 113.767 + }, + "confidence": 0.966081474892032, + "no_speech_confidence": 0.003007479477673769, + "words": [], + "speaker": null + }, + { + "text": " And it swings, then when it reaches here, it could not be higher. There is a conversion from gravitational potential energy to kinetic energy back to gravitational potential energy and it will come to a stop here. And when it swings back, it should not be able to reach any higher. Provide it that I do not give this object an initial speed when I stand here. I trust", + "time_interval": { + "start": 114.175, + "end": 140.953 + }, + "confidence": 0.8942666593959279, + "no_speech_confidence": 0.0008694207645021379, + "words": [], + "speaker": null + }, + { + "text": " The conservation of nuclear energy for 100%. I may not trust myself. I'm going to release this object, and I hope I will be able to do it at zero speed. So that when it comes back, it may touch my chin, but it may not crush my chin. I want you to be extremely quiet because this is no joke. If I don't succeed in giving it zero speed,", + "time_interval": { + "start": 141.276, + "end": 170.045 + }, + "confidence": 0.8853910642383671, + "no_speech_confidence": 0.0006208881386555731, + "words": [], + "speaker": null + }, + { + "text": " Then this will be my last lecture. I'll close my eyes. I don't want to see this. So please be very quiet. I almost didn't sleep all night. Three, two, one, zero.", + "time_interval": { + "start": 170.183, + "end": 187.899 + }, + "confidence": 0.9018202278684714, + "no_speech_confidence": 0.009517688304185867, + "words": [], + "speaker": null + }, + { + "text": " physics works and I'm still alive.", + "time_interval": { + "start": 200.727, + "end": 202.901 + }, + "confidence": 0.7211022470261487, + "no_speech_confidence": 0.029024533927440643, + "words": [], + "speaker": null + } + ], + "transcription": { + "text": " Now I want to return to the conservation of mechanical energy. I have here a pendulum. I have an object that weighs 15 kilograms, and I can lift it up one meter, which I have done now. That means I've done work. MGH is the work I have done, believe me. I've increased the potential energy of this object. 15 times 10, it's about 150 joules. If I let it fall, then that will be converted to kinetic energy. If I would let it swing from one meter height and you would be there and it would hit you, you'd be dead. 150 joules is enough to kill you. They use these devices to call a record ball, they use them to demolish buildings. You lift up a very heavy object, even heavier than this, And then you let it go, you swing it thereby converting gravitational potential energy into kinetic energy and that way you can demolish a building. You just let it hit and it breaks a building. And that's the whole idea of wrecking. So you're using then the conversion of gravitational potential energy to kinetic energy. Now, I am such a strong believer of the conservation of mechanical energy that I am willing to put my life on the line. If I release that Bob from a certain height, then that Bob can never come back to a point where the height is any larger. If I release it from this height, And it swings, then when it reaches here, it could not be higher. There is a conversion from gravitational potential energy to kinetic energy back to gravitational potential energy and it will come to a stop here. And when it swings back, it should not be able to reach any higher. Provide it that I do not give this object an initial speed when I stand here. I trust The conservation of nuclear energy for 100%. I may not trust myself. I'm going to release this object, and I hope I will be able to do it at zero speed. So that when it comes back, it may touch my chin, but it may not crush my chin. I want you to be extremely quiet because this is no joke. If I don't succeed in giving it zero speed, Then this will be my last lecture. I'll close my eyes. I don't want to see this. So please be very quiet. I almost didn't sleep all night. Three, two, one, zero. physics works and I'm still alive." + }, + "transcription_info": { + "language": "en", + "language_confidence": 0.7906108498573303 + } +} \ No newline at end of file diff --git a/aana/tests/files/expected/whisper/whisper_tiny_squirrel.wav_batched.json b/aana/tests/files/expected/whisper/whisper_tiny_squirrel.wav_batched.json new file mode 100644 index 00000000..10731654 --- /dev/null +++ b/aana/tests/files/expected/whisper/whisper_tiny_squirrel.wav_batched.json @@ -0,0 +1,10 @@ +{ + "segments": [], + "transcription": { + "text": "" + }, + "transcription_info": { + "language": "silence", + "language_confidence": 1.0 + } +} \ No newline at end of file diff --git a/aana/tests/files/expected/whisper/whisper_turbo_physicsworks.wav_batched.json b/aana/tests/files/expected/whisper/whisper_turbo_physicsworks.wav_batched.json new file mode 100644 index 00000000..1abed26a --- /dev/null +++ b/aana/tests/files/expected/whisper/whisper_turbo_physicsworks.wav_batched.json @@ -0,0 +1,99 @@ +{ + "segments": [ + { + "text": " Now I want to return to the conservation of mechanical energy. I have here a pendulum. I have an object that weighs 15 kilograms, and I can lift it up one meter, which I have done now. That means I've done work. MGH is the work I have done, believe me. I've increased the potential energy of this object. 15 times 10 is about 150 joules. If I let it fall,", + "time_interval": { + "start": 0.0, + "end": 27.789 + }, + "confidence": 0.9490792924466186, + "no_speech_confidence": 0.0, + "words": [], + "speaker": null + }, + { + "text": " then that will be converted to kinetic energy. If I would let it swing from one meter height and you would be there and it would hit you, you'd be dead. 150 joules is enough to kill you. They use these devices. They're called a wrecker ball. They use them to demolish buildings. You lift up a very heavy object, even heavier than this,", + "time_interval": { + "start": 28.112, + "end": 54.198 + }, + "confidence": 0.9323790648454845, + "no_speech_confidence": 0.0, + "words": [], + "speaker": null + }, + { + "text": " and then you let it go, you swing it, thereby converting gravitational potential energy into kinetic energy, and that way you can demolish a building. You just let it hit, and it breaks a building. And that's the whole idea of wrecking. So you're using, then, the conversion of gravitational potential energy to kinetic energy.", + "time_interval": { + "start": 54.353, + "end": 83.173 + }, + "confidence": 0.9240749904039858, + "no_speech_confidence": 0.0, + "words": [], + "speaker": null + }, + { + "text": " Now, I am such a strong believer of the conservation of mechanical energy that I am willing to put my life on the line. If I release that bob from a certain height then that bob can never come back to a point where the height is any larger. If I release it from this height", + "time_interval": { + "start": 83.867, + "end": 113.767 + }, + "confidence": 0.9534304451815198, + "no_speech_confidence": 0.0, + "words": [], + "speaker": null + }, + { + "text": " and it swings then when it reaches here it could not be higher there is a conversion from gravitational potential energy to kinetic energy back to gravitational potential energy and it will come to a stop here and when it swings back it should not be able to reach any higher provided that I do not give this object an initial speed when I stand here I trust", + "time_interval": { + "start": 114.175, + "end": 140.953 + }, + "confidence": 0.9459773194486756, + "no_speech_confidence": 0.0, + "words": [], + "speaker": null + }, + { + "text": " the conservation of mechanical energy for 100%. I may not trust myself. I'm going to release this object and I hope I will be able to do it at zero speed so that when it comes back it may touch my chin but it may not crush my chin. I want you to be extremely quiet because this is no joke. If I don't succeed in giving it zero speed", + "time_interval": { + "start": 141.276, + "end": 170.045 + }, + "confidence": 0.93841280382074, + "no_speech_confidence": 0.0, + "words": [], + "speaker": null + }, + { + "text": " then this will be my last lecture. I will close my eyes. I don't want to see this. So please be very quiet. I almost didn't sleep all night. Three, two, one, zero.", + "time_interval": { + "start": 170.183, + "end": 187.899 + }, + "confidence": 0.948755488154214, + "no_speech_confidence": 0.0, + "words": [], + "speaker": null + }, + { + "text": " Physics works and I'm still alive.", + "time_interval": { + "start": 200.727, + "end": 202.901 + }, + "confidence": 0.9096216251291268, + "no_speech_confidence": 0.0, + "words": [], + "speaker": null + } + ], + "transcription": { + "text": " Now I want to return to the conservation of mechanical energy. I have here a pendulum. I have an object that weighs 15 kilograms, and I can lift it up one meter, which I have done now. That means I've done work. MGH is the work I have done, believe me. I've increased the potential energy of this object. 15 times 10 is about 150 joules. If I let it fall, then that will be converted to kinetic energy. If I would let it swing from one meter height and you would be there and it would hit you, you'd be dead. 150 joules is enough to kill you. They use these devices. They're called a wrecker ball. They use them to demolish buildings. You lift up a very heavy object, even heavier than this, and then you let it go, you swing it, thereby converting gravitational potential energy into kinetic energy, and that way you can demolish a building. You just let it hit, and it breaks a building. And that's the whole idea of wrecking. So you're using, then, the conversion of gravitational potential energy to kinetic energy. Now, I am such a strong believer of the conservation of mechanical energy that I am willing to put my life on the line. If I release that bob from a certain height then that bob can never come back to a point where the height is any larger. If I release it from this height and it swings then when it reaches here it could not be higher there is a conversion from gravitational potential energy to kinetic energy back to gravitational potential energy and it will come to a stop here and when it swings back it should not be able to reach any higher provided that I do not give this object an initial speed when I stand here I trust the conservation of mechanical energy for 100%. I may not trust myself. I'm going to release this object and I hope I will be able to do it at zero speed so that when it comes back it may touch my chin but it may not crush my chin. I want you to be extremely quiet because this is no joke. If I don't succeed in giving it zero speed then this will be my last lecture. I will close my eyes. I don't want to see this. So please be very quiet. I almost didn't sleep all night. Three, two, one, zero. Physics works and I'm still alive." + }, + "transcription_info": { + "language": "en", + "language_confidence": 1.0 + } +} \ No newline at end of file diff --git a/aana/tests/files/expected/whisper/whisper_turbo_squirrel.wav_batched.json b/aana/tests/files/expected/whisper/whisper_turbo_squirrel.wav_batched.json new file mode 100644 index 00000000..10731654 --- /dev/null +++ b/aana/tests/files/expected/whisper/whisper_turbo_squirrel.wav_batched.json @@ -0,0 +1,10 @@ +{ + "segments": [], + "transcription": { + "text": "" + }, + "transcription_info": { + "language": "silence", + "language_confidence": 1.0 + } +} \ No newline at end of file From fefb34c2743d432902b2158a83eedb0055af659d Mon Sep 17 00:00:00 2001 From: jiltseb Date: Fri, 1 Nov 2024 12:33:13 +0000 Subject: [PATCH 5/8] workaround for cudnn ctranslate2 issue ftb --- aana/deployments/whisper_deployment.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/aana/deployments/whisper_deployment.py b/aana/deployments/whisper_deployment.py index 6bd31a76..162d8f90 100644 --- a/aana/deployments/whisper_deployment.py +++ b/aana/deployments/whisper_deployment.py @@ -1,4 +1,4 @@ -from collections.abc import AsyncGenerator +from collections.abc import AsyncGenerator # noqa: I001 from enum import Enum from typing import Any, cast @@ -20,6 +20,16 @@ from aana.deployments.base_deployment import BaseDeployment, exception_handler from aana.exceptions.runtime import InferenceException +# Workaround for CUDNN issue with cTranslate2: +import os +import nvidia.cudnn.lib +from pathlib import Path + +cudnn_path = str(Path(nvidia.cudnn.lib.__file__).parent) +os.environ["LD_LIBRARY_PATH"] = ( + cudnn_path + "/:" + os.environ.get("LD_LIBRARY_PATH", "") +) + class WhisperComputeType(str, Enum): """The data type used by whisper models. From c5b28c1d7f07e32a51a80537cb47249c921b2d2e Mon Sep 17 00:00:00 2001 From: jiltseb Date: Fri, 1 Nov 2024 14:47:23 +0000 Subject: [PATCH 6/8] added ruff fixes --- aana/deployments/whisper_deployment.py | 3 +++ aana/sdk.py | 1 - 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/aana/deployments/whisper_deployment.py b/aana/deployments/whisper_deployment.py index 162d8f90..13006ef9 100644 --- a/aana/deployments/whisper_deployment.py +++ b/aana/deployments/whisper_deployment.py @@ -303,16 +303,19 @@ async def transcribe_in_chunks( params: BatchedWhisperParams | None = None, ) -> AsyncGenerator[WhisperOutput, None]: """Transcribe a single audio by segmenting it into chunks (4x faster) in streaming mode. + Args: audio (Audio): The audio to transcribe. vad_segments (list[VadSegment]| None): List of vad segments to guide batching of the audio data. batch_size (int): Maximum batch size for the batched inference. params (BatchedWhisperParams | None): The parameters for the batched inference with whisper model. + Yields: WhisperOutput: The transcription output as a dictionary: segments (list[AsrSegment]): The ASR segments. transcription_info (AsrTranscriptionInfo): The ASR transcription info. transcription (AsrTranscription): The ASR transcription. + Raises: InferenceException: If the inference fails. """ diff --git a/aana/sdk.py b/aana/sdk.py index ea9554f1..f25a765f 100644 --- a/aana/sdk.py +++ b/aana/sdk.py @@ -23,7 +23,6 @@ DeploymentException, EmptyMigrationsException, FailedDeployment, - InferenceException, InsufficientResources, ) from aana.storage.op import run_alembic_migrations From bafb2799d3b2724e891540d3d553faed733a63f3 Mon Sep 17 00:00:00 2001 From: jiltseb Date: Fri, 1 Nov 2024 14:48:00 +0000 Subject: [PATCH 7/8] examples of transcribe methods in docs --- docs/pages/model_hub/asr.md | 49 +++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/docs/pages/model_hub/asr.md b/docs/pages/model_hub/asr.md index 498be4ce..c5a76053 100644 --- a/docs/pages/model_hub/asr.md +++ b/docs/pages/model_hub/asr.md @@ -70,6 +70,55 @@ Here are some other possible configurations for the Whisper deployment: ) ``` +### Examples of Transcription from Video + +Let's see different transcribe methods in the transcription endpoint class. + +!!! example "Transcribe methods in Aana SDK" + + ```python + from aana.core.models.video import VideoInput + from aana.core.models.whisper import BatchedWhisperParams, WhisperParams + from aana.deployments.whisper_deployment import WhisperOutput + + async def run( + self, + video: VideoInput, + whisper_params: WhisperParams, + ) -> WhisperOutput: + + #Download video and extract audio + video_obj = await run_remote(download_video)(video_input=video) + audio = extract_audio(video=video_obj) + + #1. Method "transcribe": + # Use to get the full transcription output at the end all at once. + transcription = await self.asr_handle.transcribe( + audio=audio, params=whisper_params + ) + #further processing... + + + #2. Method "transcribe_stream": + # Use to get transcription segment-by-segment as they become available. + stream = handle.transcribe_stream( + audio=audio, params=WhisperParams + ) + async for chunk in stream: + #further processing... + + + #3. Method "transcribe_in_chunks": + # Perform batched inference and returns one batch of segments at a time. + # 4x faster than sequential methods. + batched_stream = handle.transcribe_in_chunks( + audio=audio, + params=BatchedWhisperParams(), + ) + async for chunk in batched_stream: + #further processing... + ``` + ### Diarized ASR Diarized transcription can be generated by using [WhisperDeployment](./../../reference/deployments.md#aana.deployments.WhisperDeployment) and [PyannoteSpeakerDiarizationDeployment](./../../reference/deployments.md#aana.deployments.PyannoteSpeakerDiarizationDeployment) and combining the timelines using post processing with [PostProcessingForDiarizedAsr](./../../reference/processors.md#aana.processors.speaker.PostProcessingForDiarizedAsr). From b631e1475e8c336bd70fee1f2f8e705b77b7c449 Mon Sep 17 00:00:00 2001 From: jiltseb Date: Fri, 1 Nov 2024 17:20:34 +0000 Subject: [PATCH 8/8] updating transcribe methods in doc --- docs/pages/model_hub/asr.md | 89 +++++++++++++++++-------------------- 1 file changed, 41 insertions(+), 48 deletions(-) diff --git a/docs/pages/model_hub/asr.md b/docs/pages/model_hub/asr.md index c5a76053..6d5c52f3 100644 --- a/docs/pages/model_hub/asr.md +++ b/docs/pages/model_hub/asr.md @@ -70,54 +70,47 @@ Here are some other possible configurations for the Whisper deployment: ) ``` -### Examples of Transcription from Video - -Let's see different transcribe methods in the transcription endpoint class. - -!!! example "Transcribe methods in Aana SDK" - - ```python - from aana.core.models.video import VideoInput - from aana.core.models.whisper import BatchedWhisperParams, WhisperParams - from aana.deployments.whisper_deployment import WhisperOutput - - async def run( - self, - video: VideoInput, - whisper_params: WhisperParams, - ) -> WhisperOutput: - - #Download video and extract audio - video_obj = await run_remote(download_video)(video_input=video) - audio = extract_audio(video=video_obj) - - #1. Method "transcribe": - # Use to get the full transcription output at the end all at once. - transcription = await self.asr_handle.transcribe( - audio=audio, params=whisper_params - ) - #further processing... - - - #2. Method "transcribe_stream": - # Use to get transcription segment-by-segment as they become available. - stream = handle.transcribe_stream( - audio=audio, params=WhisperParams - ) - async for chunk in stream: - #further processing... - - - #3. Method "transcribe_in_chunks": - # Perform batched inference and returns one batch of segments at a time. - # 4x faster than sequential methods. - batched_stream = handle.transcribe_in_chunks( - audio=audio, - params=BatchedWhisperParams(), - ) - async for chunk in batched_stream: - #further processing... - ``` +### Available Transcription Methods in Aana SDK + +Below are the different transcription methods available in the Aana SDK: + +1. **`transcribe` Method** + - **Description**: This method is used to get the complete transcription output at once after processing the entire audio. + - **Usage Example**: + ```python + transcription = await self.asr_handle.transcribe(audio=audio, params=whisper_params) + # Further processing... + ``` + +2. **`transcribe_stream` Method** + - **Description**: This method allows for segment-by-segment transcription as they become available. + - **Usage Example**: + ```python + stream = handle.transcribe_stream(audio=audio, params=whisper_params) + async for chunk in stream: + # Further processing... + ``` + +3. **`transcribe_in_chunks` Method** + - **Description**: This method performs batched inference, returning one batch of segments at a time. It is up to 4x faster than sequential methods. + - **Usage Example**: + ```python + batched_stream = handle.transcribe_in_chunks(audio=audio, params=batched_whisper_params) + async for chunk in batched_stream: + # Further processing... + ``` + +#### Differences Between `WhisperParams` and `BatchedWhisperParams` + +Both `WhisperParams` and `BatchedWhisperParams` are used to configure the Whisper speech-to-text model in sequential and batched inferences respectively. + +- **Common Parameters**: + Both classes share common attributes such as `language`, `beam_size`, `best_of`, and `temperature`. + +- **Key Differences**: + WhisperParams includes additional attributes such as `word_timestamps` and `vad_filter`, which provide word-level timestamp extraction and voice activity detection filtering. + +Refer to the respective [class documentation](../../reference/models/whisper.md) for detailed attributes and usage. ### Diarized ASR