From 23cdc0f72db44a8086fbad3a541ad8443f09f052 Mon Sep 17 00:00:00 2001 From: dorbaker Date: Wed, 19 Jun 2024 13:53:22 -0400 Subject: [PATCH] Updated with AI Search audience parameter. --- .../graphrag-0.0.1-py3-none-any.whl | Bin 362779 -> 362962 bytes backend/graphrag-wheel/note.txt | 2 +- backend/src/api/index.py | 6 +- backend/src/api/pipeline_settings.yaml | 1 + backend/src/meta_agent/community/retrieve.py | 3 +- docs/DEPLOYMENT-GUIDE.md | 1 + infra/deploy.sh | 6 + poetry.lock | 176 +++++++++--------- 8 files changed, 104 insertions(+), 91 deletions(-) diff --git a/backend/graphrag-wheel/graphrag-0.0.1-py3-none-any.whl b/backend/graphrag-wheel/graphrag-0.0.1-py3-none-any.whl index 38d7263381482a73c4f4e0d918c8e85641173e24..d9438d9d98ef0174c0cc23f6279d1b51944a875a 100644 GIT binary patch delta 27401 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 delta 27198 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 Y|Fwn7g.azure-api.net`. If not provided a unique name will be generated. `RESOURCE_BASE_NAME` | | No | Suffix to apply to all azure resource names. If not provided a unique suffix will be generated. `AISEARCH_ENDPOINT_SUFFIX` | | No | Suffix to apply to AI search endpoint. Will default to `search.windows.net` for Azure Commercial cloud but should be overriden for deployments in other Azure clouds. +`AISEARCH_AUDIENCE` | | No | Audience for AAD for AI Search. Default is `https://search.azure.com/`, which will default to Azure Commerical cloud. `REPORTERS` | | No | The type of logging to enable. If not provided, logging will be saved to a file in Azure Storage and to the console in AKS. `GRAPHRAG_COGNITIVE_SERVICES_ENDPOINT` | | No | Endpoint for cognitive services identity authorization. Will default to `https://cognitiveservices.azure.com/.default` for Azure Commercial cloud but should be defined for deployments in other Azure clouds. diff --git a/infra/deploy.sh b/infra/deploy.sh index 94fc3d95..00a683a9 100755 --- a/infra/deploy.sh +++ b/infra/deploy.sh @@ -7,6 +7,7 @@ aksNamespace="graphrag" # OPTIONAL PARAMS +AISEARCH_AUDIENCE="" AISEARCH_ENDPOINT_SUFFIX="" APIM_NAME="" RESOURCE_BASE_NAME="" @@ -130,6 +131,10 @@ populateOptionalParams () { AISEARCH_ENDPOINT_SUFFIX="search.windows.net" printf "\tsetting AISEARCH_ENDPOINT_SUFFIX=$AISEARCH_ENDPOINT_SUFFIX\n" fi + if [ -z "$AISEARCH_AUDIENCE" ]; then + AISEARCH_AUDIENCE="https://search.azure.com" + printf "\tsetting AISEARCH_AUDIENCE=$AISEARCH_AUDIENCE\n" + fi if [ -z "$PUBLISHER_NAME" ]; then PUBLISHER_NAME="publisher" printf "\tsetting PUBLISHER_NAME=$PUBLISHER_NAME\n" @@ -355,6 +360,7 @@ deployHelmChart () { --set "ingress.host=$graphragHostname" \ --set "graphragConfig.APIM_GATEWAY_URL=$apimGatewayUrl" \ --set "graphragConfig.AI_SEARCH_URL=https://$aiSearchName.$AISEARCH_ENDPOINT_SUFFIX" \ + --set "graphragConfig.AI_SEARCH_AUDIENCE=$AISEARCH_AUDIENCE" \ --set "graphragConfig.COSMOS_URI_ENDPOINT=$cosmosEndpoint" \ --set "graphragConfig.GRAPHRAG_API_BASE=$GRAPHRAG_API_BASE" \ --set "graphragConfig.GRAPHRAG_API_VERSION=$GRAPHRAG_API_VERSION" \ diff --git a/poetry.lock b/poetry.lock index 3fe57303..cfbb9ede 100644 --- a/poetry.lock +++ b/poetry.lock @@ -465,13 +465,13 @@ requests = ">=2.20.0" [[package]] name = "azure-identity" -version = "1.16.1" +version = "1.17.0" description = "Microsoft Azure Identity Library for Python" optional = false python-versions = ">=3.8" files = [ - {file = "azure-identity-1.16.1.tar.gz", hash = "sha256:6d93f04468f240d59246d8afde3091494a5040d4f141cad0f49fc0c399d0d91e"}, - {file = "azure_identity-1.16.1-py3-none-any.whl", hash = "sha256:8fb07c25642cd4ac422559a8b50d3e77f73dcc2bbfaba419d06d6c9d7cff6726"}, + {file = "azure-identity-1.17.0.tar.gz", hash = "sha256:a1168f223b2d7fa3968362b78affd157a1f3772f310a8cdce883cc515c6c8998"}, + {file = "azure_identity-1.17.0-py3-none-any.whl", hash = "sha256:501d6c2cbb07826ff5e7cebc05ef319ba45612f31f0bdadca260005798e4ef16"}, ] [package.dependencies] @@ -479,6 +479,7 @@ azure-core = ">=1.23.0" cryptography = ">=2.5" msal = ">=1.24.0" msal-extensions = ">=0.3.0" +typing-extensions = ">=4.0.0" [[package]] name = "azure-search-documents" @@ -1165,13 +1166,13 @@ tests = ["pytest", "pytest-cov", "pytest-xdist"] [[package]] name = "dask" -version = "2024.5.2" +version = "2024.6.0" description = "Parallel PyData with Task Scheduling" optional = false python-versions = ">=3.9" files = [ - {file = "dask-2024.5.2-py3-none-any.whl", hash = "sha256:acc2cfe41d9e0151c216ac40396dbe34df13bc3d8c51dfece190349e4f2243af"}, - {file = "dask-2024.5.2.tar.gz", hash = "sha256:5c9722c44d0195e78b6e54197aa3302e6fcaaac2310fd3014560bcb86253dcb3"}, + {file = "dask-2024.6.0-py3-none-any.whl", hash = "sha256:de0ced6cd46dbc6c01120c8870457af46d667940805a4be063a74dd467466804"}, + {file = "dask-2024.6.0.tar.gz", hash = "sha256:6882ce7e485336d707e540080ed48e01f9c09485d52a2928ea05f9a9e44bb433"}, ] [package.dependencies] @@ -1192,22 +1193,22 @@ array = ["numpy (>=1.21)"] complete = ["dask[array,dataframe,diagnostics,distributed]", "lz4 (>=4.3.2)", "pyarrow (>=7.0)", "pyarrow-hotfix"] dataframe = ["dask-expr (>=1.1,<1.2)", "dask[array]", "pandas (>=1.3)"] diagnostics = ["bokeh (>=2.4.2)", "jinja2 (>=2.10.3)"] -distributed = ["distributed (==2024.5.2)"] +distributed = ["distributed (==2024.6.0)"] test = ["pandas[test]", "pre-commit", "pytest", "pytest-cov", "pytest-rerunfailures", "pytest-timeout", "pytest-xdist"] [[package]] name = "dask-expr" -version = "1.1.2" +version = "1.1.3" description = "High Level Expressions for Dask" optional = false python-versions = ">=3.9" files = [ - {file = "dask_expr-1.1.2-py3-none-any.whl", hash = "sha256:3be69fb2d449b5edf4404e953b7f6e688426872c6eb10f239539ead716a06f7a"}, - {file = "dask_expr-1.1.2.tar.gz", hash = "sha256:ce2e3803b638cdc67bc75326e1b0d36ea9d231fdddf086e727145a5a2769bed4"}, + {file = "dask_expr-1.1.3-py3-none-any.whl", hash = "sha256:e6ad2fab9ffe7dbe0fc52451b5a0dc5588f36cd5677168cfb0b73c70f05e465f"}, + {file = "dask_expr-1.1.3.tar.gz", hash = "sha256:ce8e44dfed30b4d9e6a549d0ed8cb5798273645fb9a16733d0687dc84615a94b"}, ] [package.dependencies] -dask = "2024.5.2" +dask = "2024.6.0" pandas = ">=2" pyarrow = ">=7.0.0" @@ -1472,13 +1473,13 @@ pgp = ["gpg"] [[package]] name = "email-validator" -version = "2.1.1" +version = "2.1.2" description = "A robust email address syntax and deliverability validation library." optional = false python-versions = ">=3.8" files = [ - {file = "email_validator-2.1.1-py3-none-any.whl", hash = "sha256:97d882d174e2a65732fb43bfce81a3a834cbc1bde8bf419e30ef5ea976370a05"}, - {file = "email_validator-2.1.1.tar.gz", hash = "sha256:200a70680ba08904be6d1eef729205cc0d687634399a5924d842533efb824b84"}, + {file = "email_validator-2.1.2-py3-none-any.whl", hash = "sha256:d89f6324e13b1e39889eab7f9ca2f91dc9aebb6fa50a6d8bd4329ab50f251115"}, + {file = "email_validator-2.1.2.tar.gz", hash = "sha256:14c0f3d343c4beda37400421b39fa411bbe33a75df20825df73ad53e06a9f04c"}, ] [package.dependencies] @@ -1579,13 +1580,13 @@ standard = ["fastapi", "uvicorn[standard] (>=0.15.0)"] [[package]] name = "fastjsonschema" -version = "2.19.1" +version = "2.20.0" description = "Fastest Python implementation of JSON schema" optional = false python-versions = "*" files = [ - {file = "fastjsonschema-2.19.1-py3-none-any.whl", hash = "sha256:3672b47bc94178c9f23dbb654bf47440155d4db9df5f7bc47643315f9c405cd0"}, - {file = "fastjsonschema-2.19.1.tar.gz", hash = "sha256:e3126a94bdc4623d3de4485f8d468a12f02a67921315ddc87836d6e456dc789d"}, + {file = "fastjsonschema-2.20.0-py3-none-any.whl", hash = "sha256:5875f0b0fa7a0043a91e93a9b8f793bcbbba9691e7fd83dca95c28ba26d21f0a"}, + {file = "fastjsonschema-2.20.0.tar.gz", hash = "sha256:3d48fc5300ee96f5d116f10fe6f28d938e6008f59a6a025c2649475b87f76a23"}, ] [package.extras] @@ -1644,34 +1645,34 @@ lzo = ["python-lzo"] [[package]] name = "filelock" -version = "3.15.1" +version = "3.15.3" description = "A platform independent file lock." optional = false python-versions = ">=3.8" files = [ - {file = "filelock-3.15.1-py3-none-any.whl", hash = "sha256:71b3102950e91dfc1bb4209b64be4dc8854f40e5f534428d8684f953ac847fac"}, - {file = "filelock-3.15.1.tar.gz", hash = "sha256:58a2549afdf9e02e10720eaa4d4470f56386d7a6f72edd7d0596337af8ed7ad8"}, + {file = "filelock-3.15.3-py3-none-any.whl", hash = "sha256:0151273e5b5d6cf753a61ec83b3a9b7d8821c39ae9af9d7ecf2f9e2f17404103"}, + {file = "filelock-3.15.3.tar.gz", hash = "sha256:e1199bf5194a2277273dacd50269f0d87d0682088a3c561c15674ea9005d8635"}, ] [package.extras] docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8.0.1)", "pytest (>=7.4.3)", "pytest-asyncio (>=0.21)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8.0.1)", "pytest (>=7.4.3)", "pytest-asyncio (>=0.21)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)", "virtualenv (>=20.26.2)"] typing = ["typing-extensions (>=4.8)"] [[package]] name = "flake8" -version = "7.0.0" +version = "7.1.0" description = "the modular source code checker: pep8 pyflakes and co" optional = false python-versions = ">=3.8.1" files = [ - {file = "flake8-7.0.0-py2.py3-none-any.whl", hash = "sha256:a6dfbb75e03252917f2473ea9653f7cd799c3064e54d4c8140044c5c065f53c3"}, - {file = "flake8-7.0.0.tar.gz", hash = "sha256:33f96621059e65eec474169085dc92bf26e7b2d47366b70be2f67ab80dc25132"}, + {file = "flake8-7.1.0-py2.py3-none-any.whl", hash = "sha256:2e416edcc62471a64cea09353f4e7bdba32aeb079b6e360554c659a122b1bc6a"}, + {file = "flake8-7.1.0.tar.gz", hash = "sha256:48a07b626b55236e0fb4784ee69a465fbf59d79eec1f5b4785c3d3bc57d17aa5"}, ] [package.dependencies] mccabe = ">=0.7.0,<0.8.0" -pycodestyle = ">=2.11.0,<2.12.0" +pycodestyle = ">=2.12.0,<2.13.0" pyflakes = ">=3.2.0,<3.3.0" [[package]] @@ -2029,7 +2030,7 @@ description = "" optional = false python-versions = ">=3.10,<3.13" files = [ - {file = "graphrag-0.0.1-py3-none-any.whl", hash = "sha256:a2ea8997552378906bde9d997e4209206c7009b34c33b4365ce738a072035a18"}, + {file = "graphrag-0.0.1-py3-none-any.whl", hash = "sha256:9be824fc561cf4ca38f986168aa1b500d5d49132300a791413e4ecfdbd6b2a49"}, ] [package.dependencies] @@ -3808,13 +3809,13 @@ signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"] [[package]] name = "openai" -version = "1.34.0" +version = "1.35.0" description = "The official Python library for the openai API" optional = false python-versions = ">=3.7.1" files = [ - {file = "openai-1.34.0-py3-none-any.whl", hash = "sha256:018623c2f795424044675c6230fa3bfbf98d9e0aab45d8fd116f2efb2cfb6b7e"}, - {file = "openai-1.34.0.tar.gz", hash = "sha256:95c8e2da4acd6958e626186957d656597613587195abd0fb2527566a93e76770"}, + {file = "openai-1.35.0-py3-none-any.whl", hash = "sha256:1c1c19ddc8c1238aee501a12d5100250e59ff49f24148f699a49664945e28fc0"}, + {file = "openai-1.35.0.tar.gz", hash = "sha256:c420ce141a5ca4f243b3249ce9e2587c93399321e77d1661be302fd5b9db1854"}, ] [package.dependencies] @@ -4410,20 +4411,20 @@ wcwidth = "*" [[package]] name = "proto-plus" -version = "1.23.0" +version = "1.24.0" description = "Beautiful, Pythonic protocol buffers." optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "proto-plus-1.23.0.tar.gz", hash = "sha256:89075171ef11988b3fa157f5dbd8b9cf09d65fffee97e29ce403cd8defba19d2"}, - {file = "proto_plus-1.23.0-py3-none-any.whl", hash = "sha256:a829c79e619e1cf632de091013a4173deed13a55f326ef84f05af6f50ff4c82c"}, + {file = "proto-plus-1.24.0.tar.gz", hash = "sha256:30b72a5ecafe4406b0d339db35b56c4059064e69227b8c3bda7462397f966445"}, + {file = "proto_plus-1.24.0-py3-none-any.whl", hash = "sha256:402576830425e5f6ce4c2a6702400ac79897dab0b4343821aa5188b0fab81a12"}, ] [package.dependencies] -protobuf = ">=3.19.0,<5.0.0dev" +protobuf = ">=3.19.0,<6.0.0dev" [package.extras] -testing = ["google-api-core[grpc] (>=1.31.5)"] +testing = ["google-api-core (>=1.31.5)"] [[package]] name = "protobuf" @@ -4447,27 +4448,28 @@ files = [ [[package]] name = "psutil" -version = "5.9.8" +version = "6.0.0" description = "Cross-platform lib for process and system monitoring in Python." optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ - {file = "psutil-5.9.8-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:26bd09967ae00920df88e0352a91cff1a78f8d69b3ecabbfe733610c0af486c8"}, - {file = "psutil-5.9.8-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:05806de88103b25903dff19bb6692bd2e714ccf9e668d050d144012055cbca73"}, - {file = "psutil-5.9.8-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:611052c4bc70432ec770d5d54f64206aa7203a101ec273a0cd82418c86503bb7"}, - {file = "psutil-5.9.8-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:50187900d73c1381ba1454cf40308c2bf6f34268518b3f36a9b663ca87e65e36"}, - {file = "psutil-5.9.8-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:02615ed8c5ea222323408ceba16c60e99c3f91639b07da6373fb7e6539abc56d"}, - {file = "psutil-5.9.8-cp27-none-win32.whl", hash = "sha256:36f435891adb138ed3c9e58c6af3e2e6ca9ac2f365efe1f9cfef2794e6c93b4e"}, - {file = "psutil-5.9.8-cp27-none-win_amd64.whl", hash = "sha256:bd1184ceb3f87651a67b2708d4c3338e9b10c5df903f2e3776b62303b26cb631"}, - {file = "psutil-5.9.8-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:aee678c8720623dc456fa20659af736241f575d79429a0e5e9cf88ae0605cc81"}, - {file = "psutil-5.9.8-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8cb6403ce6d8e047495a701dc7c5bd788add903f8986d523e3e20b98b733e421"}, - {file = "psutil-5.9.8-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d06016f7f8625a1825ba3732081d77c94589dca78b7a3fc072194851e88461a4"}, - {file = "psutil-5.9.8-cp36-cp36m-win32.whl", hash = "sha256:7d79560ad97af658a0f6adfef8b834b53f64746d45b403f225b85c5c2c140eee"}, - {file = "psutil-5.9.8-cp36-cp36m-win_amd64.whl", hash = "sha256:27cc40c3493bb10de1be4b3f07cae4c010ce715290a5be22b98493509c6299e2"}, - {file = "psutil-5.9.8-cp37-abi3-win32.whl", hash = "sha256:bc56c2a1b0d15aa3eaa5a60c9f3f8e3e565303b465dbf57a1b730e7a2b9844e0"}, - {file = "psutil-5.9.8-cp37-abi3-win_amd64.whl", hash = "sha256:8db4c1b57507eef143a15a6884ca10f7c73876cdf5d51e713151c1236a0e68cf"}, - {file = "psutil-5.9.8-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:d16bbddf0693323b8c6123dd804100241da461e41d6e332fb0ba6058f630f8c8"}, - {file = "psutil-5.9.8.tar.gz", hash = "sha256:6be126e3225486dff286a8fb9a06246a5253f4c7c53b475ea5f5ac934e64194c"}, + {file = "psutil-6.0.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a021da3e881cd935e64a3d0a20983bda0bb4cf80e4f74fa9bfcb1bc5785360c6"}, + {file = "psutil-6.0.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:1287c2b95f1c0a364d23bc6f2ea2365a8d4d9b726a3be7294296ff7ba97c17f0"}, + {file = "psutil-6.0.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:a9a3dbfb4de4f18174528d87cc352d1f788b7496991cca33c6996f40c9e3c92c"}, + {file = "psutil-6.0.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:6ec7588fb3ddaec7344a825afe298db83fe01bfaaab39155fa84cf1c0d6b13c3"}, + {file = "psutil-6.0.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:1e7c870afcb7d91fdea2b37c24aeb08f98b6d67257a5cb0a8bc3ac68d0f1a68c"}, + {file = "psutil-6.0.0-cp27-none-win32.whl", hash = "sha256:02b69001f44cc73c1c5279d02b30a817e339ceb258ad75997325e0e6169d8b35"}, + {file = "psutil-6.0.0-cp27-none-win_amd64.whl", hash = "sha256:21f1fb635deccd510f69f485b87433460a603919b45e2a324ad65b0cc74f8fb1"}, + {file = "psutil-6.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:c588a7e9b1173b6e866756dde596fd4cad94f9399daf99ad8c3258b3cb2b47a0"}, + {file = "psutil-6.0.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ed2440ada7ef7d0d608f20ad89a04ec47d2d3ab7190896cd62ca5fc4fe08bf0"}, + {file = "psutil-6.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fd9a97c8e94059b0ef54a7d4baf13b405011176c3b6ff257c247cae0d560ecd"}, + {file = "psutil-6.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2e8d0054fc88153ca0544f5c4d554d42e33df2e009c4ff42284ac9ebdef4132"}, + {file = "psutil-6.0.0-cp36-cp36m-win32.whl", hash = "sha256:fc8c9510cde0146432bbdb433322861ee8c3efbf8589865c8bf8d21cb30c4d14"}, + {file = "psutil-6.0.0-cp36-cp36m-win_amd64.whl", hash = "sha256:34859b8d8f423b86e4385ff3665d3f4d94be3cdf48221fbe476e883514fdb71c"}, + {file = "psutil-6.0.0-cp37-abi3-win32.whl", hash = "sha256:a495580d6bae27291324fe60cea0b5a7c23fa36a7cd35035a16d93bdcf076b9d"}, + {file = "psutil-6.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:33ea5e1c975250a720b3a6609c490db40dae5d83a4eb315170c4fe0d8b1f34b3"}, + {file = "psutil-6.0.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:ffe7fc9b6b36beadc8c322f84e1caff51e8703b88eee1da46d1e3a6ae11b4fd0"}, + {file = "psutil-6.0.0.tar.gz", hash = "sha256:8faae4f310b6d969fa26ca0545338b21f73c6b15db7c4a8d934a5482faa818f2"}, ] [package.extras] @@ -4601,13 +4603,13 @@ pyasn1 = ">=0.4.6,<0.7.0" [[package]] name = "pycodestyle" -version = "2.11.1" +version = "2.12.0" description = "Python style guide checker" optional = false python-versions = ">=3.8" files = [ - {file = "pycodestyle-2.11.1-py2.py3-none-any.whl", hash = "sha256:44fe31000b2d866f2e41841b18528a505fbd7fef9017b04eff4e2648a0fadc67"}, - {file = "pycodestyle-2.11.1.tar.gz", hash = "sha256:41ba0e7afc9752dfb53ced5489e89f8186be00e599e712660695b7a75ff2663f"}, + {file = "pycodestyle-2.12.0-py2.py3-none-any.whl", hash = "sha256:949a39f6b86c3e1515ba1787c2022131d165a8ad271b11370a8819aa070269e4"}, + {file = "pycodestyle-2.12.0.tar.gz", hash = "sha256:442f950141b4f43df752dd303511ffded3a04c2b6fb7f65980574f0c31e6e79c"}, ] [[package]] @@ -4823,13 +4825,13 @@ torch = ["torch"] [[package]] name = "pynndescent" -version = "0.5.12" +version = "0.5.13" description = "Nearest Neighbor Descent" optional = false python-versions = "*" files = [ - {file = "pynndescent-0.5.12-py3-none-any.whl", hash = "sha256:9023dc5fea520a4e84d0633ae735db97d2509da927bfa86c897e61f3315473c7"}, - {file = "pynndescent-0.5.12.tar.gz", hash = "sha256:0736291fcbbedfd5e0a3a280f71a63f8eb2f8bd9670d4c0b51ac1b4d081adf70"}, + {file = "pynndescent-0.5.13-py3-none-any.whl", hash = "sha256:69aabb8f394bc631b6ac475a1c7f3994c54adf3f51cd63b2730fefba5771b949"}, + {file = "pynndescent-0.5.13.tar.gz", hash = "sha256:d74254c0ee0a1eeec84597d5fe89fedcf778593eeabe32c2f97412934a9800fb"}, ] [package.dependencies] @@ -5658,28 +5660,28 @@ pyasn1 = ">=0.1.3" [[package]] name = "ruff" -version = "0.4.8" +version = "0.4.9" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.4.8-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:7663a6d78f6adb0eab270fa9cf1ff2d28618ca3a652b60f2a234d92b9ec89066"}, - {file = "ruff-0.4.8-py3-none-macosx_11_0_arm64.whl", hash = "sha256:eeceb78da8afb6de0ddada93112869852d04f1cd0f6b80fe464fd4e35c330913"}, - {file = "ruff-0.4.8-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aad360893e92486662ef3be0a339c5ca3c1b109e0134fcd37d534d4be9fb8de3"}, - {file = "ruff-0.4.8-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:284c2e3f3396fb05f5f803c9fffb53ebbe09a3ebe7dda2929ed8d73ded736deb"}, - {file = "ruff-0.4.8-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a7354f921e3fbe04d2a62d46707e569f9315e1a613307f7311a935743c51a764"}, - {file = "ruff-0.4.8-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:72584676164e15a68a15778fd1b17c28a519e7a0622161eb2debdcdabdc71883"}, - {file = "ruff-0.4.8-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9678d5c9b43315f323af2233a04d747409d1e3aa6789620083a82d1066a35199"}, - {file = "ruff-0.4.8-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704977a658131651a22b5ebeb28b717ef42ac6ee3b11e91dc87b633b5d83142b"}, - {file = "ruff-0.4.8-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d05f8d6f0c3cce5026cecd83b7a143dcad503045857bc49662f736437380ad45"}, - {file = "ruff-0.4.8-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:6ea874950daca5697309d976c9afba830d3bf0ed66887481d6bca1673fc5b66a"}, - {file = "ruff-0.4.8-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:fc95aac2943ddf360376be9aa3107c8cf9640083940a8c5bd824be692d2216dc"}, - {file = "ruff-0.4.8-py3-none-musllinux_1_2_i686.whl", hash = "sha256:384154a1c3f4bf537bac69f33720957ee49ac8d484bfc91720cc94172026ceed"}, - {file = "ruff-0.4.8-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:e9d5ce97cacc99878aa0d084c626a15cd21e6b3d53fd6f9112b7fc485918e1fa"}, - {file = "ruff-0.4.8-py3-none-win32.whl", hash = "sha256:6d795d7639212c2dfd01991259460101c22aabf420d9b943f153ab9d9706e6a9"}, - {file = "ruff-0.4.8-py3-none-win_amd64.whl", hash = "sha256:e14a3a095d07560a9d6769a72f781d73259655919d9b396c650fc98a8157555d"}, - {file = "ruff-0.4.8-py3-none-win_arm64.whl", hash = "sha256:14019a06dbe29b608f6b7cbcec300e3170a8d86efaddb7b23405cb7f7dcaf780"}, - {file = "ruff-0.4.8.tar.gz", hash = "sha256:16d717b1d57b2e2fd68bd0bf80fb43931b79d05a7131aa477d66fc40fbd86268"}, + {file = "ruff-0.4.9-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:b262ed08d036ebe162123170b35703aaf9daffecb698cd367a8d585157732991"}, + {file = "ruff-0.4.9-py3-none-macosx_11_0_arm64.whl", hash = "sha256:98ec2775fd2d856dc405635e5ee4ff177920f2141b8e2d9eb5bd6efd50e80317"}, + {file = "ruff-0.4.9-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4555056049d46d8a381f746680db1c46e67ac3b00d714606304077682832998e"}, + {file = "ruff-0.4.9-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e91175fbe48f8a2174c9aad70438fe9cb0a5732c4159b2a10a3565fea2d94cde"}, + {file = "ruff-0.4.9-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e8e7b95673f22e0efd3571fb5b0cf71a5eaaa3cc8a776584f3b2cc878e46bff"}, + {file = "ruff-0.4.9-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:2d45ddc6d82e1190ea737341326ecbc9a61447ba331b0a8962869fcada758505"}, + {file = "ruff-0.4.9-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:78de3fdb95c4af084087628132336772b1c5044f6e710739d440fc0bccf4d321"}, + {file = "ruff-0.4.9-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:06b60f91bfa5514bb689b500a25ba48e897d18fea14dce14b48a0c40d1635893"}, + {file = "ruff-0.4.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88bffe9c6a454bf8529f9ab9091c99490578a593cc9f9822b7fc065ee0712a06"}, + {file = "ruff-0.4.9-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:673bddb893f21ab47a8334c8e0ea7fd6598ecc8e698da75bcd12a7b9d0a3206e"}, + {file = "ruff-0.4.9-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:8c1aff58c31948cc66d0b22951aa19edb5af0a3af40c936340cd32a8b1ab7438"}, + {file = "ruff-0.4.9-py3-none-musllinux_1_2_i686.whl", hash = "sha256:784d3ec9bd6493c3b720a0b76f741e6c2d7d44f6b2be87f5eef1ae8cc1d54c84"}, + {file = "ruff-0.4.9-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:732dd550bfa5d85af8c3c6cbc47ba5b67c6aed8a89e2f011b908fc88f87649db"}, + {file = "ruff-0.4.9-py3-none-win32.whl", hash = "sha256:8064590fd1a50dcf4909c268b0e7c2498253273309ad3d97e4a752bb9df4f521"}, + {file = "ruff-0.4.9-py3-none-win_amd64.whl", hash = "sha256:e0a22c4157e53d006530c902107c7f550b9233e9706313ab57b892d7197d8e52"}, + {file = "ruff-0.4.9-py3-none-win_arm64.whl", hash = "sha256:5d5460f789ccf4efd43f265a58538a2c24dbce15dbf560676e430375f20a8198"}, + {file = "ruff-0.4.9.tar.gz", hash = "sha256:f1cb0828ac9533ba0135d148d214e284711ede33640465e706772645483427e3"}, ] [[package]] @@ -5823,18 +5825,18 @@ win32 = ["pywin32"] [[package]] name = "setuptools" -version = "70.0.0" +version = "70.1.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-70.0.0-py3-none-any.whl", hash = "sha256:54faa7f2e8d2d11bcd2c07bed282eef1046b5c080d1c32add737d7b5817b1ad4"}, - {file = "setuptools-70.0.0.tar.gz", hash = "sha256:f211a66637b8fa059bb28183da127d4e86396c991a942b028c6650d4319c3fd0"}, + {file = "setuptools-70.1.0-py3-none-any.whl", hash = "sha256:d9b8b771455a97c8a9f3ab3448ebe0b29b5e105f1228bba41028be116985a267"}, + {file = "setuptools-70.1.0.tar.gz", hash = "sha256:01a1e793faa5bd89abc851fa15d0a0db26f160890c7102cd8dce643e886b47f5"}, ] [package.extras] docs = ["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"] -testing = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.1)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test", "mypy (==1.10.0)", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.1)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (>=0.3.2)", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] [[package]] name = "shellingham" @@ -6067,13 +6069,13 @@ notebook = ["ipywidgets (>=7.0.0)"] [[package]] name = "tenacity" -version = "8.3.0" +version = "8.4.1" description = "Retry code until it succeeds" optional = false python-versions = ">=3.8" files = [ - {file = "tenacity-8.3.0-py3-none-any.whl", hash = "sha256:3649f6443dbc0d9b01b9d8020a9c4ec7a1ff5f6f3c6c8a036ef371f573fe9185"}, - {file = "tenacity-8.3.0.tar.gz", hash = "sha256:953d4e6ad24357bceffbc9707bc74349aca9d245f68eb65419cf0c249a1949a2"}, + {file = "tenacity-8.4.1-py3-none-any.whl", hash = "sha256:28522e692eda3e1b8f5e99c51464efcc0b9fc86933da92415168bc1c4e2308fa"}, + {file = "tenacity-8.4.1.tar.gz", hash = "sha256:54b1412b878ddf7e1f1577cd49527bad8cdef32421bd599beac0c6c3f10582fd"}, ] [package.extras] @@ -6502,13 +6504,13 @@ dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake [[package]] name = "urllib3" -version = "2.2.1" +version = "2.2.2" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.8" files = [ - {file = "urllib3-2.2.1-py3-none-any.whl", hash = "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d"}, - {file = "urllib3-2.2.1.tar.gz", hash = "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19"}, + {file = "urllib3-2.2.2-py3-none-any.whl", hash = "sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472"}, + {file = "urllib3-2.2.2.tar.gz", hash = "sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168"}, ] [package.extras]