From 111b6da84600e23544c1e7fa7e5411c139822109 Mon Sep 17 00:00:00 2001 From: orbaker <107270698+dorbaker@users.noreply.github.com> Date: Wed, 19 Jun 2024 19:07:02 -0400 Subject: [PATCH] Add AI Search audience parameter (#10) --- .../graphrag-0.0.1-py3-none-any.whl | Bin 359363 -> 362979 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 | 3 +- infra/deploy.sh | 6 ++ poetry.lock | 92 +++++++++--------- 8 files changed, 64 insertions(+), 49 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 31302fa6bb5f077fa9c4ba15696ae3246ecaf71f..c547d9a5ce6036eb2fd3d9fa850b90debd92bf68 100644 GIT binary patch delta 31812 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 Zf_+(T5JXNMgBOEW9&_Xf?JgRY{2#RB`riNm delta 27992 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 z zK6r?I{O1--08XPZP_~8l*r!)uTxS08?U&&WJ?FBQ<;xfGh9W@e4*g2v=6B5w#g}+# z$-o3A?9g$^b9EVKwiV@v`5M7x-h(q#uoaE`T`9rUHNh=9s0I!T-6`4Zk>`dROIF@x z<2^uFo6441-Rof6C-%tc&zs8(!dqaq7;Z!U7Rr|yj%~wK;IK7;#8$Yi4QxXzqUqj} zf(6)YN9+DWJyAtP+ffCU-6!DZ?U*7=Z(<_|c7PkdwgW1v>LwgILPPQ+!Z6~1HWS%r z1ian{r&r&R82xh~u>)?zDUPV^$rm`32l8*}*?_t*+=J5w|Cw2(4qSl0$QHlBpA>-B zM|vKRya!4Tmc0DhkSRt8{pC3bSJo^g{D}{6>5=(?)*h6?C#nRu z*^tbJ7Zje>7^_A7dYY&&j9mI{7D#Oc#&CvuN+M23#fwzniFmi z0*pSWBMxUA3W9AuXz#3dA>ef%Y#kJAJYAtmy z!h(P!6!!NHlCX8;KEURO-Yix8$RID0ER4U1a)Ee16bWMhIO~VricSQ>X+A`TFT?)O z%kf6NGW_A!(U?BdB{K{EZGk5uu3OlTc8|J59Bza0YbWDR62KO~Y0eCTPrU&sw8o=L z1|bj|3WG8ZLW(My9QB`z~c`Z`H0b0Lmr0Gb#hs&g&_3tb8YT2uC4?Y$|d+M6F6M{CqIASX^8h%AB>jF z)L9(z1GW&fVz~+k=n;a}muVpZn@h=@KnwqJ_bLSSPb(%2^`Y>h${vcT!E;3t7zM-9 zL)6uBGRg!#?G5m>#Jhk7{Pu2nWeG9@!2@U?+<0pl_oNtodGya<4XT$^^59$;a{2Qi!5MbKSxkOGWc)6}c z+)Lo`Hwdo=ksrw`h%aD{k!XLTy+;-ea5WMwqkyr+mcM_Jd0?DeKqLwYw|-eP^v}Xk zz>jG7=bSUY7Ribz^l>0`jtmA^C?bF>8jWx*1;oc-D}ik^+O_sDNCGvh@PeL%B}LuohJh)5m~ z6Ne(}G@}5cZ4_bfJPu{}v^m_E;CU_-kJ4gnfkXVW)<-MC&=8OA6tZ>%EOVuBfjNA= zUvj5#u`m7kNc?7d3gGsmtOnig6jl&-7{&efKl0gOH0}WhBvM`yaRHkI6z3_&Ma!84 zG(!2Ei@3=PrV)K}l|6!#B`(Oak%%IfASHG$%4-5C{I~_Lu1(&HWK0&!(wQU}bQkrX zpkqQPpfHXC&)P&ZPwJrv8xS3uC7}-AA6^vw=LYwECwY;y&G|1O{K-gel|})_ufVx{ zdI}~2e}7u_&)+TfU&`Q5c+96Sis9cirVZU%oLIzjg%n2cCmD_71z02vQZQ90n$AO5 zf_OEkzD8Mop;0UV+(+TDIgow4mtPq!3)5l#V#OI2Qv3Yc>n+a diff --git a/backend/graphrag-wheel/note.txt b/backend/graphrag-wheel/note.txt index 769a1d06..677251c6 100644 --- a/backend/graphrag-wheel/note.txt +++ b/backend/graphrag-wheel/note.txt @@ -2,4 +2,4 @@ This graphrag wheel file was built from the following repo https://github.com/microsoft/graphrag -on commit hash 8cb189635e90d49231f3f09b54e69d4daae1371d +on commit hash b860d08a907e834166edf03e617d9cfeac946a64 diff --git a/backend/src/api/index.py b/backend/src/api/index.py index 5553ea2f..e9b7b7bb 100644 --- a/backend/src/api/index.py +++ b/backend/src/api/index.py @@ -58,6 +58,7 @@ ) # TODO: update API to use the AzureStorageClientManager ai_search_url = os.environ["AI_SEARCH_URL"] +ai_search_audience = os.environ["AI_SEARCH_AUDIENCE"] index_route = APIRouter( prefix="/index", @@ -544,9 +545,10 @@ async def delete_index(index_name: str): except Exception: pass - url = ai_search_url index_client = SearchIndexClient( - endpoint=url, credential=DefaultAzureCredential() + endpoint=ai_search_url, + credential=DefaultAzureCredential(), + audience=ai_search_audience ***REMOVED*** ai_search_index_name = f"{sanitized_index_name***REMOVED***_description_embedding" if ai_search_index_name in index_client.list_index_names(): diff --git a/backend/src/api/pipeline-settings.yaml b/backend/src/api/pipeline-settings.yaml index 34dd1074..5acefeb8 100644 --- a/backend/src/api/pipeline-settings.yaml +++ b/backend/src/api/pipeline-settings.yaml @@ -72,6 +72,7 @@ embeddings: title_column: name overwrite: True url: $AI_SEARCH_URL + audience: $AI_SEARCH_AUDIENCE # entity_extraction: # prompt: PLACEHOLDER diff --git a/backend/src/meta_agent/community/retrieve.py b/backend/src/meta_agent/community/retrieve.py index e4bb75f6..cc9260a7 100644 --- a/backend/src/meta_agent/community/retrieve.py +++ b/backend/src/meta_agent/community/retrieve.py @@ -322,8 +322,9 @@ def similarity_search_by_vector( docs = [] for collection_idx, collection_name in enumerate(self.collections): add_on = "-" + str(collection_idx) + audience = os.environ["AI_SEARCH_AUDIENCE"] db_connection = SearchClient( - self.url, collection_name, DefaultAzureCredential() + self.url, collection_name, DefaultAzureCredential(), audience=audience, ***REMOVED*** response = db_connection.search( vector_queries=[vectorized_query], diff --git a/docs/DEPLOYMENT-GUIDE.md b/docs/DEPLOYMENT-GUIDE.md index ec3be900..1f259bdf 100644 --- a/docs/DEPLOYMENT-GUIDE.md +++ b/docs/DEPLOYMENT-GUIDE.md @@ -74,10 +74,11 @@ In the `deploy.parameters.json` file, provide values for the following required `GRAPHRAG_LLM_DEPLOYMENT_NAME` | | Yes | Deployment name of the gpt-4 turbo model. `GRAPHRAG_EMBEDDING_MODEL` | text-embedding-ada-002 | Yes | Name of the Azure OpenAI embedding model. `GRAPHRAG_EMBEDDING_DEPLOYMENT_NAME` | | Yes | Deployment name of the Azure OpenAI embedding model. -`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. +`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. `APIM_NAME` | | No | Hostname of the API. Must be a globally unique name. The API will be accessible at `https://.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. Will default to `https://search.azure.com/` for Azure Commercial cloud but should be overriden for deployments in other Azure clouds.D `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. ## 5. Deploy the solution accelerator diff --git a/infra/deploy.sh b/infra/deploy.sh index 8c438939..0084a144 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="" @@ -129,6 +130,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" @@ -359,6 +364,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 92756b65..a028bebc 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1166,13 +1166,13 @@ tests = ["pytest", "pytest-cov", "pytest-xdist"] [[package]] name = "dask" -version = "2024.6.0" +version = "2024.6.1" description = "Parallel PyData with Task Scheduling" optional = false python-versions = ">=3.9" files = [ - {file = "dask-2024.6.0-py3-none-any.whl", hash = "sha256:de0ced6cd46dbc6c01120c8870457af46d667940805a4be063a74dd467466804"***REMOVED***, - {file = "dask-2024.6.0.tar.gz", hash = "sha256:6882ce7e485336d707e540080ed48e01f9c09485d52a2928ea05f9a9e44bb433"***REMOVED***, + {file = "dask-2024.6.1-py3-none-any.whl", hash = "sha256:3560c2cebd4ebfe3f51d0eaee51adc080a72f8a4d0c58ba97ded139c0fc158c5"***REMOVED***, + {file = "dask-2024.6.1.tar.gz", hash = "sha256:30f074860e9855cacbe67d7abe7fcd3c863d3f82e5469a0ef46d7512caeede07"***REMOVED***, ] [package.dependencies] @@ -1193,25 +1193,28 @@ 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.6.0)"] +distributed = ["distributed (==2024.6.1)"] test = ["pandas[test]", "pre-commit", "pytest", "pytest-cov", "pytest-rerunfailures", "pytest-timeout", "pytest-xdist"] [[package]] name = "dask-expr" -version = "1.1.3" +version = "1.1.4" description = "High Level Expressions for Dask" optional = false python-versions = ">=3.9" files = [ - {file = "dask_expr-1.1.3-py3-none-any.whl", hash = "sha256:e6ad2fab9ffe7dbe0fc52451b5a0dc5588f36cd5677168cfb0b73c70f05e465f"***REMOVED***, - {file = "dask_expr-1.1.3.tar.gz", hash = "sha256:ce8e44dfed30b4d9e6a549d0ed8cb5798273645fb9a16733d0687dc84615a94b"***REMOVED***, + {file = "dask_expr-1.1.4-py3-none-any.whl", hash = "sha256:f517098b650d622b06363848dfcccf833ead7ec2c4c67c0831aa7e5db23347ff"***REMOVED***, + {file = "dask_expr-1.1.4.tar.gz", hash = "sha256:751409a304e697fbd920e3035bdc9af2111194dff5e699bfb25a193286f1e606"***REMOVED***, ] [package.dependencies] -dask = "2024.6.0" +dask = "2024.6.1" pandas = ">=2" pyarrow = ">=7.0.0" +[package.extras] +analyze = ["crick", "distributed"] + [[package]] name = "datashaper" version = "0.0.49" @@ -1645,18 +1648,18 @@ 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"***REMOVED***, - {file = "filelock-3.15.1.tar.gz", hash = "sha256:58a2549afdf9e02e10720eaa4d4470f56386d7a6f72edd7d0596337af8ed7ad8"***REMOVED***, + {file = "filelock-3.15.3-py3-none-any.whl", hash = "sha256:0151273e5b5d6cf753a61ec83b3a9b7d8821c39ae9af9d7ecf2f9e2f17404103"***REMOVED***, + {file = "filelock-3.15.3.tar.gz", hash = "sha256:e1199bf5194a2277273dacd50269f0d87d0682088a3c561c15674ea9005d8635"***REMOVED***, ] [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]] @@ -2030,7 +2033,7 @@ description = "" optional = false python-versions = ">=3.10,<3.13" files = [ - {file = "graphrag-0.0.1-py3-none-any.whl", hash = "sha256:afcf23c41f91f1be084e7634afefb2567681fb6ce72033b4b2b8a331006f79c6"***REMOVED***, + {file = "graphrag-0.0.1-py3-none-any.whl", hash = "sha256:95594bae8ba8b504fd745024699eb2f2325ba6a50600dd59191da76bc7fa1cd4"***REMOVED***, ] [package.dependencies] @@ -3809,13 +3812,13 @@ signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"] [[package]] name = "openai" -version = "1.34.0" +version = "1.35.1" 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"***REMOVED***, - {file = "openai-1.34.0.tar.gz", hash = "sha256:95c8e2da4acd6958e626186957d656597613587195abd0fb2527566a93e76770"***REMOVED***, + {file = "openai-1.35.1-py3-none-any.whl", hash = "sha256:53ef8935cf916dc7ece67fee5a8a09fc4db5aadf4d6e95b5b7f767f3c4432e4d"***REMOVED***, + {file = "openai-1.35.1.tar.gz", hash = "sha256:d85973adc2f4fbb11ba20bfd948e3340b8352f6b8a02f1fa1c387c8eefac8d9d"***REMOVED***, ] [package.dependencies] @@ -4411,20 +4414,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"***REMOVED***, - {file = "proto_plus-1.23.0-py3-none-any.whl", hash = "sha256:a829c79e619e1cf632de091013a4173deed13a55f326ef84f05af6f50ff4c82c"***REMOVED***, + {file = "proto-plus-1.24.0.tar.gz", hash = "sha256:30b72a5ecafe4406b0d339db35b56c4059064e69227b8c3bda7462397f966445"***REMOVED***, + {file = "proto_plus-1.24.0-py3-none-any.whl", hash = "sha256:402576830425e5f6ce4c2a6702400ac79897dab0b4343821aa5188b0fab81a12"***REMOVED***, ] [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" @@ -4448,27 +4451,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"***REMOVED***, - {file = "psutil-5.9.8-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:05806de88103b25903dff19bb6692bd2e714ccf9e668d050d144012055cbca73"***REMOVED***, - {file = "psutil-5.9.8-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:611052c4bc70432ec770d5d54f64206aa7203a101ec273a0cd82418c86503bb7"***REMOVED***, - {file = "psutil-5.9.8-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:50187900d73c1381ba1454cf40308c2bf6f34268518b3f36a9b663ca87e65e36"***REMOVED***, - {file = "psutil-5.9.8-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:02615ed8c5ea222323408ceba16c60e99c3f91639b07da6373fb7e6539abc56d"***REMOVED***, - {file = "psutil-5.9.8-cp27-none-win32.whl", hash = "sha256:36f435891adb138ed3c9e58c6af3e2e6ca9ac2f365efe1f9cfef2794e6c93b4e"***REMOVED***, - {file = "psutil-5.9.8-cp27-none-win_amd64.whl", hash = "sha256:bd1184ceb3f87651a67b2708d4c3338e9b10c5df903f2e3776b62303b26cb631"***REMOVED***, - {file = "psutil-5.9.8-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:aee678c8720623dc456fa20659af736241f575d79429a0e5e9cf88ae0605cc81"***REMOVED***, - {file = "psutil-5.9.8-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8cb6403ce6d8e047495a701dc7c5bd788add903f8986d523e3e20b98b733e421"***REMOVED***, - {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"***REMOVED***, - {file = "psutil-5.9.8-cp36-cp36m-win32.whl", hash = "sha256:7d79560ad97af658a0f6adfef8b834b53f64746d45b403f225b85c5c2c140eee"***REMOVED***, - {file = "psutil-5.9.8-cp36-cp36m-win_amd64.whl", hash = "sha256:27cc40c3493bb10de1be4b3f07cae4c010ce715290a5be22b98493509c6299e2"***REMOVED***, - {file = "psutil-5.9.8-cp37-abi3-win32.whl", hash = "sha256:bc56c2a1b0d15aa3eaa5a60c9f3f8e3e565303b465dbf57a1b730e7a2b9844e0"***REMOVED***, - {file = "psutil-5.9.8-cp37-abi3-win_amd64.whl", hash = "sha256:8db4c1b57507eef143a15a6884ca10f7c73876cdf5d51e713151c1236a0e68cf"***REMOVED***, - {file = "psutil-5.9.8-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:d16bbddf0693323b8c6123dd804100241da461e41d6e332fb0ba6058f630f8c8"***REMOVED***, - {file = "psutil-5.9.8.tar.gz", hash = "sha256:6be126e3225486dff286a8fb9a06246a5253f4c7c53b475ea5f5ac934e64194c"***REMOVED***, + {file = "psutil-6.0.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a021da3e881cd935e64a3d0a20983bda0bb4cf80e4f74fa9bfcb1bc5785360c6"***REMOVED***, + {file = "psutil-6.0.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:1287c2b95f1c0a364d23bc6f2ea2365a8d4d9b726a3be7294296ff7ba97c17f0"***REMOVED***, + {file = "psutil-6.0.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:a9a3dbfb4de4f18174528d87cc352d1f788b7496991cca33c6996f40c9e3c92c"***REMOVED***, + {file = "psutil-6.0.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:6ec7588fb3ddaec7344a825afe298db83fe01bfaaab39155fa84cf1c0d6b13c3"***REMOVED***, + {file = "psutil-6.0.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:1e7c870afcb7d91fdea2b37c24aeb08f98b6d67257a5cb0a8bc3ac68d0f1a68c"***REMOVED***, + {file = "psutil-6.0.0-cp27-none-win32.whl", hash = "sha256:02b69001f44cc73c1c5279d02b30a817e339ceb258ad75997325e0e6169d8b35"***REMOVED***, + {file = "psutil-6.0.0-cp27-none-win_amd64.whl", hash = "sha256:21f1fb635deccd510f69f485b87433460a603919b45e2a324ad65b0cc74f8fb1"***REMOVED***, + {file = "psutil-6.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:c588a7e9b1173b6e866756dde596fd4cad94f9399daf99ad8c3258b3cb2b47a0"***REMOVED***, + {file = "psutil-6.0.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ed2440ada7ef7d0d608f20ad89a04ec47d2d3ab7190896cd62ca5fc4fe08bf0"***REMOVED***, + {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"***REMOVED***, + {file = "psutil-6.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2e8d0054fc88153ca0544f5c4d554d42e33df2e009c4ff42284ac9ebdef4132"***REMOVED***, + {file = "psutil-6.0.0-cp36-cp36m-win32.whl", hash = "sha256:fc8c9510cde0146432bbdb433322861ee8c3efbf8589865c8bf8d21cb30c4d14"***REMOVED***, + {file = "psutil-6.0.0-cp36-cp36m-win_amd64.whl", hash = "sha256:34859b8d8f423b86e4385ff3665d3f4d94be3cdf48221fbe476e883514fdb71c"***REMOVED***, + {file = "psutil-6.0.0-cp37-abi3-win32.whl", hash = "sha256:a495580d6bae27291324fe60cea0b5a7c23fa36a7cd35035a16d93bdcf076b9d"***REMOVED***, + {file = "psutil-6.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:33ea5e1c975250a720b3a6609c490db40dae5d83a4eb315170c4fe0d8b1f34b3"***REMOVED***, + {file = "psutil-6.0.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:ffe7fc9b6b36beadc8c322f84e1caff51e8703b88eee1da46d1e3a6ae11b4fd0"***REMOVED***, + {file = "psutil-6.0.0.tar.gz", hash = "sha256:8faae4f310b6d969fa26ca0545338b21f73c6b15db7c4a8d934a5482faa818f2"***REMOVED***, ] [package.extras] @@ -5824,18 +5828,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"***REMOVED***, - {file = "setuptools-70.0.0.tar.gz", hash = "sha256:f211a66637b8fa059bb28183da127d4e86396c991a942b028c6650d4319c3fd0"***REMOVED***, + {file = "setuptools-70.1.0-py3-none-any.whl", hash = "sha256:d9b8b771455a97c8a9f3ab3448ebe0b29b5e105f1228bba41028be116985a267"***REMOVED***, + {file = "setuptools-70.1.0.tar.gz", hash = "sha256:01a1e793faa5bd89abc851fa15d0a0db26f160890c7102cd8dce643e886b47f5"***REMOVED***, ] [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"