From be8778f4377b8249107153ac3b958c3e99286ed4 Mon Sep 17 00:00:00 2001 From: Jean-Marc SEVIN Date: Tue, 28 Apr 2026 10:35:01 +0200 Subject: [PATCH 01/17] Update environment variables --- .env.example | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.env.example b/.env.example index e5bf486..65b21a9 100644 --- a/.env.example +++ b/.env.example @@ -1,16 +1,18 @@ CLIENT_ORIGINS=https://fake-origin.example.com CLIENT_ORIGINS_REGEX="^http://fake-localhost:.*" ENV=development -##### MISTRAL AZURE ##### -AZURE_MISTRAL_SWEDEN_API_BASE=https://fake-mistral-sweden.example.com/models -AZURE_MISTRAL_SWEDEN_API_KEY=FAKE_MISTRAL_SWEDEN_API_KEY +##### AZURE ##### AZURE_MISTRAL_API_BASE=https://fake-mistral.example.com/models AZURE_MISTRAL_API_KEY=FAKE_MISTRAL_API_KEY AZURE_APIM_API_BASE=https://fake-apim-mistral.example.com/models AZURE_APIM_API_KEY=FAKE_APIM_API_KEY +##### MISTRAL ##### +MISTRAL_API_KEY=FAKE_MISTRAL_API_KEY +MISTRAL_LLM_MODEL_NAME=fake-mistral-llm-model + ############ FOR RAG METRICS ########### AZURE_API_KEY=FAKE_AZURE_API_KEY AZURE_API_BASE=https://fake-openai.example.com @@ -35,8 +37,6 @@ QDRANT_PORT=1234 ######## TIKA ############## TIKA_URL_BASE=https://fake-tika.example.com/ -LITELLM_LOG=FAKE_LOG_LEVEL - HASH_SALT="FAKE_HASH_SALT" HASH_ALGO="FAKE_HASH_ALGO" AUTH_TOKEN_EXPIRATION=9999 From 47e7e2c4f683f1c6cb9c335f8ba4ea52656931b3 Mon Sep 17 00:00:00 2001 From: Jean-Marc SEVIN Date: Tue, 28 Apr 2026 10:35:19 +0200 Subject: [PATCH 02/17] Update poetry requirements --- poetry.lock | 664 +++++++++++++++++++------------------------------ pyproject.toml | 9 +- 2 files changed, 264 insertions(+), 409 deletions(-) diff --git a/poetry.lock b/poetry.lock index 2da2046..8d99fd6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 2.1.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.2.1 and should not be changed by hand. [[package]] name = "aiohappyeyeballs" @@ -7,7 +7,6 @@ description = "Happy Eyeballs for asyncio" optional = false python-versions = ">=3.9" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "aiohappyeyeballs-2.6.1-py3-none-any.whl", hash = "sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8"}, {file = "aiohappyeyeballs-2.6.1.tar.gz", hash = "sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558"}, @@ -20,7 +19,6 @@ description = "Async http client/server framework (asyncio)" optional = false python-versions = ">=3.9" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "aiohttp-3.13.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d5a372fd5afd301b3a89582817fdcdb6c34124787c70dbcc616f259013e7eef7"}, {file = "aiohttp-3.13.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:147e422fd1223005c22b4fe080f5d93ced44460f5f9c105406b753612b587821"}, @@ -164,7 +162,6 @@ description = "aiosignal: a list of registered asynchronous callbacks" optional = false python-versions = ">=3.9" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "aiosignal-1.4.0-py3-none-any.whl", hash = "sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e"}, {file = "aiosignal-1.4.0.tar.gz", hash = "sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7"}, @@ -181,7 +178,6 @@ description = "A database migration tool for SQLAlchemy." optional = false python-versions = ">=3.10" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "alembic-1.18.3-py3-none-any.whl", hash = "sha256:12a0359bfc068a4ecbb9b3b02cf77856033abfdb59e4a5aca08b7eacd7b74ddd"}, {file = "alembic-1.18.3.tar.gz", hash = "sha256:1212aa3778626f2b0f0aa6dd4e99a5f99b94bd25a0c1ac0bba3be65e081e50b0"}, @@ -203,7 +199,6 @@ description = "Reusable constraint types to use with typing.Annotated" optional = false python-versions = ">=3.8" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, @@ -216,7 +211,6 @@ description = "High-level concurrency and networking framework on top of asyncio optional = false python-versions = ">=3.9" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "anyio-4.12.1-py3-none-any.whl", hash = "sha256:d405828884fc140aa80a3c667b8beed277f1dfedec42ba031bd6ac3db606ab6c"}, {file = "anyio-4.12.1.tar.gz", hash = "sha256:41cfcc3a4c85d3f05c932da7c26d0201ac36f72abd4435ba90d0464a3ffed703"}, @@ -237,7 +231,6 @@ description = "A small Python module for determining appropriate platform-specif optional = false python-versions = "*" groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"}, {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"}, @@ -250,7 +243,6 @@ description = "An abstract syntax tree for Python with inference support." optional = false python-versions = ">=3.7.2" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "astroid-2.15.8-py3-none-any.whl", hash = "sha256:1aa149fc5c6589e3d0ece885b4491acd80af4f087baafa3fb5203b113e68cd3c"}, {file = "astroid-2.15.8.tar.gz", hash = "sha256:6c107453dffee9055899705de3c9ead36e74119cee151e5a9aaf7f0b0e020a6a"}, @@ -271,7 +263,7 @@ description = "Timeout context manager for asyncio programs" optional = false python-versions = ">=3.7" groups = ["main", "metrics"] -markers = "(sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\") and python_version == \"3.10\"" +markers = "python_version == \"3.10\"" files = [ {file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"}, {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"}, @@ -284,7 +276,6 @@ description = "Classes Without Boilerplate" optional = false python-versions = ">=3.9" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "attrs-25.4.0-py3-none-any.whl", hash = "sha256:adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373"}, {file = "attrs-25.4.0.tar.gz", hash = "sha256:16d5969b87f0859ef33a48b35d55ac1be6e42ae49d5e853b597db70c35c57e11"}, @@ -297,7 +288,6 @@ description = "AutoGen agents and teams library" optional = false python-versions = ">=3.10" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "autogen_agentchat-0.5.7-py3-none-any.whl", hash = "sha256:b9c8548e02eed9765c02800182b13bd9747f1561b23df66983bedd8c5fdddb86"}, {file = "autogen_agentchat-0.5.7.tar.gz", hash = "sha256:6f888f03224d658cc130548c3e42558a177a7f7f3eb59b414396c412ec282728"}, @@ -313,7 +303,6 @@ description = "Foundational interfaces and agent runtime implementation for Auto optional = false python-versions = ">=3.10" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "autogen_core-0.5.7-py3-none-any.whl", hash = "sha256:a276af987b7861092194bfd73bab49ac36f3fee55958a60b0b43ea67612d2e50"}, {file = "autogen_core-0.5.7.tar.gz", hash = "sha256:0e3b23b64bd2c7c3180ab4431c137104473e11a846088cc2dd629a0e1fdfbf2f"}, @@ -334,7 +323,6 @@ description = "AutoGen extensions library" optional = false python-versions = ">=3.10" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "autogen_ext-0.5.7-py3-none-any.whl", hash = "sha256:1744195107d814621dc0e967b7f7a4fa09e063fa5ed728c3ba118e9aa88acad2"}, {file = "autogen_ext-0.5.7.tar.gz", hash = "sha256:987aa70d8eecd05c9dea4aad793e9d1369a3d3ceb022dfeafb4cd98b6b4869fc"}, @@ -381,20 +369,35 @@ video-surfer = ["autogen-agentchat (==0.5.7)", "ffmpeg-python", "openai-whisper" web-surfer = ["autogen-agentchat (==0.5.7)", "magika (>=0.6.1rc2)", "markitdown[all] (>=0.1.0a3,<0.2.0)", "pillow (>=11.0.0)", "playwright (>=1.48.0)"] [[package]] -name = "azure-ai-agents" -version = "1.2.0b6" -description = "Microsoft Corporation Azure AI Agents Client Library for Python" +name = "azure-ai-contentsafety" +version = "1.0.0" +description = "Microsoft Azure AI Content Safety Client Library for Python" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "azure-ai-contentsafety-1.0.0.tar.gz", hash = "sha256:052731bd1419a720fa00910f46bf3428c4e5bd05280da7393d0c8106d46cc6d7"}, + {file = "azure_ai_contentsafety-1.0.0-py3-none-any.whl", hash = "sha256:e1c5574a541f9290fdd071d23535e14b1f463af231a6f0ac0f917e125f0463cf"}, +] + +[package.dependencies] +azure-core = ">=1.28.0,<2.0.0" +isodate = ">=0.6.1,<1.0.0" + +[[package]] +name = "azure-ai-contentunderstanding" +version = "1.1.0" +description = "Microsoft Corporation Azure AI Content Understanding Client Library for Python" optional = false python-versions = ">=3.9" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "azure_ai_agents-1.2.0b6-py3-none-any.whl", hash = "sha256:ce23ad8fb9791118905be1ec8eae5c907cca2e536a455f1d3b830062c72cf2a7"}, - {file = "azure_ai_agents-1.2.0b6.tar.gz", hash = "sha256:d3c10848c3b19dec98a292f8c10cee4ba4aac1050d4faabf9c2e2456b727f528"}, + {file = "azure_ai_contentunderstanding-1.1.0-py3-none-any.whl", hash = "sha256:d1d6bdeffe02f5c8cc5309f0e120a1338f51af04638605f9617b7b501e2d1dd6"}, + {file = "azure_ai_contentunderstanding-1.1.0.tar.gz", hash = "sha256:00f39c7cf2ba50c8d4586315f4295a45fad0881daaff07d13d33aea2bafc7ec8"}, ] [package.dependencies] -azure-core = ">=1.30.0" +azure-core = ">=1.37.0" isodate = ">=0.6.1" typing-extensions = ">=4.6.0" @@ -405,7 +408,6 @@ description = "Microsoft Azure AI Inference Client Library for Python" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "azure_ai_inference-1.0.0b9-py3-none-any.whl", hash = "sha256:49823732e674092dad83bb8b0d1b65aa73111fab924d61349eb2a8cdc0493990"}, {file = "azure_ai_inference-1.0.0b9.tar.gz", hash = "sha256:1feb496bd84b01ee2691befc04358fa25d7c344d8288e99364438859ad7cd5a4"}, @@ -413,7 +415,6 @@ files = [ [package.dependencies] azure-core = ">=1.30.0" -azure-core-tracing-opentelemetry = {version = "*", optional = true, markers = "extra == \"opentelemetry\""} isodate = ">=0.6.1" typing-extensions = ">=4.6.0" @@ -423,23 +424,23 @@ prompts = ["pyyaml"] [[package]] name = "azure-ai-projects" -version = "1.1.0b4" -description = "Microsoft Azure AI Projects Client Library for Python" +version = "2.1.0" +description = "Microsoft Corporation Azure AI Projects Client Library for Python" optional = false python-versions = ">=3.9" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "azure_ai_projects-1.1.0b4-py3-none-any.whl", hash = "sha256:d8aab84fd7cd7c5937e78141e37ca4473dc5ed6cce2c0490c634418abe14afea"}, - {file = "azure_ai_projects-1.1.0b4.tar.gz", hash = "sha256:39e2f1396270b375069c2d9c82ccfe91c11384eca9f61d59adbc12fb6d6a32ca"}, + {file = "azure_ai_projects-2.1.0-py3-none-any.whl", hash = "sha256:6f259d8eb9167d2dfd372006d0221a8118faeaeb05829fa898b595bc6f19c699"}, + {file = "azure_ai_projects-2.1.0.tar.gz", hash = "sha256:f0749fa9a174255aa1a5550fb6078208521518472907a4c6dd552767d9b39caa"}, ] [package.dependencies] -azure-ai-agents = ">=1.2.0b3" -azure-core = ">=1.30.0" +azure-core = ">=1.37.0" +azure-identity = ">=1.15.0" azure-storage-blob = ">=12.15.0" isodate = ">=0.6.1" -typing-extensions = ">=4.12.2" +openai = ">=2.8.0" +typing-extensions = ">=4.11" [[package]] name = "azure-common" @@ -448,7 +449,6 @@ description = "Microsoft Azure Client Library for Python (Common)" optional = false python-versions = "*" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "azure-common-1.1.28.zip", hash = "sha256:4ac0cd3214e36b6a1b6a442686722a5d8cc449603aa833f3f0f40bda836704a3"}, {file = "azure_common-1.1.28-py2.py3-none-any.whl", hash = "sha256:5c12d3dcf4ec20599ca6b0d3e09e86e146353d443e7fcc050c9a19c1f9df20ad"}, @@ -461,7 +461,6 @@ description = "Microsoft Azure Core Library for Python" optional = false python-versions = ">=3.9" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "azure_core-1.38.0-py3-none-any.whl", hash = "sha256:ab0c9b2cd71fecb1842d52c965c95285d3cfb38902f6766e4a471f1cd8905335"}, {file = "azure_core-1.38.0.tar.gz", hash = "sha256:8194d2682245a3e4e3151a667c686464c3786fed7918b394d035bdcd61bb5993"}, @@ -475,40 +474,6 @@ typing-extensions = ">=4.6.0" aio = ["aiohttp (>=3.0)"] tracing = ["opentelemetry-api (>=1.26,<2.0)"] -[[package]] -name = "azure-core-tracing-opentelemetry" -version = "1.0.0b12" -description = "Microsoft Azure Azure Core OpenTelemetry plugin Library for Python" -optional = false -python-versions = ">=3.8" -groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" -files = [ - {file = "azure_core_tracing_opentelemetry-1.0.0b12-py3-none-any.whl", hash = "sha256:38fd42709f1cc4bbc4f2797008b1c30a6a01617e49910c05daa3a0d0c65053ac"}, - {file = "azure_core_tracing_opentelemetry-1.0.0b12.tar.gz", hash = "sha256:bb454142440bae11fd9d68c7c1d67ae38a1756ce808c5e4d736730a7b4b04144"}, -] - -[package.dependencies] -azure-core = ">=1.24.0" -opentelemetry-api = ">=1.12.0" - -[[package]] -name = "azure-cosmos" -version = "4.14.5" -description = "Microsoft Azure Cosmos Client Library for Python" -optional = false -python-versions = ">=3.9" -groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" -files = [ - {file = "azure_cosmos-4.14.5-py3-none-any.whl", hash = "sha256:1a50d2019f81380b4cf35aff881290607ff1bf1287611abf067a965b9ea46f5d"}, - {file = "azure_cosmos-4.14.5.tar.gz", hash = "sha256:3239a605fe29c94b77391826773aa3d0d9bbe4b93903fce5b6434b0f32742ba7"}, -] - -[package.dependencies] -azure-core = ">=1.30.0" -typing-extensions = ">=4.6.0" - [[package]] name = "azure-identity" version = "1.25.1" @@ -516,7 +481,6 @@ description = "Microsoft Azure Identity Library for Python" optional = false python-versions = ">=3.9" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "azure_identity-1.25.1-py3-none-any.whl", hash = "sha256:e9edd720af03dff020223cd269fa3a61e8f345ea75443858273bcb44844ab651"}, {file = "azure_identity-1.25.1.tar.gz", hash = "sha256:87ca8328883de6036443e1c37b40e8dc8fb74898240f61071e09d2e369361456"}, @@ -536,7 +500,6 @@ description = "Microsoft Azure Cognitive Search Client Library for Python" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "azure_search_documents-11.6.0-py3-none-any.whl", hash = "sha256:c3eb2deaf7926844e99a881830861225ef68e8b3bc067a76019e87fc7f5586dc"}, {file = "azure_search_documents-11.6.0.tar.gz", hash = "sha256:fcc807076ff82024be576ffccb0d0f3261e5c2a112a6666b86ec70bbdb2e1d64"}, @@ -555,7 +518,6 @@ description = "Microsoft Azure Blob Storage Client Library for Python" optional = false python-versions = ">=3.9" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "azure_storage_blob-12.28.0-py3-none-any.whl", hash = "sha256:00fb1db28bf6a7b7ecaa48e3b1d5c83bfadacc5a678b77826081304bd87d6461"}, {file = "azure_storage_blob-12.28.0.tar.gz", hash = "sha256:e7d98ea108258d29aa0efbfd591b2e2075fa1722a2fae8699f0b3c9de11eff41"}, @@ -577,7 +539,6 @@ description = "Function decoration for backoff and retry" optional = false python-versions = ">=3.7,<4.0" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "backoff-2.2.1-py3-none-any.whl", hash = "sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8"}, {file = "backoff-2.2.1.tar.gz", hash = "sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba"}, @@ -590,7 +551,6 @@ description = "Screen-scraping library" optional = false python-versions = ">=3.7.0" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "beautifulsoup4-4.14.3-py3-none-any.whl", hash = "sha256:0918bfe44902e6ad8d57732ba310582e98da931428d231a5ecb9e7c703a735bb"}, {file = "beautifulsoup4-4.14.3.tar.gz", hash = "sha256:6292b1c5186d356bba669ef9f7f051757099565ad9ada5dd630bd9de5fa7fb86"}, @@ -614,7 +574,6 @@ description = "The bidirectional mapping library for Python." optional = false python-versions = ">=3.8" groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "bidict-0.23.1-py3-none-any.whl", hash = "sha256:5dae8d4d79b552a71cbabc7deb25dfe8ce710b17ff41711e13010ead2abfc3e5"}, {file = "bidict-0.23.1.tar.gz", hash = "sha256:03069d763bc387bbd20e7d49914e75fc4132a41937fa3405417e1a5a2d006d71"}, @@ -627,7 +586,6 @@ description = "The uncompromising code formatter." optional = false python-versions = ">=3.9" groups = ["dev"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "black-24.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e6668650ea4b685440857138e5fe40cde4d652633b1bdffc62933d0db4ed9812"}, {file = "black-24.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1c536fcf674217e87b8cc3657b81809d3c085d7bf3ef262ead700da345bfa6ea"}, @@ -675,7 +633,6 @@ description = "Fast, simple object-to-object and broadcast signaling" optional = false python-versions = ">=3.9" groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "blinker-1.9.0-py3-none-any.whl", hash = "sha256:ba0efaa9080b619ff2f3459d1d500c57bddea4a6b424b60a91141db6fd2f08bc"}, {file = "blinker-1.9.0.tar.gz", hash = "sha256:b4ce2265a7abece45e7cc896e98dbebe6cead56bcf805a3d23136d145f5445bf"}, @@ -688,7 +645,6 @@ description = "Python bindings for the Brotli compression library" optional = false python-versions = "*" groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "brotli-1.2.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:99cfa69813d79492f0e5d52a20fd18395bc82e671d5d40bd5a91d13e75e468e8"}, {file = "brotli-1.2.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:3ebe801e0f4e56d17cd386ca6600573e3706ce1845376307f5d2cbd32149b69a"}, @@ -799,7 +755,6 @@ description = "Dummy package for Beautiful Soup (beautifulsoup4)" optional = false python-versions = "*" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "bs4-0.0.2-py2.py3-none-any.whl", hash = "sha256:abf8742c0805ef7f662dce4b51cca104cffe52b835238afc169142ab9b3fbccc"}, {file = "bs4-0.0.2.tar.gz", hash = "sha256:a48685c58f50fe127722417bae83fe6badf500d54b55f7e39ffe43b798653925"}, @@ -815,7 +770,6 @@ description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.7" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "certifi-2026.1.4-py3-none-any.whl", hash = "sha256:9943707519e4add1115f44c2bc244f782c0249876bf51b6599fee1ffbedd685c"}, {file = "certifi-2026.1.4.tar.gz", hash = "sha256:ac726dd470482006e014ad384921ed6438c457018f4b3d204aea4281258b2120"}, @@ -914,7 +868,7 @@ files = [ {file = "cffi-2.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:b882b3df248017dba09d6b16defe9b5c407fe32fc7c65a9c69798e6175601be9"}, {file = "cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529"}, ] -markers = {main = "(sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\") and platform_python_implementation != \"PyPy\"", metrics = "(sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\") and (platform_python_implementation == \"CPython\" or implementation_name == \"pypy\") and (implementation_name == \"pypy\" or sys_platform == \"win32\")"} +markers = {main = "platform_python_implementation != \"PyPy\"", metrics = "platform_python_implementation == \"CPython\" and sys_platform == \"win32\" or implementation_name == \"pypy\""} [package.dependencies] pycparser = {version = "*", markers = "implementation_name != \"PyPy\""} @@ -926,7 +880,6 @@ description = "The Real First Universal Charset Detector. Open, modern and activ optional = false python-versions = ">=3.7" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "charset_normalizer-3.4.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e824f1492727fa856dd6eda4f7cee25f8518a12f3c4a56a74e8095695089cf6d"}, {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4bd5d4137d500351a30687c2d3971758aac9a19208fc110ccb9d7188fbe709e8"}, @@ -1050,7 +1003,6 @@ description = "Composable command line interface toolkit" optional = false python-versions = ">=3.10" groups = ["main", "dev", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "click-8.3.1-py3-none-any.whl", hash = "sha256:981153a64e25f12d547d3426c367a4857371575ee7ad18df2a6183ab0545b2a6"}, {file = "click-8.3.1.tar.gz", hash = "sha256:12ff4785d337a1bb490bb7e9c2b1ee5da3112e94a8622f26a6c77f5d2fc6842a"}, @@ -1070,7 +1022,7 @@ files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] -markers = {main = "(sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\") and (platform_system == \"Windows\" or sys_platform == \"win32\")", dev = "(sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\") and (platform_system == \"Windows\" or sys_platform == \"win32\")", metrics = "(sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\") and platform_system == \"Windows\""} +markers = {main = "platform_system == \"Windows\" or sys_platform == \"win32\"", dev = "platform_system == \"Windows\" or sys_platform == \"win32\"", metrics = "platform_system == \"Windows\""} [[package]] name = "configargparse" @@ -1079,7 +1031,6 @@ description = "A drop-in replacement for argparse that allows options to also be optional = false python-versions = ">=3.6" groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "configargparse-1.7.1-py3-none-any.whl", hash = "sha256:8b586a31f9d873abd1ca527ffbe58863c99f36d896e2829779803125e83be4b6"}, {file = "configargparse-1.7.1.tar.gz", hash = "sha256:79c2ddae836a1e5914b71d58e4b9adbd9f7779d4e6351a637b7d2d9b6c46d3d9"}, @@ -1096,7 +1047,6 @@ description = "Code coverage measurement for Python" optional = false python-versions = ">=3.10" groups = ["dev"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "coverage-7.13.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f4af3b01763909f477ea17c962e2cca8f39b350a4e46e3a30838b2c12e31b81b"}, {file = "coverage-7.13.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:36393bd2841fa0b59498f75466ee9bdec4f770d3254f031f23e8fd8e140ffdd2"}, @@ -1205,7 +1155,6 @@ description = "cryptography is a package which provides cryptographic recipes an optional = false python-versions = "!=3.9.0,!=3.9.1,>=3.8" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "cryptography-46.0.4-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:281526e865ed4166009e235afadf3a4c4cba6056f99336a99efba65336fd5485"}, {file = "cryptography-46.0.4-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5f14fba5bf6f4390d7ff8f086c566454bff0411f6d8aa7af79c88b6f9267aecc"}, @@ -1279,7 +1228,6 @@ description = "Easily serialize dataclasses to and from JSON." optional = false python-versions = "<4.0,>=3.7" groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "dataclasses_json-0.6.7-py3-none-any.whl", hash = "sha256:0dbf33f26c8d5305befd61b39d2b3414e8a407bedc2834dea9b8d642666fb40a"}, {file = "dataclasses_json-0.6.7.tar.gz", hash = "sha256:b6b3e528266ea45b9535223bc53ca645f5208833c29229e847b3f26a1cc55fc0"}, @@ -1296,7 +1244,6 @@ description = "HuggingFace community-driven open-source library of datasets" optional = false python-versions = ">=3.9.0" groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "datasets-4.5.0-py3-none-any.whl", hash = "sha256:b5d7e08096ffa407dd69e58b1c0271c9b2506140839b8d99af07375ad31b6726"}, {file = "datasets-4.5.0.tar.gz", hash = "sha256:00c698ce1c2452e646cc5fad47fef39d3fe78dd650a8a6eb205bb45eb63cd500"}, @@ -1341,7 +1288,6 @@ description = "serialize all of Python" optional = false python-versions = ">=3.8" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "dill-0.4.0-py3-none-any.whl", hash = "sha256:44f54bf6412c2c8464c14e8243eb163690a9800dbe2c367330883b19c7561049"}, {file = "dill-0.4.0.tar.gz", hash = "sha256:0633f1d2df477324f53a895b02c901fb961bdbf65a17122586ea7019292cbcf0"}, @@ -1358,7 +1304,6 @@ description = "Disk Cache -- Disk and file backed persistent cache." optional = false python-versions = ">=3" groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "diskcache-5.6.3-py3-none-any.whl", hash = "sha256:5e31b2d5fbad117cc363ebaf6b689474db18a1f6438bc82358b024abd4c2ca19"}, {file = "diskcache-5.6.3.tar.gz", hash = "sha256:2c3a3fa2743d8535d832ec61c2054a1641f41775aa7c556758a109941e33e4fc"}, @@ -1371,7 +1316,6 @@ description = "Distro - an OS platform information API" optional = false python-versions = ">=3.6" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2"}, {file = "distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed"}, @@ -1384,7 +1328,6 @@ description = "Parse Python docstrings in reST, Google and Numpydoc format" optional = false python-versions = ">=3.8" groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "docstring_parser-0.17.0-py3-none-any.whl", hash = "sha256:cf2569abd23dce8099b300f9b4fa8191e9582dda731fd533daf54c4551658708"}, {file = "docstring_parser-0.17.0.tar.gz", hash = "sha256:583de4a309722b3315439bb31d64ba3eebada841f2e2cee23b99df001434c912"}, @@ -1402,7 +1345,6 @@ description = "EcoLogits tracks and estimates the energy consumption and environ optional = false python-versions = "<4,>=3.9" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "ecologits-0.5.2-py3-none-any.whl", hash = "sha256:d228aba35e56ee22080ea205a0955d914384dd4be82a26ed31e9017aa503ea58"}, {file = "ecologits-0.5.2.tar.gz", hash = "sha256:33e9ec145c733306dae86a78a875064fc040f94dcd6b3b7e5dd7de8bfe94ab65"}, @@ -1429,7 +1371,7 @@ description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" groups = ["main", "dev", "metrics"] -markers = "(sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\") and python_version == \"3.10\"" +markers = "python_version == \"3.10\"" files = [ {file = "exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598"}, {file = "exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219"}, @@ -1448,7 +1390,6 @@ description = "FastAPI framework, high performance, easy to learn, fast to code, optional = false python-versions = ">=3.8" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "fastapi-0.115.14-py3-none-any.whl", hash = "sha256:6c0c8bf9420bd58f565e585036d971872472b4f7d3f6c73b698e10cffdefb3ca"}, {file = "fastapi-0.115.14.tar.gz", hash = "sha256:b1de15cdc1c499a4da47914db35d0e4ef8f1ce62b624e94e0e5824421df99739"}, @@ -1470,7 +1411,6 @@ description = "Python bindings to Rust's UUID library." optional = false python-versions = ">=3.8" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "fastuuid-0.14.0-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:6e6243d40f6c793c3e2ee14c13769e341b90be5ef0c23c82fa6515a96145181a"}, {file = "fastuuid-0.14.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:13ec4f2c3b04271f62be2e1ce7e95ad2dd1cf97e94503a3760db739afbd48f00"}, @@ -1559,7 +1499,6 @@ description = "A platform independent file lock." optional = false python-versions = ">=3.10" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "filelock-3.20.3-py3-none-any.whl", hash = "sha256:4b0dda527ee31078689fc205ec4f1c1bf7d56cf88b6dc9426c4f230e46c2dce1"}, {file = "filelock-3.20.3.tar.gz", hash = "sha256:18c57ee915c7ec61cff0ecf7f0f869936c7c30191bb0cf406f1341778d0834e1"}, @@ -1572,7 +1511,6 @@ description = "the modular source code checker: pep8 pyflakes and co" optional = false python-versions = ">=3.8.1" groups = ["dev"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "flake8-6.1.0-py2.py3-none-any.whl", hash = "sha256:ffdfce58ea94c6580c77888a86506937f9a1a227dfcd15f245d694ae20a6b6e5"}, {file = "flake8-6.1.0.tar.gz", hash = "sha256:d5b3857f07c030bdb5bf41c7f53799571d75c4491748a3adcd47de929e34cd23"}, @@ -1590,7 +1528,6 @@ description = "A simple framework for building complex web applications." optional = false python-versions = ">=3.9" groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "flask-3.1.2-py3-none-any.whl", hash = "sha256:ca1d8112ec8a6158cc29ea4858963350011b5c846a414cdb7a954aa9e967d03c"}, {file = "flask-3.1.2.tar.gz", hash = "sha256:bf656c15c80190ed628ad08cdfd3aaa35beb087855e2f494910aa3774cc4fd87"}, @@ -1615,7 +1552,6 @@ description = "A Flask extension simplifying CORS support" optional = false python-versions = "<4.0,>=3.9" groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "flask_cors-6.0.2-py3-none-any.whl", hash = "sha256:e57544d415dfd7da89a9564e1e3a9e515042df76e12130641ca6f3f2f03b699a"}, {file = "flask_cors-6.0.2.tar.gz", hash = "sha256:6e118f3698249ae33e429760db98ce032a8bf9913638d085ca0f4c5534ad2423"}, @@ -1632,7 +1568,6 @@ description = "User authentication and session management for Flask." optional = false python-versions = ">=3.7" groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "Flask-Login-0.6.3.tar.gz", hash = "sha256:5e23d14a607ef12806c699590b89d0f0e0d67baeec599d75947bf9c147330333"}, {file = "Flask_Login-0.6.3-py3-none-any.whl", hash = "sha256:849b25b82a436bf830a054e74214074af59097171562ab10bfa999e6b78aae5d"}, @@ -1649,7 +1584,6 @@ description = "A list-like structure which implements collections.abc.MutableSeq optional = false python-versions = ">=3.9" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "frozenlist-1.8.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b37f6d31b3dcea7deb5e9696e529a6aa4a898adc33db82da12e4c60a7c4d2011"}, {file = "frozenlist-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ef2b7b394f208233e471abc541cc6991f907ffd47dc72584acee3147899d6565"}, @@ -1790,7 +1724,6 @@ description = "File-system specification" optional = false python-versions = ">=3.9" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "fsspec-2025.10.0-py3-none-any.whl", hash = "sha256:7c7712353ae7d875407f97715f0e1ffcc21e33d5b24556cb1e090ae9409ec61d"}, {file = "fsspec-2025.10.0.tar.gz", hash = "sha256:b6789427626f068f9a83ca4e8a3cc050850b6c0f71f99ddb4f542b8266a26a59"}, @@ -1834,7 +1767,6 @@ description = "Coroutine-based network library" optional = false python-versions = ">=3.9" groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "gevent-25.5.1-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:8e5a0fab5e245b15ec1005b3666b0a2e867c26f411c8fe66ae1afe07174a30e9"}, {file = "gevent-25.5.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7b80a37f2fb45ee4a8f7e64b77dd8a842d364384046e394227b974a4e9c9a52"}, @@ -1897,7 +1829,6 @@ description = "HTTP client library for gevent" optional = false python-versions = ">=3.9" groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "geventhttpclient-2.3.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7633377aac25e1aeb9f34a8e64e0688eaee3c47471e199489ae267bc399078b8"}, {file = "geventhttpclient-2.3.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9537bc6ef21ba4d50d4a48ddbe12ac5168857ebf34ce1452d290ecf6d68d9e58"}, @@ -2052,7 +1983,7 @@ files = [ {file = "greenlet-3.3.1-cp314-cp314t-win_amd64.whl", hash = "sha256:301860987846c24cb8964bdec0e31a96ad4a2a801b41b4ef40963c1b44f33451"}, {file = "greenlet-3.3.1.tar.gz", hash = "sha256:41848f3230b58c08bb43dee542e74a2a2e34d3c59dc3076cec9151aeeedcae98"}, ] -markers = {main = "(sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\") and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\")", metrics = "(sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\") and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\" or platform_python_implementation == \"CPython\")"} +markers = {main = "platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\"", metrics = "platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\" or platform_python_implementation == \"CPython\""} [package.extras] docs = ["Sphinx", "furo"] @@ -2065,7 +1996,6 @@ description = "HTTP/2-based RPC framework" optional = false python-versions = ">=3.9" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "grpcio-1.76.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:65a20de41e85648e00305c1bb09a3598f840422e522277641145a32d42dcefcc"}, {file = "grpcio-1.76.0-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:40ad3afe81676fd9ec6d9d406eda00933f218038433980aa19d401490e46ecde"}, @@ -2143,7 +2073,6 @@ description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" optional = false python-versions = ">=3.8" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86"}, {file = "h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1"}, @@ -2156,7 +2085,6 @@ description = "Pure-Python HTTP/2 protocol implementation" optional = false python-versions = ">=3.9" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "h2-4.3.0-py3-none-any.whl", hash = "sha256:c438f029a25f7945c69e0ccf0fb951dc3f73a5f6412981daee861431b70e2bdd"}, {file = "h2-4.3.0.tar.gz", hash = "sha256:6c59efe4323fa18b47a632221a1888bd7fde6249819beda254aeca909f221bf1"}, @@ -2166,6 +2094,45 @@ files = [ hpack = ">=4.1,<5" hyperframe = ">=6.1,<7" +[[package]] +name = "hf-xet" +version = "1.4.3" +description = "Fast transfer of large files with the Hugging Face Hub." +optional = false +python-versions = ">=3.8" +groups = ["main", "metrics"] +markers = "platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"arm64\" or platform_machine == \"aarch64\"" +files = [ + {file = "hf_xet-1.4.3-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:7551659ba4f1e1074e9623996f28c3873682530aee0a846b7f2f066239228144"}, + {file = "hf_xet-1.4.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:bee693ada985e7045997f05f081d0e12c4c08bd7626dc397f8a7c487e6c04f7f"}, + {file = "hf_xet-1.4.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:21644b404bb0100fe3857892f752c4d09642586fd988e61501c95bbf44b393a3"}, + {file = "hf_xet-1.4.3-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:987f09cfe418237812896a6736b81b1af02a3a6dcb4b4944425c4c4fca7a7cf8"}, + {file = "hf_xet-1.4.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:60cf7fc43a99da0a853345cf86d23738c03983ee5249613a6305d3e57a5dca74"}, + {file = "hf_xet-1.4.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:2815a49a7a59f3e2edf0cf113ae88e8cb2ca2a221bf353fb60c609584f4884d4"}, + {file = "hf_xet-1.4.3-cp313-cp313t-win_amd64.whl", hash = "sha256:42ee323265f1e6a81b0e11094564fb7f7e0ec75b5105ffd91ae63f403a11931b"}, + {file = "hf_xet-1.4.3-cp313-cp313t-win_arm64.whl", hash = "sha256:27c976ba60079fb8217f485b9c5c7fcd21c90b0367753805f87cb9f3cdc4418a"}, + {file = "hf_xet-1.4.3-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:5251d5ece3a81815bae9abab41cf7ddb7bcb8f56411bce0827f4a3071c92fdc6"}, + {file = "hf_xet-1.4.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1feb0f3abeacee143367c326a128a2e2b60868ec12a36c225afb1d6c5a05e6d2"}, + {file = "hf_xet-1.4.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8b301fc150290ca90b4fccd079829b84bb4786747584ae08b94b4577d82fb791"}, + {file = "hf_xet-1.4.3-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:d972fbe95ddc0d3c0fc49b31a8a69f47db35c1e3699bf316421705741aab6653"}, + {file = "hf_xet-1.4.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c5b48db1ee344a805a1b9bd2cda9b6b65fe77ed3787bd6e87ad5521141d317cd"}, + {file = "hf_xet-1.4.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:22bdc1f5fb8b15bf2831440b91d1c9bbceeb7e10c81a12e8d75889996a5c9da8"}, + {file = "hf_xet-1.4.3-cp314-cp314t-win_amd64.whl", hash = "sha256:0392c79b7cf48418cd61478c1a925246cf10639f4cd9d94368d8ca1e8df9ea07"}, + {file = "hf_xet-1.4.3-cp314-cp314t-win_arm64.whl", hash = "sha256:681c92a07796325778a79d76c67011764ecc9042a8c3579332b61b63ae512075"}, + {file = "hf_xet-1.4.3-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:d0da85329eaf196e03e90b84c2d0aca53bd4573d097a75f99609e80775f98025"}, + {file = "hf_xet-1.4.3-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:e23717ce4186b265f69afa66e6f0069fe7efbf331546f5c313d00e123dc84583"}, + {file = "hf_xet-1.4.3-cp37-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc360b70c815bf340ed56c7b8c63aacf11762a4b099b2fe2c9bd6d6068668c08"}, + {file = "hf_xet-1.4.3-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:39f2d2e9654cd9b4319885733993807aab6de9dfbd34c42f0b78338d6617421f"}, + {file = "hf_xet-1.4.3-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:49ad8a8cead2b56051aa84d7fce3e1335efe68df3cf6c058f22a65513885baac"}, + {file = "hf_xet-1.4.3-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:7716d62015477a70ea272d2d68cd7cad140f61c52ee452e133e139abfe2c17ba"}, + {file = "hf_xet-1.4.3-cp37-abi3-win_amd64.whl", hash = "sha256:6b591fcad34e272a5b02607485e4f2a1334aebf1bc6d16ce8eb1eb8978ac2021"}, + {file = "hf_xet-1.4.3-cp37-abi3-win_arm64.whl", hash = "sha256:7c2c7e20bcfcc946dc67187c203463f5e932e395845d098cc2a93f5b67ca0b47"}, + {file = "hf_xet-1.4.3.tar.gz", hash = "sha256:8ddedb73c8c08928c793df2f3401ec26f95be7f7e516a7bee2fbb546f6676113"}, +] + +[package.extras] +tests = ["pytest"] + [[package]] name = "hpack" version = "4.1.0" @@ -2173,7 +2140,6 @@ description = "Pure-Python HPACK header encoding" optional = false python-versions = ">=3.9" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "hpack-4.1.0-py3-none-any.whl", hash = "sha256:157ac792668d995c657d93111f46b4535ed114f0c9c8d672271bbec7eae1b496"}, {file = "hpack-4.1.0.tar.gz", hash = "sha256:ec5eca154f7056aa06f196a557655c5b009b382873ac8d1e66e79e87535f1dca"}, @@ -2186,7 +2152,6 @@ description = "A minimal low-level HTTP client." optional = false python-versions = ">=3.8" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55"}, {file = "httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8"}, @@ -2209,7 +2174,6 @@ description = "A collection of framework independent HTTP protocol utils." optional = false python-versions = ">=3.9" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "httptools-0.7.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:11d01b0ff1fe02c4c32d60af61a4d613b74fad069e47e06e9067758c01e9ac78"}, {file = "httptools-0.7.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:84d86c1e5afdc479a6fdabf570be0d3eb791df0ae727e8dbc0259ed1249998d4"}, @@ -2263,7 +2227,6 @@ description = "The next generation HTTP client." optional = false python-versions = ">=3.8" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad"}, {file = "httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc"}, @@ -2289,8 +2252,7 @@ version = "0.4.3" description = "Consume Server-Sent Event (SSE) messages with HTTPX." optional = false python-versions = ">=3.9" -groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" +groups = ["main", "metrics"] files = [ {file = "httpx_sse-0.4.3-py3-none-any.whl", hash = "sha256:0ac1c9fe3c0afad2e0ebb25a934a59f4c7823b60792691f779fad2c5568830fc"}, {file = "httpx_sse-0.4.3.tar.gz", hash = "sha256:9b1ed0127459a66014aec3c56bebd93da3c1bc8bb6618c8082039a44889a755d"}, @@ -2298,20 +2260,20 @@ files = [ [[package]] name = "huggingface-hub" -version = "0.29.3" +version = "0.36.2" description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub" optional = false python-versions = ">=3.8.0" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "huggingface_hub-0.29.3-py3-none-any.whl", hash = "sha256:0b25710932ac649c08cdbefa6c6ccb8e88eef82927cacdb048efb726429453aa"}, - {file = "huggingface_hub-0.29.3.tar.gz", hash = "sha256:64519a25716e0ba382ba2d3fb3ca082e7c7eb4a2fc634d200e8380006e0760e5"}, + {file = "huggingface_hub-0.36.2-py3-none-any.whl", hash = "sha256:48f0c8eac16145dfce371e9d2d7772854a4f591bcb56c9cf548accf531d54270"}, + {file = "huggingface_hub-0.36.2.tar.gz", hash = "sha256:1934304d2fb224f8afa3b87007d58501acfda9215b334eed53072dd5e815ff7a"}, ] [package.dependencies] filelock = "*" fsspec = ">=2023.5.0" +hf-xet = {version = ">=1.1.3,<2.0.0", markers = "platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"arm64\" or platform_machine == \"aarch64\""} packaging = ">=20.9" pyyaml = ">=5.1" requests = "*" @@ -2319,16 +2281,19 @@ tqdm = ">=4.42.1" typing-extensions = ">=3.7.4.3" [package.extras] -all = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "fastapi", "gradio (>=4.0.0)", "jedi", "libcst (==1.4.0)", "mypy (==1.5.1)", "numpy", "pytest (>=8.1.1,<8.2.2)", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-mock", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "ruff (>=0.9.0)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"] +all = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "authlib (>=1.3.2)", "fastapi", "fastapi", "gradio (>=4.0.0)", "httpx", "itsdangerous", "jedi", "libcst (>=1.4.0)", "mypy (==1.15.0) ; python_version >= \"3.9\"", "mypy (>=1.14.1,<1.15.0) ; python_version == \"3.8\"", "numpy", "pytest (>=8.1.1,<8.2.2)", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-mock", "pytest-rerunfailures (<16.0)", "pytest-vcr", "pytest-xdist", "ruff (>=0.9.0)", "soundfile", "ty", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"] cli = ["InquirerPy (==0.3.4)"] -dev = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "fastapi", "gradio (>=4.0.0)", "jedi", "libcst (==1.4.0)", "mypy (==1.5.1)", "numpy", "pytest (>=8.1.1,<8.2.2)", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-mock", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "ruff (>=0.9.0)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"] +dev = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "authlib (>=1.3.2)", "fastapi", "fastapi", "gradio (>=4.0.0)", "httpx", "itsdangerous", "jedi", "libcst (>=1.4.0)", "mypy (==1.15.0) ; python_version >= \"3.9\"", "mypy (>=1.14.1,<1.15.0) ; python_version == \"3.8\"", "numpy", "pytest (>=8.1.1,<8.2.2)", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-mock", "pytest-rerunfailures (<16.0)", "pytest-vcr", "pytest-xdist", "ruff (>=0.9.0)", "soundfile", "ty", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"] fastai = ["fastai (>=2.4)", "fastcore (>=1.3.27)", "toml"] -hf-transfer = ["hf-transfer (>=0.1.4)"] +hf-transfer = ["hf_transfer (>=0.1.4)"] +hf-xet = ["hf-xet (>=1.1.2,<2.0.0)"] inference = ["aiohttp"] -quality = ["libcst (==1.4.0)", "mypy (==1.5.1)", "ruff (>=0.9.0)"] +mcp = ["aiohttp", "mcp (>=1.8.0)", "typer"] +oauth = ["authlib (>=1.3.2)", "fastapi", "httpx", "itsdangerous"] +quality = ["libcst (>=1.4.0)", "mypy (==1.15.0) ; python_version >= \"3.9\"", "mypy (>=1.14.1,<1.15.0) ; python_version == \"3.8\"", "ruff (>=0.9.0)", "ty"] tensorflow = ["graphviz", "pydot", "tensorflow"] tensorflow-testing = ["keras (<3.0)", "tensorflow"] -testing = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "fastapi", "gradio (>=4.0.0)", "jedi", "numpy", "pytest (>=8.1.1,<8.2.2)", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-mock", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "soundfile", "urllib3 (<2.0)"] +testing = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "authlib (>=1.3.2)", "fastapi", "fastapi", "gradio (>=4.0.0)", "httpx", "itsdangerous", "jedi", "numpy", "pytest (>=8.1.1,<8.2.2)", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-mock", "pytest-rerunfailures (<16.0)", "pytest-vcr", "pytest-xdist", "soundfile", "urllib3 (<2.0)"] torch = ["safetensors[torch]", "torch"] typing = ["types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)"] @@ -2339,7 +2304,6 @@ description = "Pure-Python HTTP/2 framing" optional = false python-versions = ">=3.9" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "hyperframe-6.1.0-py3-none-any.whl", hash = "sha256:b03380493a519fce58ea5af42e4a42317bf9bd425596f7a0835ffce80f1a42e5"}, {file = "hyperframe-6.1.0.tar.gz", hash = "sha256:f630908a00854a7adeabd6382b43923a4c4cd4b821fcb527e6ab9e15382a3b08"}, @@ -2352,7 +2316,6 @@ description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.8" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea"}, {file = "idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902"}, @@ -2368,7 +2331,6 @@ description = "Read metadata from Python packages" optional = false python-versions = ">=3.9" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "importlib_metadata-8.7.1-py3-none-any.whl", hash = "sha256:5a1f80bf1daa489495071efbb095d75a634cf28a8bc299581244063b53176151"}, {file = "importlib_metadata-8.7.1.tar.gz", hash = "sha256:49fef1ae6440c182052f407c8d34a68f72efc36db9ca90dc0113398f2fdde8bb"}, @@ -2393,7 +2355,6 @@ description = "brain-dead simple config-ini parsing" optional = false python-versions = ">=3.10" groups = ["dev"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12"}, {file = "iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730"}, @@ -2406,7 +2367,6 @@ description = "structured outputs for llm" optional = false python-versions = "<4.0,>=3.9" groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "instructor-1.14.5-py3-none-any.whl", hash = "sha256:2a5a31222b008c0989be1cc001e33a237f49506e80ac5833f6d36d7690bae7b1"}, {file = "instructor-1.14.5.tar.gz", hash = "sha256:fcb6432867f2fe4a5986e8bf389dcc64ed2ad4039a12a2dff85464e51c2f171a"}, @@ -2457,7 +2417,6 @@ description = "An ISO 8601 date/time/duration parser and formatter" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "isodate-0.7.2-py3-none-any.whl", hash = "sha256:28009937d8031054830160fce6d409ed342816b543597cece116d966c6d99e15"}, {file = "isodate-0.7.2.tar.gz", hash = "sha256:4cd1aa0f43ca76f4a6c6c0292a85f40b35ec2e43e315b59f06e6d32171a953e6"}, @@ -2470,7 +2429,6 @@ description = "A Python utility / library to sort Python imports." optional = false python-versions = ">=3.8.0" groups = ["main", "dev"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "isort-5.13.2-py3-none-any.whl", hash = "sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6"}, {file = "isort-5.13.2.tar.gz", hash = "sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109"}, @@ -2486,7 +2444,6 @@ description = "Safely pass data to untrusted environments and back." optional = false python-versions = ">=3.8" groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "itsdangerous-2.2.0-py3-none-any.whl", hash = "sha256:c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef"}, {file = "itsdangerous-2.2.0.tar.gz", hash = "sha256:e0050c0b7da1eea53ffaf149c0cfbb5c6e2e2b69c4bef22c81fa6eb73e5f6173"}, @@ -2499,7 +2456,6 @@ description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"}, {file = "jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d"}, @@ -2518,7 +2474,6 @@ description = "Fast iterable JSON parser." optional = false python-versions = ">=3.9" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "jiter-0.11.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:ed58841a491bbbf3f7c55a6b68fff568439ab73b2cce27ace0e169057b5851df"}, {file = "jiter-0.11.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:499beb9b2d7e51d61095a8de39ebcab1d1778f2a74085f8305a969f6cee9f3e4"}, @@ -2630,8 +2585,7 @@ version = "1.5.3" description = "Lightweight pipelining with Python functions" optional = false python-versions = ">=3.9" -groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" +groups = ["main"] files = [ {file = "joblib-1.5.3-py3-none-any.whl", hash = "sha256:5fc3c5039fc5ca8c0276333a188bbd59d6b7ab37fe6632daa76bc7f9ec18e713"}, {file = "joblib-1.5.3.tar.gz", hash = "sha256:8561a3269e6801106863fd0d6d84bb737be9e7631e33aaed3fb9ce5953688da3"}, @@ -2644,7 +2598,6 @@ description = "A package to repair broken json strings" optional = false python-versions = ">=3.10" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "json_repair-0.55.2-py3-none-any.whl", hash = "sha256:08109b093fc9fe99b956b8309f9c1dfd2740637056d93df489cc7b4eb56d4286"}, {file = "json_repair-0.55.2.tar.gz", hash = "sha256:aa5c89692126257efb8e3cf1efe6787387634b5c360fb77313d66f146e980de6"}, @@ -2657,7 +2610,6 @@ description = "Apply JSON-Patches (RFC 6902)" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "jsonpatch-1.33-py2.py3-none-any.whl", hash = "sha256:0ae28c0cd062bbd8b8ecc26d7d164fbbea9652a1a3693f3b956c1eae5145dade"}, {file = "jsonpatch-1.33.tar.gz", hash = "sha256:9fcd4009c41e6d12348b4a0ff2563ba56a2923a7dfee731d004e212e1ee5030c"}, @@ -2673,7 +2625,6 @@ description = "Identify specific nodes in a JSON document (RFC 6901)" optional = false python-versions = ">=3.7" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942"}, {file = "jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef"}, @@ -2686,7 +2637,6 @@ description = "jsonref is a library for automatic dereferencing of JSON Referenc optional = false python-versions = ">=3.7" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "jsonref-1.1.0-py3-none-any.whl", hash = "sha256:590dc7773df6c21cbf948b5dac07a72a251db28b0238ceecce0a2abfa8ec30a9"}, {file = "jsonref-1.1.0.tar.gz", hash = "sha256:32fe8e1d85af0fdefbebce950af85590b22b60f9e95443176adbde4e1ecea552"}, @@ -2699,7 +2649,6 @@ description = "An implementation of JSON Schema validation for Python" optional = false python-versions = ">=3.10" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "jsonschema-4.26.0-py3-none-any.whl", hash = "sha256:d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce"}, {file = "jsonschema-4.26.0.tar.gz", hash = "sha256:0c26707e2efad8aa1bfc5b7ce170f3fccc2e4918ff85989ba9ffa9facb2be326"}, @@ -2722,7 +2671,6 @@ description = "The JSON Schema meta-schemas and vocabularies, exposed as a Regis optional = false python-versions = ">=3.9" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe"}, {file = "jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d"}, @@ -2733,32 +2681,26 @@ referencing = ">=0.31.0" [[package]] name = "langchain" -version = "0.3.27" +version = "1.2.15" description = "Building applications with LLMs through composability" optional = false -python-versions = "<4.0,>=3.9" -groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" +python-versions = "<4.0.0,>=3.10.0" +groups = ["main", "metrics"] files = [ - {file = "langchain-0.3.27-py3-none-any.whl", hash = "sha256:7b20c4f338826acb148d885b20a73a16e410ede9ee4f19bb02011852d5f98798"}, - {file = "langchain-0.3.27.tar.gz", hash = "sha256:aa6f1e6274ff055d0fd36254176770f356ed0a8994297d1df47df341953cec62"}, + {file = "langchain-1.2.15-py3-none-any.whl", hash = "sha256:e349db349cb3e9550c4044077cf90a1717691756cc236438404b23500e615874"}, + {file = "langchain-1.2.15.tar.gz", hash = "sha256:1717b6719daefae90b2728314a5e2a117ff916291e2862595b6c3d6fba33d652"}, ] [package.dependencies] -async-timeout = {version = ">=4.0.0,<5.0.0", markers = "python_version < \"3.11\""} -langchain-core = ">=0.3.72,<1.0.0" -langchain-text-splitters = ">=0.3.9,<1.0.0" -langsmith = ">=0.1.17" +langchain-core = ">=1.2.10,<2.0.0" +langgraph = ">=1.1.5,<1.2.0" pydantic = ">=2.7.4,<3.0.0" -PyYAML = ">=5.3" -requests = ">=2,<3" -SQLAlchemy = ">=1.4,<3" [package.extras] anthropic = ["langchain-anthropic"] aws = ["langchain-aws"] azure-ai = ["langchain-azure-ai"] -cohere = ["langchain-cohere"] +baseten = ["langchain-baseten (>=0.2.0)"] community = ["langchain-community"] deepseek = ["langchain-deepseek"] fireworks = ["langchain-fireworks"] @@ -2775,54 +2717,92 @@ xai = ["langchain-xai"] [[package]] name = "langchain-azure-ai" -version = "0.1.8" -description = "An integration package to support Azure AI Foundry capabilities for model inference in LangChain." +version = "1.2.3" +description = "An integration package to support Azure AI Foundry capabilities in LangChain/LangGraph ecosystem." optional = false -python-versions = "~=3.9" +python-versions = "<4.0,>=3.10.0" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "langchain_azure_ai-0.1.8-py3-none-any.whl", hash = "sha256:b2b72287afdae6984af7162bff4442e878a48bb466aedcb65733651d6415f86f"}, - {file = "langchain_azure_ai-0.1.8.tar.gz", hash = "sha256:9f018022e57c37160d5b5ab3604d2f441685d18e5cd50023804de8bf23e8a699"}, + {file = "langchain_azure_ai-1.2.3-py3-none-any.whl", hash = "sha256:00bb7c3ac2d1717a7cdd6573cf659bb012ece3958f67ec1d30a46170f22280a1"}, + {file = "langchain_azure_ai-1.2.3.tar.gz", hash = "sha256:1a4f6665816bccfb50419422cd1eadcd7adf427aa5e5bc4012dc9429b29e7ed8"}, ] [package.dependencies] aiohttp = ">=3.10,<4.0" -azure-ai-agents = ">=1.0,<2.0" -azure-ai-inference = {version = ">=1.0.0b9,<2.0", extras = ["opentelemetry"]} -azure-ai-projects = "1.1.0b4" +azure-ai-contentsafety = ">=1.0.0,<2.0.0" +azure-ai-contentunderstanding = ">=1.0.0,<2.0.0" +azure-ai-projects = ">=2.1.0,<3.0" azure-core = ">=1.32,<2.0" -azure-cosmos = ">=4.14.0b1,<5.0" azure-identity = ">=1.15,<2.0" azure-search-documents = ">=11.4,<12.0" -langchain-core = ">=0.3.0,<0.4.0" -langchain-openai = ">=0.3.0,<0.4.0" -langgraph = ">=0.6.8,<0.7.0" +langchain = ">=1.2.12,<2.0.0" +langchain-openai = ">=1.0.0,<2.0.0" +langgraph = ">=1.1.1,<3.0" numpy = {version = ">=1.26.2", markers = "python_version < \"3.13\""} +six = ">=1.17.0,<2.0.0" [package.extras] -opentelemetry = ["azure-monitor-opentelemetry (>=1.6,<2.0)", "opentelemetry-api (>=1.37)", "opentelemetry-instrumentation (>=0.58b0)", "opentelemetry-instrumentation-threading (>=0.58b0)", "opentelemetry-semantic-conventions (>=0.58b0)", "opentelemetry-semantic-conventions-ai (>=0.4.2,<0.5.0)"] -tools = ["azure-ai-documentintelligence (>=1.0.2,<2.0.0)", "azure-ai-textanalytics (>=5.3.0,<6.0.0)", "azure-ai-vision-imageanalysis (>=1.0.0,<2.0.0)", "azure-mgmt-logic (>=10.0.0,<11.0.0)"] +contentunderstanding = ["filetype (>=1.2,<2)"] +opentelemetry = ["azure-monitor-opentelemetry (>=1.6,<2.0)", "opentelemetry-api (>=1.37)", "opentelemetry-instrumentation (>=0.58b0)", "opentelemetry-instrumentation-threading (>=0.58b0)", "opentelemetry-semantic-conventions (>=0.58b0)", "opentelemetry-semantic-conventions-ai (>=0.4.2,<0.5.0)", "wrapt (>=1.14.0)"] +tools = ["azure-ai-documentintelligence (>=1.0.2,<2.0.0)", "azure-ai-textanalytics (>=5.3.0,<6.0.0)", "azure-ai-vision-imageanalysis (>=1.0.0,<2.0.0)", "azure-cognitiveservices-speech (>=1.41.0,<2.0.0)", "azure-mgmt-logic (>=10.0.0,<11.0.0)"] +v1 = ["azure-ai-agents (==1.2.0b5)", "azure-ai-inference (>=1.0.0b9,<2.0)"] + +[[package]] +name = "langchain-classic" +version = "1.0.4" +description = "Building applications with LLMs through composability" +optional = false +python-versions = "<4.0.0,>=3.10.0" +groups = ["metrics"] +files = [ + {file = "langchain_classic-1.0.4-py3-none-any.whl", hash = "sha256:b55d0925bc66cf2efa0b65d71c514c42cf9e4df798b9e976c063b3ecea8cf272"}, + {file = "langchain_classic-1.0.4.tar.gz", hash = "sha256:03842b2f9681f0f56978d94c1dc155c9316ce1575db88584316dcd9087823ede"}, +] + +[package.dependencies] +async-timeout = {version = ">=4.0.0,<5.0.0", markers = "python_version < \"3.11\""} +langchain-core = ">=1.2.31,<2.0.0" +langchain-text-splitters = ">=1.1.2,<2.0.0" +langsmith = ">=0.1.17,<1.0.0" +pydantic = ">=2.7.4,<3.0.0" +pyyaml = ">=5.3.0,<7.0.0" +requests = ">=2.0.0,<3.0.0" +sqlalchemy = ">=1.4.0,<3.0.0" + +[package.extras] +anthropic = ["langchain-anthropic"] +aws = ["langchain-aws"] +deepseek = ["langchain-deepseek"] +fireworks = ["langchain-fireworks"] +google-genai = ["langchain-google-genai"] +google-vertexai = ["langchain-google-vertexai"] +groq = ["langchain-groq"] +huggingface = ["langchain-huggingface"] +mistralai = ["langchain-mistralai"] +ollama = ["langchain-ollama"] +openai = ["langchain-openai"] +perplexity = ["langchain-perplexity"] +together = ["langchain-together"] +xai = ["langchain-xai"] [[package]] name = "langchain-community" -version = "0.3.31" +version = "0.4.1" description = "Community contributed LangChain integrations." optional = false -python-versions = "<4.0.0,>=3.9.0" +python-versions = "<4.0.0,>=3.10.0" groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "langchain_community-0.3.31-py3-none-any.whl", hash = "sha256:1c727e3ebbacd4d891b07bd440647668001cea3e39cbe732499ad655ec5cb569"}, - {file = "langchain_community-0.3.31.tar.gz", hash = "sha256:250e4c1041539130f6d6ac6f9386cb018354eafccd917b01a4cff1950b80fd81"}, + {file = "langchain_community-0.4.1-py3-none-any.whl", hash = "sha256:2135abb2c7748a35c84613108f7ebf30f8505b18c3c18305ffaecfc7651f6c6a"}, + {file = "langchain_community-0.4.1.tar.gz", hash = "sha256:f3b211832728ee89f169ddce8579b80a085222ddb4f4ed445a46e977d17b1e85"}, ] [package.dependencies] aiohttp = ">=3.8.3,<4.0.0" dataclasses-json = ">=0.6.7,<0.7.0" httpx-sse = ">=0.4.0,<1.0.0" -langchain = ">=0.3.27,<2.0.0" -langchain-core = ">=0.3.78,<2.0.0" +langchain-classic = ">=1.0.0,<2.0.0" +langchain-core = ">=1.0.1,<2.0.0" langsmith = ">=0.1.125,<1.0.0" numpy = {version = ">=1.26.2", markers = "python_version < \"3.13\""} pydantic-settings = ">=2.10.1,<3.0.0" @@ -2833,80 +2813,92 @@ tenacity = ">=8.1.0,<8.4.0 || >8.4.0,<10.0.0" [[package]] name = "langchain-core" -version = "0.3.83" +version = "1.3.2" description = "Building applications with LLMs through composability" optional = false -python-versions = "<4.0.0,>=3.9.0" +python-versions = "<4.0.0,>=3.10.0" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "langchain_core-0.3.83-py3-none-any.whl", hash = "sha256:8c92506f8b53fc1958b1c07447f58c5783eb8833dd3cb6dc75607c80891ab1ae"}, - {file = "langchain_core-0.3.83.tar.gz", hash = "sha256:a0a4c7b6ea1c446d3b432116f405dc2afa1fe7891c44140d3d5acca221909415"}, + {file = "langchain_core-1.3.2-py3-none-any.whl", hash = "sha256:d44a66127f9f8db735bdfd0ab9661bccb47a97113cfd3f2d89c74864422b7274"}, + {file = "langchain_core-1.3.2.tar.gz", hash = "sha256:fd7a50b2f28ba561fd9d7f5d2760bc9e06cf00cdf820a3ccafe88a94ffa8d5b7"}, ] [package.dependencies] jsonpatch = ">=1.33.0,<2.0.0" +langchain-protocol = ">=0.0.10" langsmith = ">=0.3.45,<1.0.0" -packaging = ">=23.2.0,<26.0.0" +packaging = ">=23.2.0" pydantic = ">=2.7.4,<3.0.0" -PyYAML = ">=5.3.0,<7.0.0" +pyyaml = ">=5.3.0,<7.0.0" tenacity = ">=8.1.0,<8.4.0 || >8.4.0,<10.0.0" typing-extensions = ">=4.7.0,<5.0.0" uuid-utils = ">=0.12.0,<1.0" [[package]] -name = "langchain-huggingface" -version = "0.1.2" -description = "An integration package connecting Hugging Face and LangChain" +name = "langchain-mistralai" +version = "1.1.2" +description = "An integration package connecting Mistral and LangChain" optional = false -python-versions = "<4.0,>=3.9" -groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" +python-versions = "<4.0.0,>=3.10.0" +groups = ["main"] files = [ - {file = "langchain_huggingface-0.1.2-py3-none-any.whl", hash = "sha256:7de5cfcae32bfb6a99c084fc16176f02583a4f8d94febb6bb45bed5b34699174"}, - {file = "langchain_huggingface-0.1.2.tar.gz", hash = "sha256:4a66d5c449298fd353bd84c9ed01f9bf4303bf2e4ffce14aab8c55c584eee57c"}, + {file = "langchain_mistralai-1.1.2-py3-none-any.whl", hash = "sha256:2c55a7d1df6a090b61d3c3ca0a7894895c87557b8248e6fb1608d61ad9f149ee"}, + {file = "langchain_mistralai-1.1.2.tar.gz", hash = "sha256:3c852b1b2d8a729299f25fba7d5c9cadb9e2128387c2771745e8e8cb412b33cd"}, ] [package.dependencies] -huggingface-hub = ">=0.23.0" -langchain-core = ">=0.3.15,<0.4.0" -sentence-transformers = ">=2.6.0" -tokenizers = ">=0.19.1" -transformers = ">=4.39.0" +httpx = ">=0.25.2,<1.0.0" +httpx-sse = ">=0.3.1,<1.0.0" +langchain-core = ">=1.2.19,<2.0.0" +pydantic = ">=2.0.0,<3.0.0" +tokenizers = ">=0.15.1,<1.0.0" [[package]] name = "langchain-openai" -version = "0.3.35" +version = "1.1.9" description = "An integration package connecting OpenAI and LangChain" optional = false -python-versions = "<4.0.0,>=3.9.0" +python-versions = "<4.0.0,>=3.10.0" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "langchain_openai-0.3.35-py3-none-any.whl", hash = "sha256:76d5707e6e81fd461d33964ad618bd326cb661a1975cef7c1cb0703576bdada5"}, - {file = "langchain_openai-0.3.35.tar.gz", hash = "sha256:fa985fd041c3809da256a040c98e8a43e91c6d165b96dcfeb770d8bd457bf76f"}, + {file = "langchain_openai-1.1.9-py3-none-any.whl", hash = "sha256:ca2482b136c45fb67c0db84a9817de675e0eb8fb2203a33914c1b7a96f273940"}, + {file = "langchain_openai-1.1.9.tar.gz", hash = "sha256:fdee25dcf4b0685d8e2f59856f4d5405431ef9e04ab53afe19e2e8360fed8234"}, ] [package.dependencies] -langchain-core = ">=0.3.78,<1.0.0" -openai = ">=1.104.2,<3.0.0" +langchain-core = ">=1.2.11,<2.0.0" +openai = ">=1.109.1,<3.0.0" tiktoken = ">=0.7.0,<1.0.0" +[[package]] +name = "langchain-protocol" +version = "0.0.12" +description = "Python bindings for the LangChain agent streaming protocol" +optional = false +python-versions = "<4.0.0,>=3.10.0" +groups = ["main", "metrics"] +files = [ + {file = "langchain_protocol-0.0.12-py3-none-any.whl", hash = "sha256:402b61f42d4139692528cf37226c367bb6efc8ff8165b29380accb0abfece7b2"}, + {file = "langchain_protocol-0.0.12.tar.gz", hash = "sha256:5e14c434290a705c9510fdb1a83ecf7561a5e6e0dfd053930ade80dba069269f"}, +] + +[package.dependencies] +typing-extensions = ">=4.7.0,<5.0.0" + [[package]] name = "langchain-text-splitters" -version = "0.3.11" +version = "1.1.2" description = "LangChain text splitting utilities" optional = false -python-versions = ">=3.9" +python-versions = "<4.0.0,>=3.10.0" groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "langchain_text_splitters-0.3.11-py3-none-any.whl", hash = "sha256:cf079131166a487f1372c8ab5d0bfaa6c0a4291733d9c43a34a16ac9bcd6a393"}, - {file = "langchain_text_splitters-0.3.11.tar.gz", hash = "sha256:7a50a04ada9a133bbabb80731df7f6ddac51bc9f1b9cab7fa09304d71d38a6cc"}, + {file = "langchain_text_splitters-1.1.2-py3-none-any.whl", hash = "sha256:a2de0d799ff31886429fd6e2e0032df275b60ec817c19059a7b46181cc1c2f10"}, + {file = "langchain_text_splitters-1.1.2.tar.gz", hash = "sha256:782a723db0a4746ac91e251c7c1d57fd23636e4f38ed733074e28d7a86f41627"}, ] [package.dependencies] -langchain-core = ">=0.3.75,<2.0.0" +langchain-core = ">=1.2.31,<2.0.0" [[package]] name = "langdetect" @@ -2915,7 +2907,6 @@ description = "Language detection library ported from Google's language-detectio optional = false python-versions = "*" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "langdetect-1.0.9-py2-none-any.whl", hash = "sha256:7cbc0746252f19e76f77c0b1690aadf01963be835ef0cd4b56dddf2a8f1dfc2a"}, {file = "langdetect-1.0.9.tar.gz", hash = "sha256:cbc1fef89f8d062739774bd51eda3da3274006b3661d199c2655f6b3f6d605a0"}, @@ -2926,22 +2917,21 @@ six = "*" [[package]] name = "langgraph" -version = "0.6.11" +version = "1.1.10" description = "Building stateful, multi-actor applications with LLMs" optional = false -python-versions = ">=3.9" -groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" +python-versions = ">=3.10" +groups = ["main", "metrics"] files = [ - {file = "langgraph-0.6.11-py3-none-any.whl", hash = "sha256:49268de69d85b7db3da9e2ca582a474516421c1c44be5cff390416cfa6967faa"}, - {file = "langgraph-0.6.11.tar.gz", hash = "sha256:cd5373d0a59701ab39c9f8af33a33c5704553de815318387fa7f240511e0efd7"}, + {file = "langgraph-1.1.10-py3-none-any.whl", hash = "sha256:8a4f163f72f4401648d0c11b48ee906947d938ba8cf1f474540fe591534f0d17"}, + {file = "langgraph-1.1.10.tar.gz", hash = "sha256:3115beb58203283c98d8752a90c034f3432177d2979a1fe205f76e5f1b744500"}, ] [package.dependencies] -langchain-core = ">=0.1" -langgraph-checkpoint = ">=2.1.0,<4.0.0" -langgraph-prebuilt = ">=0.6.0,<0.7.0" -langgraph-sdk = ">=0.2.2,<0.3.0" +langchain-core = ">=1.3.0,<2" +langgraph-checkpoint = ">=2.1.0,<5.0.0" +langgraph-prebuilt = ">=1.0.12,<1.1.0" +langgraph-sdk = ">=0.3.0,<0.4.0" pydantic = ">=2.7.4" xxhash = ">=3.5.0" @@ -2951,8 +2941,7 @@ version = "2.1.2" description = "Library with base interfaces for LangGraph checkpoint savers." optional = false python-versions = ">=3.9" -groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" +groups = ["main", "metrics"] files = [ {file = "langgraph_checkpoint-2.1.2-py3-none-any.whl", hash = "sha256:911ebffb069fd01775d4b5184c04aaafc2962fcdf50cf49d524cd4367c4d0c60"}, {file = "langgraph_checkpoint-2.1.2.tar.gz", hash = "sha256:112e9d067a6eff8937caf198421b1ffba8d9207193f14ac6f89930c1260c06f9"}, @@ -2969,7 +2958,6 @@ description = "Library with a Postgres implementation of LangGraph checkpoint sa optional = false python-versions = ">=3.9" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "langgraph_checkpoint_postgres-2.0.25-py3-none-any.whl", hash = "sha256:cf1248a58fe828c9cfc36ee57ff118d7799ce214d4b35718e57ec98407130fb5"}, {file = "langgraph_checkpoint_postgres-2.0.25.tar.gz", hash = "sha256:916b80f73a641a589301f6c54414974768b6d646d82db7b301ff8d47105c3613"}, @@ -2983,37 +2971,35 @@ psycopg-pool = ">=3.2.0" [[package]] name = "langgraph-prebuilt" -version = "0.6.5" +version = "1.0.12" description = "Library with high-level APIs for creating and executing LangGraph agents and tools." optional = false -python-versions = ">=3.9" -groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" +python-versions = ">=3.10" +groups = ["main", "metrics"] files = [ - {file = "langgraph_prebuilt-0.6.5-py3-none-any.whl", hash = "sha256:b6ceb5db31c16a30a3ee3c0b923667f02e7c9e27852621abf9d5bd5603534141"}, - {file = "langgraph_prebuilt-0.6.5.tar.gz", hash = "sha256:9c63e9e867e62b345805fd1e8ea5c2df5cc112e939d714f277af84f2afe5950d"}, + {file = "langgraph_prebuilt-1.0.12-py3-none-any.whl", hash = "sha256:ab83822d2724d434d3536dc127b86c7d16fe3fb8dc02a89a683bc77b2e55f6e9"}, + {file = "langgraph_prebuilt-1.0.12.tar.gz", hash = "sha256:edcb11ff29996def816243f267fb2c85c0a2e4fb618c275f3d238aee8dd6a5ec"}, ] [package.dependencies] -langchain-core = ">=0.3.67" -langgraph-checkpoint = ">=2.1.0,<4.0.0" +langchain-core = ">=1.3.1" +langgraph-checkpoint = ">=2.1.0,<5.0.0" [[package]] name = "langgraph-sdk" -version = "0.2.15" +version = "0.3.13" description = "SDK for interacting with LangGraph API" optional = false python-versions = ">=3.10" -groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" +groups = ["main", "metrics"] files = [ - {file = "langgraph_sdk-0.2.15-py3-none-any.whl", hash = "sha256:746566a5d89aa47160eccc17d71682a78771c754126f6c235a68353d61ed7462"}, - {file = "langgraph_sdk-0.2.15.tar.gz", hash = "sha256:8faaafe2c1193b89f782dd66c591060cd67862aa6aaf283749b7846f331d5334"}, + {file = "langgraph_sdk-0.3.13-py3-none-any.whl", hash = "sha256:aee09e345c90775f6de9d6f4c7b847cfc652e49055c27a2aed0d981af2af3bd0"}, + {file = "langgraph_sdk-0.3.13.tar.gz", hash = "sha256:419ca5663eec3cec192ad194ac0647c0c826866b446073eb40f384f950986cd5"}, ] [package.dependencies] httpx = ">=0.25.2" -orjson = ">=3.10.1" +orjson = ">=3.11.5" [[package]] name = "langsmith" @@ -3022,7 +3008,6 @@ description = "Client library to connect to the LangSmith Observability and Eval optional = false python-versions = ">=3.10" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "langsmith-0.6.7-py3-none-any.whl", hash = "sha256:4bd4372b8bf724b86314f64644562b5598407614e04e74b536c09490d153bd61"}, {file = "langsmith-0.6.7.tar.gz", hash = "sha256:d89c604a18fc606b7835d8e7924f7cdbe130ca2207bdff8f989590e50d65b802"}, @@ -3054,7 +3039,6 @@ description = "A fast and thorough lazy object proxy." optional = false python-versions = ">=3.9" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "lazy_object_proxy-1.12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:61d5e3310a4aa5792c2b599a7a78ccf8687292c8eb09cf187cca8f09cf6a7519"}, {file = "lazy_object_proxy-1.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1ca33565f698ac1aece152a10f432415d1a2aa9a42dfe23e5ba2bc255ab91f6"}, @@ -3109,7 +3093,6 @@ description = "Library to easily interface with LLM API providers" optional = false python-versions = "<4.0,>=3.9" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "litellm-1.81.6-py3-none-any.whl", hash = "sha256:573206ba194d49a1691370ba33f781671609ac77c35347f8a0411d852cf6341a"}, {file = "litellm-1.81.6.tar.gz", hash = "sha256:f02b503dfb7d66d1c939f82e4db21aeec1d6e2ed1fe3f5cd02aaec3f792bc4ae"}, @@ -3146,7 +3129,6 @@ description = "Developer-friendly load testing framework" optional = false python-versions = ">=3.10" groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "locust-2.39.1-py3-none-any.whl", hash = "sha256:fd5148f2f1a4ed34aee968abc4393674e69d1b5e1b54db50a397f6eb09ce0b04"}, {file = "locust-2.39.1.tar.gz", hash = "sha256:6bdd19e27edf9a1c84391d6cf6e9a737dfb832be7dfbf39053191ae31b9cc498"}, @@ -3185,7 +3167,6 @@ description = "Locust Cloud" optional = false python-versions = ">=3.10" groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "locust_cloud-1.30.0-py3-none-any.whl", hash = "sha256:2324b690efa1bfc8d1871340276953cf265328bd6333e07a5ba8ff7dc5e99e6c"}, {file = "locust_cloud-1.30.0.tar.gz", hash = "sha256:324ae23754d49816df96d3f7472357a61cd10e56cebcb26e2def836675cb3c68"}, @@ -3206,7 +3187,6 @@ description = "Powerful and Pythonic XML processing library combining libxml2/li optional = false python-versions = ">=3.8" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "lxml-6.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e77dd455b9a16bbd2a5036a63ddbd479c19572af81b624e79ef422f929eef388"}, {file = "lxml-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5d444858b9f07cefff6455b983aea9a67f7462ba1f6cbe4a21e8bf6791bf2153"}, @@ -3363,7 +3343,6 @@ description = "A super-fast templating language that borrows the best ideas from optional = false python-versions = ">=3.8" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "mako-1.3.10-py3-none-any.whl", hash = "sha256:baef24a52fc4fc514a0887ac600f9f1cff3d82c61d4d700a1fa84d597b88db59"}, {file = "mako-1.3.10.tar.gz", hash = "sha256:99579a6f39583fa7e5630a28c3c1f440e4e97a414b80372649c0ce338da2ea28"}, @@ -3384,7 +3363,6 @@ description = "Python port of markdown-it. Markdown parsing, done right!" optional = false python-versions = ">=3.10" groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "markdown_it_py-4.0.0-py3-none-any.whl", hash = "sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147"}, {file = "markdown_it_py-4.0.0.tar.gz", hash = "sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3"}, @@ -3409,7 +3387,6 @@ description = "Safely add untrusted strings to HTML/XML markup." optional = false python-versions = ">=3.9" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "markupsafe-3.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559"}, {file = "markupsafe-3.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419"}, @@ -3509,7 +3486,6 @@ description = "A lightweight library for converting complex datatypes to and fro optional = false python-versions = ">=3.9" groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "marshmallow-3.26.2-py3-none-any.whl", hash = "sha256:013fa8a3c4c276c24d26d84ce934dc964e2aa794345a0f8c7e5a7191482c8a73"}, {file = "marshmallow-3.26.2.tar.gz", hash = "sha256:bbe2adb5a03e6e3571b573f42527c6fe926e17467833660bebd11593ab8dfd57"}, @@ -3530,7 +3506,6 @@ description = "McCabe checker, plugin for flake8" optional = false python-versions = ">=3.6" groups = ["main", "dev"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, @@ -3543,7 +3518,6 @@ description = "Markdown URL utilities" optional = false python-versions = ">=3.7" groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, @@ -3555,8 +3529,7 @@ version = "1.3.0" description = "Python library for arbitrary-precision floating-point arithmetic" optional = false python-versions = "*" -groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" +groups = ["main"] files = [ {file = "mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c"}, {file = "mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f"}, @@ -3575,7 +3548,6 @@ description = "The Microsoft Authentication Library (MSAL) for Python library en optional = false python-versions = ">=3.8" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "msal-1.34.0-py3-none-any.whl", hash = "sha256:f669b1644e4950115da7a176441b0e13ec2975c29528d8b9e81316023676d6e1"}, {file = "msal-1.34.0.tar.gz", hash = "sha256:76ba83b716ea5a6d75b0279c0ac353a0e05b820ca1f6682c0eb7f45190c43c2f"}, @@ -3596,7 +3568,6 @@ description = "Microsoft Authentication Library extensions (MSAL EX) provides a optional = false python-versions = ">=3.9" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "msal_extensions-1.3.1-py3-none-any.whl", hash = "sha256:96d3de4d034504e969ac5e85bae8106c8373b5c6568e4c8fa7af2eca9dbe6bca"}, {file = "msal_extensions-1.3.1.tar.gz", hash = "sha256:c5b0fd10f65ef62b5f1d62f4251d51cbcaf003fcedae8c91b040a488614be1a4"}, @@ -3615,7 +3586,6 @@ description = "MessagePack serializer" optional = false python-versions = ">=3.9" groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "msgpack-1.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0051fffef5a37ca2cd16978ae4f0aef92f164df86823871b5162812bebecd8e2"}, {file = "msgpack-1.1.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a605409040f2da88676e9c9e5853b3449ba8011973616189ea5ee55ddbc5bc87"}, @@ -3688,7 +3658,6 @@ description = "multidict implementation" optional = false python-versions = ">=3.9" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "multidict-6.7.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c93c3db7ea657dd4637d57e74ab73de31bccefe144d3d4ce370052035bc85fb5"}, {file = "multidict-6.7.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:974e72a2474600827abaeda71af0c53d9ebbc3c2eb7da37b37d7829ae31232d8"}, @@ -3848,7 +3817,6 @@ description = "better multiprocessing and multithreading in Python" optional = false python-versions = ">=3.8" groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "multiprocess-0.70.18-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:25d4012dcaaf66b9e8e955f58482b42910c2ee526d532844d8bcf661bbc604df"}, {file = "multiprocess-0.70.18-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:06b19433de0d02afe5869aec8931dd5c01d99074664f806c73896b0d9e527213"}, @@ -3881,7 +3849,6 @@ description = "Type system extensions for programs checked with the mypy type ch optional = false python-versions = ">=3.8" groups = ["dev", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505"}, {file = "mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558"}, @@ -3894,7 +3861,6 @@ description = "Patch asyncio to allow nested event loops" optional = false python-versions = ">=3.5" groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c"}, {file = "nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe"}, @@ -3907,7 +3873,7 @@ description = "Python package for creating and manipulating graphs and networks" optional = false python-versions = ">=3.10" groups = ["main", "metrics"] -markers = "(sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\") and python_version == \"3.10\"" +markers = "python_version == \"3.10\"" files = [ {file = "networkx-3.4.2-py3-none-any.whl", hash = "sha256:df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f"}, {file = "networkx-3.4.2.tar.gz", hash = "sha256:307c3669428c5362aab27c8a1260aa8f47c4e91d3891f48be0141738d8d053e1"}, @@ -3928,7 +3894,7 @@ description = "Python package for creating and manipulating graphs and networks" optional = false python-versions = "!=3.14.1,>=3.11" groups = ["main", "metrics"] -markers = "(sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\") and python_version >= \"3.11\"" +markers = "python_version >= \"3.11\"" files = [ {file = "networkx-3.6.1-py3-none-any.whl", hash = "sha256:d47fbf302e7d9cbbb9e2555a0d267983d2aa476bac30e90dfbe5669bd57f3762"}, {file = "networkx-3.6.1.tar.gz", hash = "sha256:26b7c357accc0c8cde558ad486283728b65b6a95d85ee1cd66bafab4c8168509"}, @@ -3952,7 +3918,6 @@ description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.9" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, @@ -3999,7 +3964,6 @@ description = "The official Python library for the openai API" optional = false python-versions = ">=3.9" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "openai-2.16.0-py3-none-any.whl", hash = "sha256:5f46643a8f42899a84e80c38838135d7038e7718333ce61396994f887b09a59b"}, {file = "openai-2.16.0.tar.gz", hash = "sha256:42eaa22ca0d8ded4367a77374104d7a2feafee5bd60a107c3c11b5243a11cd12"}, @@ -4028,7 +3992,6 @@ description = "OpenTelemetry Python API" optional = false python-versions = ">=3.9" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "opentelemetry_api-1.39.1-py3-none-any.whl", hash = "sha256:2edd8463432a7f8443edce90972169b195e7d6a05500cd29e6d13898187c9950"}, {file = "opentelemetry_api-1.39.1.tar.gz", hash = "sha256:fbde8c80e1b937a2c61f20347e91c0c18a1940cecf012d62e65a7caf08967c9c"}, @@ -4121,7 +4084,6 @@ files = [ {file = "orjson-3.11.6-cp314-cp314-win_arm64.whl", hash = "sha256:fe71f6b283f4f1832204ab8235ce07adad145052614f77c876fcf0dac97bc06f"}, {file = "orjson-3.11.6.tar.gz", hash = "sha256:0a54c72259f35299fd033042367df781c2f66d10252955ca1efb7db309b954cb"}, ] -markers = {main = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"", metrics = "(sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\") and platform_python_implementation != \"PyPy\""} [[package]] name = "ormsgpack" @@ -4129,8 +4091,7 @@ version = "1.12.2" description = "Fast, correct Python msgpack library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.10" -groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" +groups = ["main", "metrics"] files = [ {file = "ormsgpack-1.12.2-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:c1429217f8f4d7fcb053523bbbac6bed5e981af0b85ba616e6df7cce53c19657"}, {file = "ormsgpack-1.12.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f13034dc6c84a6280c6c33db7ac420253852ea233fc3ee27c8875f8dd651163"}, @@ -4190,7 +4151,6 @@ description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" groups = ["main", "dev", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, @@ -4203,7 +4163,7 @@ description = "Powerful data structures for data analysis, time series, and stat optional = false python-versions = ">=3.9" groups = ["metrics"] -markers = "(sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\") and python_version == \"3.10\"" +markers = "python_version == \"3.10\"" files = [ {file = "pandas-2.3.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:376c6446ae31770764215a6c937f72d917f214b43560603cd60da6408f183b6c"}, {file = "pandas-2.3.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e19d192383eab2f4ceb30b412b22ea30690c9e618f78870357ae1d682912015a"}, @@ -4300,7 +4260,7 @@ description = "Powerful data structures for data analysis, time series, and stat optional = false python-versions = ">=3.11" groups = ["metrics"] -markers = "(sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\") and python_version >= \"3.11\"" +markers = "python_version >= \"3.11\"" files = [ {file = "pandas-3.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d64ce01eb9cdca96a15266aa679ae50212ec52757c79204dbc7701a222401850"}, {file = "pandas-3.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:613e13426069793aa1ec53bdcc3b86e8d32071daea138bbcf4fa959c9cdaa2e2"}, @@ -4390,7 +4350,6 @@ description = "Utility library for gitignore style pattern matching of file path optional = false python-versions = ">=3.9" groups = ["dev"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "pathspec-1.0.4-py3-none-any.whl", hash = "sha256:fb6ae2fd4e7c921a165808a552060e722767cfa526f99ca5156ed2ce45a5c723"}, {file = "pathspec-1.0.4.tar.gz", hash = "sha256:0210e2ae8a21a9137c0d470578cb0e595af87edaa6ebf12ff176f14a02e0e645"}, @@ -4409,7 +4368,6 @@ description = "Python Imaging Library (fork)" optional = false python-versions = ">=3.10" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "pillow-12.1.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:fb125d860738a09d363a88daa0f59c4533529a90e564785e20fe875b200b6dbd"}, {file = "pillow-12.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cad302dc10fac357d3467a74a9561c90609768a6f73a1923b0fd851b6486f8b0"}, @@ -4519,7 +4477,6 @@ description = "A small Python package for determining appropriate platform-speci optional = false python-versions = ">=3.10" groups = ["main", "dev", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "platformdirs-4.5.1-py3-none-any.whl", hash = "sha256:d03afa3963c806a9bed9d5125c8f4cb2fdaf74a55ab60e5d59b3fde758104d31"}, {file = "platformdirs-4.5.1.tar.gz", hash = "sha256:61d5cdcc6065745cdd94f0f878977f8de9437be93de97c1c12f853c9c0cdcbda"}, @@ -4537,7 +4494,6 @@ description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.9" groups = ["dev"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746"}, {file = "pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3"}, @@ -4554,7 +4510,6 @@ description = "Wraps the portalocker recipe for easy usage" optional = false python-versions = ">=3.9" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "portalocker-3.2.0-py3-none-any.whl", hash = "sha256:3cdc5f565312224bc570c49337bd21428bba0ef363bbcf58b9ef4a9f11779968"}, {file = "portalocker-3.2.0.tar.gz", hash = "sha256:1f3002956a54a8c3730586c5c77bf18fae4149e07eaf1c29fc3faf4d5a3f89ac"}, @@ -4575,7 +4530,6 @@ description = "A simple Python library for easily displaying tabular data in a v optional = false python-versions = ">=3.10" groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "prettytable-3.17.0-py3-none-any.whl", hash = "sha256:aad69b294ddbe3e1f95ef8886a060ed1666a0b83018bbf56295f6f226c43d287"}, {file = "prettytable-3.17.0.tar.gz", hash = "sha256:59f2590776527f3c9e8cf9fe7b66dd215837cca96a9c39567414cbc632e8ddb0"}, @@ -4594,7 +4548,6 @@ description = "Accelerated property cache" optional = false python-versions = ">=3.9" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "propcache-0.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7c2d1fa3201efaf55d730400d945b5b3ab6e672e100ba0f9a409d950ab25d7db"}, {file = "propcache-0.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1eb2994229cc8ce7fe9b3db88f5465f5fd8651672840b2e426b88cdb1a30aac8"}, @@ -4727,7 +4680,6 @@ description = "" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "protobuf-5.29.5-cp310-abi3-win32.whl", hash = "sha256:3f1c6468a2cfd102ff4703976138844f78ebd1fb45f49011afc5139e9e283079"}, {file = "protobuf-5.29.5-cp310-abi3-win_amd64.whl", hash = "sha256:3f76e3a3675b4a4d867b52e4a5f5b78a2ef9565549d4037e06cf7b0942b1d3fc"}, @@ -4749,7 +4701,6 @@ description = "Cross-platform lib for process and system monitoring." optional = false python-versions = ">=3.6" groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "psutil-7.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b"}, {file = "psutil-7.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea"}, @@ -4785,7 +4736,6 @@ description = "PostgreSQL database adapter for Python" optional = false python-versions = ">=3.10" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "psycopg-3.3.2-py3-none-any.whl", hash = "sha256:3e94bc5f4690247d734599af56e51bae8e0db8e4311ea413f801fef82b14a99b"}, {file = "psycopg-3.3.2.tar.gz", hash = "sha256:707a67975ee214d200511177a6a80e56e654754c9afca06a7194ea6bbfde9ca7"}, @@ -4811,7 +4761,7 @@ description = "PostgreSQL database adapter for Python -- C optimisation distribu optional = false python-versions = ">=3.10" groups = ["main"] -markers = "(sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\") and implementation_name != \"pypy\"" +markers = "implementation_name != \"pypy\"" files = [ {file = "psycopg_binary-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0768c5f32934bb52a5df098317eca9bdcf411de627c5dca2ee57662b64b54b41"}, {file = "psycopg_binary-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:09b3014013f05cd89828640d3a1db5f829cc24ad8fa81b6e42b2c04685a0c9d4"}, @@ -4877,7 +4827,6 @@ description = "Connection Pool for Psycopg" optional = false python-versions = ">=3.10" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "psycopg_pool-3.3.0-py3-none-any.whl", hash = "sha256:2e44329155c410b5e8666372db44276a8b1ebd8c90f1c3026ebba40d4bc81063"}, {file = "psycopg_pool-3.3.0.tar.gz", hash = "sha256:fa115eb2860bd88fce1717d75611f41490dec6135efb619611142b24da3f6db5"}, @@ -4896,7 +4845,6 @@ description = "psycopg2 - Python-PostgreSQL Database Adapter" optional = false python-versions = ">=3.9" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "psycopg2-binary-2.9.11.tar.gz", hash = "sha256:b6aed9e096bf63f9e75edf2581aa9a7e7186d97ab5c177aa6c87797cd591236c"}, {file = "psycopg2_binary-2.9.11-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d6fe6b47d0b42ce1c9f1fa3e35bb365011ca22e39db37074458f27921dca40f2"}, @@ -4904,8 +4852,10 @@ files = [ {file = "psycopg2_binary-2.9.11-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c47676e5b485393f069b4d7a811267d3168ce46f988fa602658b8bb901e9e64d"}, {file = "psycopg2_binary-2.9.11-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:a28d8c01a7b27a1e3265b11250ba7557e5f72b5ee9e5f3a2fa8d2949c29bf5d2"}, {file = "psycopg2_binary-2.9.11-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5f3f2732cf504a1aa9e9609d02f79bea1067d99edf844ab92c247bbca143303b"}, + {file = "psycopg2_binary-2.9.11-cp310-cp310-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:865f9945ed1b3950d968ec4690ce68c55019d79e4497366d36e090327ce7db14"}, {file = "psycopg2_binary-2.9.11-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:91537a8df2bde69b1c1db01d6d944c831ca793952e4f57892600e96cee95f2cd"}, {file = "psycopg2_binary-2.9.11-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4dca1f356a67ecb68c81a7bc7809f1569ad9e152ce7fd02c2f2036862ca9f66b"}, + {file = "psycopg2_binary-2.9.11-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:0da4de5c1ac69d94ed4364b6cbe7190c1a70d325f112ba783d83f8440285f152"}, {file = "psycopg2_binary-2.9.11-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:37d8412565a7267f7d79e29ab66876e55cb5e8e7b3bbf94f8206f6795f8f7e7e"}, {file = "psycopg2_binary-2.9.11-cp310-cp310-win_amd64.whl", hash = "sha256:c665f01ec8ab273a61c62beeb8cce3014c214429ced8a308ca1fc410ecac3a39"}, {file = "psycopg2_binary-2.9.11-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0e8480afd62362d0a6a27dd09e4ca2def6fa50ed3a4e7c09165266106b2ffa10"}, @@ -4913,8 +4863,10 @@ files = [ {file = "psycopg2_binary-2.9.11-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2e164359396576a3cc701ba8af4751ae68a07235d7a380c631184a611220d9a4"}, {file = "psycopg2_binary-2.9.11-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:d57c9c387660b8893093459738b6abddbb30a7eab058b77b0d0d1c7d521ddfd7"}, {file = "psycopg2_binary-2.9.11-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2c226ef95eb2250974bf6fa7a842082b31f68385c4f3268370e3f3870e7859ee"}, + {file = "psycopg2_binary-2.9.11-cp311-cp311-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a311f1edc9967723d3511ea7d2708e2c3592e3405677bf53d5c7246753591fbb"}, {file = "psycopg2_binary-2.9.11-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ebb415404821b6d1c47353ebe9c8645967a5235e6d88f914147e7fd411419e6f"}, {file = "psycopg2_binary-2.9.11-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f07c9c4a5093258a03b28fab9b4f151aa376989e7f35f855088234e656ee6a94"}, + {file = "psycopg2_binary-2.9.11-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:00ce1830d971f43b667abe4a56e42c1e2d594b32da4802e44a73bacacb25535f"}, {file = "psycopg2_binary-2.9.11-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:cffe9d7697ae7456649617e8bb8d7a45afb71cd13f7ab22af3e5c61f04840908"}, {file = "psycopg2_binary-2.9.11-cp311-cp311-win_amd64.whl", hash = "sha256:304fd7b7f97eef30e91b8f7e720b3db75fee010b520e434ea35ed1ff22501d03"}, {file = "psycopg2_binary-2.9.11-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:be9b840ac0525a283a96b556616f5b4820e0526addb8dcf6525a0fa162730be4"}, @@ -4922,8 +4874,10 @@ files = [ {file = "psycopg2_binary-2.9.11-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ab8905b5dcb05bf3fb22e0cf90e10f469563486ffb6a96569e51f897c750a76a"}, {file = "psycopg2_binary-2.9.11-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:bf940cd7e7fec19181fdbc29d76911741153d51cab52e5c21165f3262125685e"}, {file = "psycopg2_binary-2.9.11-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fa0f693d3c68ae925966f0b14b8edda71696608039f4ed61b1fe9ffa468d16db"}, + {file = "psycopg2_binary-2.9.11-cp312-cp312-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a1cf393f1cdaf6a9b57c0a719a1068ba1069f022a59b8b1fe44b006745b59757"}, {file = "psycopg2_binary-2.9.11-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ef7a6beb4beaa62f88592ccc65df20328029d721db309cb3250b0aae0fa146c3"}, {file = "psycopg2_binary-2.9.11-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:31b32c457a6025e74d233957cc9736742ac5a6cb196c6b68499f6bb51390bd6a"}, + {file = "psycopg2_binary-2.9.11-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:edcb3aeb11cb4bf13a2af3c53a15b3d612edeb6409047ea0b5d6a21a9d744b34"}, {file = "psycopg2_binary-2.9.11-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:62b6d93d7c0b61a1dd6197d208ab613eb7dcfdcca0a49c42ceb082257991de9d"}, {file = "psycopg2_binary-2.9.11-cp312-cp312-win_amd64.whl", hash = "sha256:b33fabeb1fde21180479b2d4667e994de7bbf0eec22832ba5d9b5e4cf65b6c6d"}, {file = "psycopg2_binary-2.9.11-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b8fb3db325435d34235b044b199e56cdf9ff41223a4b9752e8576465170bb38c"}, @@ -4931,8 +4885,10 @@ files = [ {file = "psycopg2_binary-2.9.11-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8c55b385daa2f92cb64b12ec4536c66954ac53654c7f15a203578da4e78105c0"}, {file = "psycopg2_binary-2.9.11-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:c0377174bf1dd416993d16edc15357f6eb17ac998244cca19bc67cdc0e2e5766"}, {file = "psycopg2_binary-2.9.11-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5c6ff3335ce08c75afaed19e08699e8aacf95d4a260b495a4a8545244fe2ceb3"}, + {file = "psycopg2_binary-2.9.11-cp313-cp313-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:84011ba3109e06ac412f95399b704d3d6950e386b7994475b231cf61eec2fc1f"}, {file = "psycopg2_binary-2.9.11-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ba34475ceb08cccbdd98f6b46916917ae6eeb92b5ae111df10b544c3a4621dc4"}, {file = "psycopg2_binary-2.9.11-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:b31e90fdd0f968c2de3b26ab014314fe814225b6c324f770952f7d38abf17e3c"}, + {file = "psycopg2_binary-2.9.11-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:d526864e0f67f74937a8fce859bd56c979f5e2ec57ca7c627f5f1071ef7fee60"}, {file = "psycopg2_binary-2.9.11-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:04195548662fa544626c8ea0f06561eb6203f1984ba5b4562764fbeb4c3d14b1"}, {file = "psycopg2_binary-2.9.11-cp313-cp313-win_amd64.whl", hash = "sha256:efff12b432179443f54e230fdf60de1f6cc726b6c832db8701227d089310e8aa"}, {file = "psycopg2_binary-2.9.11-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:92e3b669236327083a2e33ccfa0d320dd01b9803b3e14dd986a4fc54aa00f4e1"}, @@ -4940,8 +4896,10 @@ files = [ {file = "psycopg2_binary-2.9.11-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:9b52a3f9bb540a3e4ec0f6ba6d31339727b2950c9772850d6545b7eae0b9d7c5"}, {file = "psycopg2_binary-2.9.11-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:db4fd476874ccfdbb630a54426964959e58da4c61c9feba73e6094d51303d7d8"}, {file = "psycopg2_binary-2.9.11-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:47f212c1d3be608a12937cc131bd85502954398aaa1320cb4c14421a0ffccf4c"}, + {file = "psycopg2_binary-2.9.11-cp314-cp314-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e35b7abae2b0adab776add56111df1735ccc71406e56203515e228a8dc07089f"}, {file = "psycopg2_binary-2.9.11-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:fcf21be3ce5f5659daefd2b3b3b6e4727b028221ddc94e6c1523425579664747"}, {file = "psycopg2_binary-2.9.11-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:9bd81e64e8de111237737b29d68039b9c813bdf520156af36d26819c9a979e5f"}, + {file = "psycopg2_binary-2.9.11-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:32770a4d666fbdafab017086655bcddab791d7cb260a16679cc5a7338b64343b"}, {file = "psycopg2_binary-2.9.11-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c3cb3a676873d7506825221045bd70e0427c905b9c8ee8d6acd70cfcbd6e576d"}, {file = "psycopg2_binary-2.9.11-cp314-cp314-win_amd64.whl", hash = "sha256:4012c9c954dfaccd28f94e84ab9f94e12df76b4afb22331b1f0d3154893a6316"}, {file = "psycopg2_binary-2.9.11-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:20e7fb94e20b03dcc783f76c0865f9da39559dcc0c28dd1a3fce0d01902a6b9c"}, @@ -4949,8 +4907,10 @@ files = [ {file = "psycopg2_binary-2.9.11-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:9d3a9edcfbe77a3ed4bc72836d466dfce4174beb79eda79ea155cc77237ed9e8"}, {file = "psycopg2_binary-2.9.11-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:44fc5c2b8fa871ce7f0023f619f1349a0aa03a0857f2c96fbc01c657dcbbdb49"}, {file = "psycopg2_binary-2.9.11-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9c55460033867b4622cda1b6872edf445809535144152e5d14941ef591980edf"}, + {file = "psycopg2_binary-2.9.11-cp39-cp39-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:2d11098a83cca92deaeaed3d58cfd150d49b3b06ee0d0852be466bf87596899e"}, {file = "psycopg2_binary-2.9.11-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:691c807d94aecfbc76a14e1408847d59ff5b5906a04a23e12a89007672b9e819"}, {file = "psycopg2_binary-2.9.11-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:8b81627b691f29c4c30a8f322546ad039c40c328373b11dff7490a3e1b517855"}, + {file = "psycopg2_binary-2.9.11-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:b637d6d941209e8d96a072d7977238eea128046effbf37d1d8b2c0764750017d"}, {file = "psycopg2_binary-2.9.11-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:41360b01c140c2a03d346cec3280cf8a71aa07d94f3b1509fa0161c366af66b4"}, {file = "psycopg2_binary-2.9.11-cp39-cp39-win_amd64.whl", hash = "sha256:875039274f8a2361e5207857899706da840768e2a775bf8c65e82f60b197df02"}, ] @@ -4962,7 +4922,6 @@ description = "Python library for Apache Arrow" optional = false python-versions = ">=3.10" groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "pyarrow-23.0.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:cbdc2bf5947aa4d462adcf8453cf04aee2f7932653cb67a27acd96e5e8528a67"}, {file = "pyarrow-23.0.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:4d38c836930ce15cd31dce20114b21ba082da231c884bdc0a7b53e1477fe7f07"}, @@ -5023,7 +4982,6 @@ description = "Python style guide checker" optional = false python-versions = ">=3.8" groups = ["dev"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "pycodestyle-2.11.1-py2.py3-none-any.whl", hash = "sha256:44fe31000b2d866f2e41841b18528a505fbd7fef9017b04eff4e2648a0fadc67"}, {file = "pycodestyle-2.11.1.tar.gz", hash = "sha256:41ba0e7afc9752dfb53ced5489e89f8186be00e599e712660695b7a75ff2663f"}, @@ -5040,7 +4998,7 @@ files = [ {file = "pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992"}, {file = "pycparser-3.0.tar.gz", hash = "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29"}, ] -markers = {main = "(sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\") and platform_python_implementation != \"PyPy\" and implementation_name != \"PyPy\"", metrics = "sys_platform == \"win32\" and platform_python_implementation == \"CPython\" and implementation_name != \"PyPy\" or implementation_name == \"pypy\""} +markers = {main = "platform_python_implementation != \"PyPy\" and implementation_name != \"PyPy\"", metrics = "platform_python_implementation == \"CPython\" and sys_platform == \"win32\" and implementation_name != \"PyPy\" or implementation_name == \"pypy\""} [[package]] name = "pydantic" @@ -5049,7 +5007,6 @@ description = "Data validation using Python type hints" optional = false python-versions = ">=3.9" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "pydantic-2.12.5-py3-none-any.whl", hash = "sha256:e561593fccf61e8a20fc46dfc2dfe075b8be7d0188df33f221ad1f0139180f9d"}, {file = "pydantic-2.12.5.tar.gz", hash = "sha256:4d351024c75c0f085a9febbb665ce8c0c6ec5d30e903bdb6394b7ede26aebb49"}, @@ -5072,7 +5029,6 @@ description = "Core functionality for Pydantic validation and serialization" optional = false python-versions = ">=3.9" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "pydantic_core-2.41.5-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:77b63866ca88d804225eaa4af3e664c5faf3568cea95360d21f4725ab6e07146"}, {file = "pydantic_core-2.41.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:dfa8a0c812ac681395907e71e1274819dec685fec28273a28905df579ef137e2"}, @@ -5207,7 +5163,6 @@ description = "Settings management using Pydantic" optional = false python-versions = ">=3.10" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "pydantic_settings-2.12.0-py3-none-any.whl", hash = "sha256:fddb9fd99a5b18da837b29710391e945b1e30c135477f484084ee513adb93809"}, {file = "pydantic_settings-2.12.0.tar.gz", hash = "sha256:005538ef951e3c2a68e1c08b292b5f2e71490def8589d4221b95dab00dafcfd0"}, @@ -5232,7 +5187,6 @@ description = "passive checker of Python programs" optional = false python-versions = ">=3.8" groups = ["dev"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "pyflakes-3.1.0-py2.py3-none-any.whl", hash = "sha256:4132f6d49cb4dae6819e5379898f2b8cce3c5f23994194c24b77d5da2e36f774"}, {file = "pyflakes-3.1.0.tar.gz", hash = "sha256:a0aae034c444db0071aa077972ba4768d40c830d9539fd45bf4cd3f8f6992efc"}, @@ -5245,7 +5199,6 @@ description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.8" groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b"}, {file = "pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887"}, @@ -5261,7 +5214,6 @@ description = "JSON Web Token implementation in Python" optional = false python-versions = ">=3.9" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "pyjwt-2.11.0-py3-none-any.whl", hash = "sha256:94a6bde30eb5c8e04fee991062b534071fd1439ef58d2adc9ccb823e7bcd0469"}, {file = "pyjwt-2.11.0.tar.gz", hash = "sha256:35f95c1f0fbe5d5ba6e43f00271c275f7a1a4db1dab27bf708073b75318ea623"}, @@ -5283,7 +5235,6 @@ description = "python code static checker" optional = false python-versions = ">=3.7.2" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "pylint-2.17.7-py3-none-any.whl", hash = "sha256:27a8d4c7ddc8c2f8c18aa0050148f89ffc09838142193fdbe98f172781a3ff87"}, {file = "pylint-2.17.7.tar.gz", hash = "sha256:f4fcac7ae74cfe36bc8451e931d8438e4a476c20314b1101c458ad0f05191fad"}, @@ -5313,7 +5264,6 @@ description = "Utilities and helpers for writing Pylint plugins" optional = false python-versions = "<4.0,>=3.9" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "pylint_plugin_utils-0.9.0-py3-none-any.whl", hash = "sha256:16e9b84e5326ba893a319a0323fcc8b4bcc9c71fc654fcabba0605596c673818"}, {file = "pylint_plugin_utils-0.9.0.tar.gz", hash = "sha256:5468d763878a18d5cc4db46eaffdda14313b043c962a263a7d78151b90132055"}, @@ -5329,7 +5279,6 @@ description = "A Pylint plugin to help Pylint understand the Pydantic" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "pylint_pydantic-0.2.4-py3-none-any.whl", hash = "sha256:452b32992f47e303b432f8940d4077f1d60e8d3325351b8998d846431699111a"}, ] @@ -5346,7 +5295,6 @@ description = "A pure-python PDF library capable of splitting, merging, cropping optional = false python-versions = ">=3.9" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "pypdf-6.6.2-py3-none-any.whl", hash = "sha256:44c0c9811cfb3b83b28f1c3d054531d5b8b81abaedee0d8cb403650d023832ba"}, {file = "pypdf-6.6.2.tar.gz", hash = "sha256:0a3ea3b3303982333404e22d8f75d7b3144f9cf4b2970b96856391a516f9f016"}, @@ -5370,7 +5318,6 @@ description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.7" groups = ["dev"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "pytest-7.4.4-py3-none-any.whl", hash = "sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8"}, {file = "pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280"}, @@ -5394,7 +5341,6 @@ description = "Pytest plugin for measuring coverage." optional = false python-versions = ">=3.7" groups = ["dev"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "pytest-cov-4.1.0.tar.gz", hash = "sha256:3904b13dfbfec47f003b8e77fd5b589cd11904a21ddf1ab38a64f204d6a10ef6"}, {file = "pytest_cov-4.1.0-py3-none-any.whl", hash = "sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a"}, @@ -5414,7 +5360,6 @@ description = "pytest plugin that allows you to add environment variables." optional = false python-versions = ">=3.8" groups = ["dev"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "pytest_env-1.1.3-py3-none-any.whl", hash = "sha256:aada77e6d09fcfb04540a6e462c58533c37df35fa853da78707b17ec04d17dfc"}, {file = "pytest_env-1.1.3.tar.gz", hash = "sha256:fcd7dc23bb71efd3d35632bde1bbe5ee8c8dc4489d6617fb010674880d96216b"}, @@ -5434,7 +5379,6 @@ description = "Extensions to the standard Python datetime module" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, @@ -5450,7 +5394,6 @@ description = "Create, read, and update Microsoft Word .docx files." optional = false python-versions = ">=3.9" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "python_docx-1.2.0-py3-none-any.whl", hash = "sha256:3fd478f3250fbbbfd3b94fe1e985955737c145627498896a8a6bf81f4baf66c7"}, {file = "python_docx-1.2.0.tar.gz", hash = "sha256:7bc9d7b7d8a69c9c02ca09216118c86552704edc23bac179283f2e38f86220ce"}, @@ -5467,7 +5410,6 @@ description = "Read key-value pairs from a .env file and set them as environment optional = false python-versions = ">=3.9" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "python_dotenv-1.2.1-py3-none-any.whl", hash = "sha256:b81ee9561e9ca4004139c6cbba3a238c32b03e4894671e181b671e8cb8425d61"}, {file = "python_dotenv-1.2.1.tar.gz", hash = "sha256:42667e897e16ab0d66954af0e60a9caa94f0fd4ecf3aaf6d2d260eec1aa36ad6"}, @@ -5483,7 +5425,6 @@ description = "Engine.IO server and client for Python" optional = false python-versions = ">=3.8" groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "python_engineio-4.13.0-py3-none-any.whl", hash = "sha256:57b94eac094fa07b050c6da59f48b12250ab1cd920765f4849963e3d89ad9de3"}, {file = "python_engineio-4.13.0.tar.gz", hash = "sha256:f9c51a8754d2742ba832c24b46ed425fdd3064356914edd5a1e8ffde76ab7709"}, @@ -5505,7 +5446,6 @@ description = "A streaming multipart parser for Python" optional = false python-versions = ">=3.10" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "python_multipart-0.0.22-py3-none-any.whl", hash = "sha256:2b2cd894c83d21bf49d702499531c7bafd057d730c201782048f7945d82de155"}, {file = "python_multipart-0.0.22.tar.gz", hash = "sha256:7340bef99a7e0032613f56dc36027b959fd3b30a787ed62d310e951f7c3a3a58"}, @@ -5518,7 +5458,6 @@ description = "Socket.IO server and client for Python" optional = false python-versions = ">=3.8" groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "python_socketio-5.16.0-py3-none-any.whl", hash = "sha256:d95802961e15c7bd54ecf884c6e7644f81be8460f0a02ee66b473df58088ee8a"}, {file = "python_socketio-5.16.0.tar.gz", hash = "sha256:f79403c7f1ba8b84460aa8fe4c671414c8145b21a501b46b676f3740286356fd"}, @@ -5543,7 +5482,7 @@ description = "World timezone definitions, modern and historical" optional = false python-versions = "*" groups = ["metrics"] -markers = "(sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\") and python_version == \"3.10\"" +markers = "python_version == \"3.10\"" files = [ {file = "pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00"}, {file = "pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3"}, @@ -5578,7 +5517,7 @@ files = [ {file = "pywin32-311-cp39-cp39-win_amd64.whl", hash = "sha256:e0c4cfb0621281fe40387df582097fd796e80430597cb9944f0ae70447bacd91"}, {file = "pywin32-311-cp39-cp39-win_arm64.whl", hash = "sha256:62ea666235135fee79bb154e695f3ff67370afefd71bd7fea7512fc70ef31e3d"}, ] -markers = {main = "(sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\") and platform_system == \"Windows\"", metrics = "sys_platform == \"win32\""} +markers = {main = "platform_system == \"Windows\"", metrics = "sys_platform == \"win32\""} [[package]] name = "pyyaml" @@ -5587,7 +5526,6 @@ description = "YAML parser and emitter for Python" optional = false python-versions = ">=3.8" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "PyYAML-6.0.3-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:c2514fceb77bc5e7a2f7adfaa1feb2fb311607c9cb518dbc378688ec73d8292f"}, {file = "PyYAML-6.0.3-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c57bb8c96f6d1808c030b1687b9b5fb476abaa47f0db9c0101f5e9f394e97f4"}, @@ -5671,7 +5609,6 @@ description = "Python bindings for 0MQ" optional = false python-versions = ">=3.8" groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "pyzmq-27.1.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:508e23ec9bc44c0005c4946ea013d9317ae00ac67778bd47519fdf5a0e930ff4"}, {file = "pyzmq-27.1.0-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:507b6f430bdcf0ee48c0d30e734ea89ce5567fd7b8a0f0044a369c176aa44556"}, @@ -5777,7 +5714,6 @@ description = "Client library for the Qdrant vector search engine" optional = false python-versions = ">=3.10" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "qdrant_client-1.16.2-py3-none-any.whl", hash = "sha256:442c7ef32ae0f005e88b5d3c0783c63d4912b97ae756eb5e052523be682f17d3"}, {file = "qdrant_client-1.16.2.tar.gz", hash = "sha256:ca4ef5f9be7b5eadeec89a085d96d5c723585a391eb8b2be8192919ab63185f0"}, @@ -5807,7 +5743,6 @@ description = "Evaluation framework for RAG and LLM applications" optional = false python-versions = ">=3.9" groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "ragas-0.4.3-py3-none-any.whl", hash = "sha256:ef1d75f674c294e9a6e7d8e9ad261b6bf4697dad1c9cbd1a756ba7a6b4849a38"}, {file = "ragas-0.4.3.tar.gz", hash = "sha256:1eb1f61dbc8613ad014fdb8d630cbe9a1caec1ea01664a106993cb756128c001"}, @@ -5853,7 +5788,6 @@ description = "JSON Referencing + Python" optional = false python-versions = ">=3.10" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "referencing-0.37.0-py3-none-any.whl", hash = "sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231"}, {file = "referencing-0.37.0.tar.gz", hash = "sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8"}, @@ -5871,7 +5805,6 @@ description = "Python library for post-extraction refinement of text that may be optional = false python-versions = ">=3.9" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "refinedoc-1.0.1-py3-none-any.whl", hash = "sha256:a2840fefb110b33d84474ef3b5e3b3813a55fb7c8e42a70615f51acb1b3885c7"}, {file = "refinedoc-1.0.1.tar.gz", hash = "sha256:afad515bcbd13e9e7ba40d149d6b2a8a04c88323bc31eef2eddf3e3bbd6e921b"}, @@ -5884,7 +5817,6 @@ description = "Alternative regular expression module, to replace re." optional = false python-versions = ">=3.9" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "regex-2026.1.15-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4e3dd93c8f9abe8aa4b6c652016da9a3afa190df5ad822907efe6b206c09896e"}, {file = "regex-2026.1.15-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:97499ff7862e868b1977107873dd1a06e151467129159a6ffd07b66706ba3a9f"}, @@ -6026,7 +5958,6 @@ description = "Python HTTP for Humans." optional = false python-versions = ">=3.9" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6"}, {file = "requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf"}, @@ -6049,7 +5980,6 @@ description = "A utility belt for advanced users of python-requests" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6"}, {file = "requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06"}, @@ -6065,7 +5995,6 @@ description = "Render rich text, tables, progress bars, syntax highlighting, mar optional = false python-versions = ">=3.8.0" groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "rich-14.3.2-py3-none-any.whl", hash = "sha256:08e67c3e90884651da3239ea668222d19bea7b589149d8014a21c633420dbb69"}, {file = "rich-14.3.2.tar.gz", hash = "sha256:e712f11c1a562a11843306f5ed999475f09ac31ffb64281f73ab29ffdda8b3b8"}, @@ -6085,7 +6014,6 @@ description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.10" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "rpds_py-0.30.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:679ae98e00c0e8d68a7fda324e16b90fd5260945b45d3b824c892cec9eea3288"}, {file = "rpds_py-0.30.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4cc2206b76b4f576934f0ed374b10d7ca5f457858b157ca52064bdfc26b9fc00"}, @@ -6210,8 +6138,7 @@ version = "0.7.0" description = "" optional = false python-versions = ">=3.9" -groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" +groups = ["main"] files = [ {file = "safetensors-0.7.0-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:c82f4d474cf725255d9e6acf17252991c3c8aac038d6ef363a4bf8be2f6db517"}, {file = "safetensors-0.7.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:94fd4858284736bb67a897a41608b5b0c2496c9bdb3bf2af1fa3409127f20d57"}, @@ -6258,8 +6185,7 @@ version = "1.7.2" description = "A set of python modules for machine learning and data mining" optional = false python-versions = ">=3.10" -groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" +groups = ["main"] files = [ {file = "scikit_learn-1.7.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b33579c10a3081d076ab403df4a4190da4f4432d443521674637677dc91e61f"}, {file = "scikit_learn-1.7.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:36749fb62b3d961b1ce4fedf08fa57a1986cd409eff2d783bca5d4b9b5fce51c"}, @@ -6316,7 +6242,6 @@ description = "Graph algorithms" optional = false python-versions = ">=3.10" groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "scikit_network-0.33.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bfcb4b945286154800eb61998fae85675d9a05ee78e776a82e7d222bf978e171"}, {file = "scikit_network-0.33.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:854d33b2056dff4fca1b956b46955f3d668148ba63c5cc51a5c497e7ee765def"}, @@ -6355,7 +6280,7 @@ description = "Fundamental algorithms for scientific computing in Python" optional = false python-versions = ">=3.10" groups = ["main", "metrics"] -markers = "(sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\") and python_version == \"3.10\"" +markers = "python_version == \"3.10\"" files = [ {file = "scipy-1.15.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:a345928c86d535060c9c2b25e71e87c39ab2f22fc96e9636bd74d1dbf9de448c"}, {file = "scipy-1.15.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:ad3432cb0f9ed87477a8d97f03b763fd1d57709f1bbde3c9369b1dff5503b253"}, @@ -6420,7 +6345,7 @@ description = "Fundamental algorithms for scientific computing in Python" optional = false python-versions = ">=3.11" groups = ["main", "metrics"] -markers = "(sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\") and python_version >= \"3.11\"" +markers = "python_version >= \"3.11\"" files = [ {file = "scipy-1.17.0-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:2abd71643797bd8a106dff97894ff7869eeeb0af0f7a5ce02e4227c6a2e9d6fd"}, {file = "scipy-1.17.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:ef28d815f4d2686503e5f4f00edc387ae58dfd7a2f42e348bb53359538f01558"}, @@ -6493,37 +6418,6 @@ dev = ["click (<8.3.0)", "cython-lint (>=0.12.2)", "mypy (==1.10.0)", "pycodesty doc = ["intersphinx_registry", "jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.19.1)", "jupytext", "linkify-it-py", "matplotlib (>=3.5)", "myst-nb (>=1.2.0)", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0,<8.2.0)", "sphinx-copybutton", "sphinx-design (>=0.4.0)", "tabulate"] test = ["Cython", "array-api-strict (>=2.3.1)", "asv", "gmpy2", "hypothesis (>=6.30)", "meson", "mpmath", "ninja ; sys_platform != \"emscripten\"", "pooch", "pytest (>=8.0.0)", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] -[[package]] -name = "sentence-transformers" -version = "5.2.2" -description = "Embeddings, Retrieval, and Reranking" -optional = false -python-versions = ">=3.10" -groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" -files = [ - {file = "sentence_transformers-5.2.2-py3-none-any.whl", hash = "sha256:280ac54bffb84c110726b4d8848ba7b7c60813b9034547f8aea6e9a345cd1c23"}, - {file = "sentence_transformers-5.2.2.tar.gz", hash = "sha256:7033ee0a24bc04c664fd490abf2ef194d387b3a58a97adcc528783ff505159fa"}, -] - -[package.dependencies] -huggingface-hub = ">=0.20.0" -numpy = "*" -scikit-learn = "*" -scipy = "*" -torch = ">=1.11.0" -tqdm = "*" -transformers = ">=4.41.0,<6.0.0" -typing_extensions = ">=4.5.0" - -[package.extras] -dev = ["Pillow", "accelerate (>=0.20.3)", "datasets", "peft", "pre-commit", "pytest", "pytest-cov"] -image = ["Pillow"] -onnx = ["optimum-onnx[onnxruntime]"] -onnx-gpu = ["optimum-onnx[onnxruntime-gpu]"] -openvino = ["optimum-intel[openvino]"] -train = ["accelerate (>=0.20.3)", "datasets"] - [[package]] name = "setuptools" version = "80.10.2" @@ -6531,7 +6425,6 @@ description = "Easily download, build, install, upgrade, and uninstall Python pa optional = false python-versions = ">=3.9" groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "setuptools-80.10.2-py3-none-any.whl", hash = "sha256:95b30ddfb717250edb492926c92b5221f7ef3fbcc2b07579bcd4a27da21d0173"}, {file = "setuptools-80.10.2.tar.gz", hash = "sha256:8b0e9d10c784bf7d262c4e5ec5d4ec94127ce206e8738f29a437945fbc219b70"}, @@ -6553,7 +6446,6 @@ description = "Tool to Detect Surrounding Shell" optional = false python-versions = ">=3.7" groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686"}, {file = "shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de"}, @@ -6566,7 +6458,6 @@ description = "Simple WebSocket server and client for Python" optional = false python-versions = ">=3.6" groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "simple_websocket-1.1.0-py3-none-any.whl", hash = "sha256:4af6069630a38ed6c561010f0e11a5bc0d4ca569b36306eb257cd9a192497c8c"}, {file = "simple_websocket-1.1.0.tar.gz", hash = "sha256:7939234e7aa067c534abdab3a9ed933ec9ce4691b0713c78acb195560aa52ae4"}, @@ -6586,7 +6477,6 @@ description = "Python 2 and 3 compatibility utilities" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, @@ -6599,7 +6489,6 @@ description = "Sniff out which async library your code is running under" optional = false python-versions = ">=3.7" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, @@ -6612,7 +6501,6 @@ description = "A modern CSS selector implementation for Beautiful Soup." optional = false python-versions = ">=3.9" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "soupsieve-2.8.3-py3-none-any.whl", hash = "sha256:ed64f2ba4eebeab06cc4962affce381647455978ffc1e36bb79a545b91f45a95"}, {file = "soupsieve-2.8.3.tar.gz", hash = "sha256:3267f1eeea4251fb42728b6dfb746edc9acaffc4a45b27e19450b676586e8349"}, @@ -6625,7 +6513,6 @@ description = "Database Abstraction Library" optional = false python-versions = ">=3.7" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "sqlalchemy-2.0.46-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:895296687ad06dc9b11a024cf68e8d9d3943aa0b4964278d2553b86f1b267735"}, {file = "sqlalchemy-2.0.46-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ab65cb2885a9f80f979b85aa4e9c9165a31381ca322cbde7c638fe6eefd1ec39"}, @@ -6724,7 +6611,6 @@ description = "The little ASGI library that shines." optional = false python-versions = ">=3.9" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "starlette-0.46.2-py3-none-any.whl", hash = "sha256:595633ce89f8ffa71a015caed34a5b2dc1c0cdb3f0f1fbd1e69339cf2abeec35"}, {file = "starlette-0.46.2.tar.gz", hash = "sha256:7f7361f34eed179294600af672f565727419830b54b7b084efe44bb82d2fccd5"}, @@ -6742,8 +6628,7 @@ version = "1.14.0" description = "Computer algebra system (CAS) in Python" optional = false python-versions = ">=3.9" -groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" +groups = ["main"] files = [ {file = "sympy-1.14.0-py3-none-any.whl", hash = "sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5"}, {file = "sympy-1.14.0.tar.gz", hash = "sha256:d3d3fe8df1e5a0b42f0e7bdf50541697dbe7d23746e894990c030e2b05e72517"}, @@ -6762,7 +6647,6 @@ description = "Retry code until it succeeds" optional = false python-versions = ">=3.9" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "tenacity-9.1.2-py3-none-any.whl", hash = "sha256:f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138"}, {file = "tenacity-9.1.2.tar.gz", hash = "sha256:1169d376c297e7de388d18b4481760d478b0e99a777cad3a9c86e556f4b697cb"}, @@ -6778,8 +6662,7 @@ version = "3.6.0" description = "threadpoolctl" optional = false python-versions = ">=3.9" -groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" +groups = ["main"] files = [ {file = "threadpoolctl-3.6.0-py3-none-any.whl", hash = "sha256:43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb"}, {file = "threadpoolctl-3.6.0.tar.gz", hash = "sha256:8ab8b4aa3491d812b623328249fab5302a68d2d71745c8a4c719a2fcaba9f44e"}, @@ -6792,7 +6675,6 @@ description = "tiktoken is a fast BPE tokeniser for use with OpenAI's models" optional = false python-versions = ">=3.9" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "tiktoken-0.12.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:3de02f5a491cfd179aec916eddb70331814bd6bf764075d39e21d5862e533970"}, {file = "tiktoken-0.12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b6cfb6d9b7b54d20af21a912bfe63a2727d9cfa8fbda642fd8322c70340aad16"}, @@ -6866,8 +6748,7 @@ version = "0.21.4" description = "" optional = false python-versions = ">=3.9" -groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" +groups = ["main"] files = [ {file = "tokenizers-0.21.4-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:2ccc10a7c3bcefe0f242867dc914fc1226ee44321eb618cfe3019b5df3400133"}, {file = "tokenizers-0.21.4-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:5e2f601a8e0cd5be5cc7506b20a79112370b9b3e9cb5f13f68ab11acd6ca7d60"}, @@ -6901,7 +6782,7 @@ description = "A lil' TOML parser" optional = false python-versions = ">=3.8" groups = ["main", "dev", "metrics"] -markers = "(sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\") and python_version == \"3.10\"" +markers = "python_version == \"3.10\"" files = [ {file = "tomli-2.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b5ef256a3fd497d4973c11bf142e9ed78b150d36f5773f1ca6088c230ffc5867"}, {file = "tomli-2.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5572e41282d5268eb09a697c89a7bee84fae66511f87533a6f88bd2f7b652da9"}, @@ -6959,7 +6840,6 @@ description = "Style preserving TOML library" optional = false python-versions = ">=3.9" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "tomlkit-0.14.0-py3-none-any.whl", hash = "sha256:592064ed85b40fa213469f81ac584f67a4f2992509a7c3ea2d632208623a3680"}, {file = "tomlkit-0.14.0.tar.gz", hash = "sha256:cf00efca415dbd57575befb1f6634c4f42d2d87dbba376128adb42c121b87064"}, @@ -6971,8 +6851,7 @@ version = "2.2.2+cpu" description = "Tensors and Dynamic neural networks in Python with strong GPU acceleration" optional = false python-versions = ">=3.8.0" -groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" +groups = ["main"] files = [ {file = "torch-2.2.2+cpu-cp310-cp310-linux_x86_64.whl", hash = "sha256:02c4fac3c964e73f5f49003e0060c697f73b67c10cc23f51c592facb29e1bd53"}, {file = "torch-2.2.2+cpu-cp310-cp310-win_amd64.whl", hash = "sha256:fc29dda2795dd7220d769c5926b1c50ddac9b4827897e30a10467063691cdf54"}, @@ -7010,7 +6889,6 @@ description = "image and video datasets and models for torch deep learning" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "torchvision-0.17.2+cpu-cp310-cp310-linux_x86_64.whl", hash = "sha256:34ba0274b6150b59b9d91c421c116a217982d5e6c6101b5109f400b994c43e3d"}, {file = "torchvision-0.17.2+cpu-cp310-cp310-win_amd64.whl", hash = "sha256:acad6f9573b9d6b50a5a3942d0145cb0f9100608acb53a09bfc11ed5720dcfe3"}, @@ -7044,7 +6922,6 @@ description = "Fast, Extensible Progress Meter" optional = false python-versions = ">=3.7" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "tqdm-4.67.2-py3-none-any.whl", hash = "sha256:9a12abcbbff58b6036b2167d9d3853042b9d436fe7330f06ae047867f2f8e0a7"}, {file = "tqdm-4.67.2.tar.gz", hash = "sha256:649aac53964b2cb8dec76a14b405a4c0d13612cb8933aae547dd144eacc99653"}, @@ -7066,8 +6943,7 @@ version = "4.50.3" description = "State-of-the-art Machine Learning for JAX, PyTorch and TensorFlow" optional = false python-versions = ">=3.9.0" -groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" +groups = ["main"] files = [ {file = "transformers-4.50.3-py3-none-any.whl", hash = "sha256:6111610a43dec24ef32c3df0632c6b25b07d9711c01d9e1077bdd2ff6b14a38c"}, {file = "transformers-4.50.3.tar.gz", hash = "sha256:1d795d24925e615a8e63687d077e4f7348c2702eb87032286eaa76d83cdc684f"}, @@ -7140,7 +7016,6 @@ description = "Typer, build great CLIs. Easy to code. Based on Python type hints optional = false python-versions = ">=3.9" groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "typer-0.21.1-py3-none-any.whl", hash = "sha256:7985e89081c636b88d172c2ee0cfe33c253160994d47bdfdc302defd7d1f1d01"}, {file = "typer-0.21.1.tar.gz", hash = "sha256:ea835607cd752343b6b2b7ce676893e5a0324082268b48f27aa058bdb7d2145d"}, @@ -7163,7 +7038,7 @@ files = [ {file = "typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548"}, {file = "typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466"}, ] -markers = {main = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"", dev = "(sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\") and python_version == \"3.10\"", metrics = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\""} +markers = {dev = "python_version == \"3.10\""} [[package]] name = "typing-inspect" @@ -7172,7 +7047,6 @@ description = "Runtime inspection utilities for typing module." optional = false python-versions = "*" groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "typing_inspect-0.9.0-py3-none-any.whl", hash = "sha256:9ee6fc59062311ef8547596ab6b955e1b8aa46242d854bfc78f4f6b0eff35f9f"}, {file = "typing_inspect-0.9.0.tar.gz", hash = "sha256:b23fc42ff6f6ef6954e4852c1fb512cdd18dbea03134f91f856a95ccc9461f78"}, @@ -7189,7 +7063,6 @@ description = "Runtime typing introspection tools" optional = false python-versions = ">=3.9" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7"}, {file = "typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464"}, @@ -7209,7 +7082,7 @@ files = [ {file = "tzdata-2025.3-py2.py3-none-any.whl", hash = "sha256:06a47e5700f3081aab02b2e513160914ff0694bce9947d6b76ebd6bf57cfc5d1"}, {file = "tzdata-2025.3.tar.gz", hash = "sha256:de39c2ca5dc7b0344f2eba86f49d614019d29f060fc4ebc8a417896a620b56a7"}, ] -markers = {main = "sys_platform == \"win32\"", metrics = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\" and python_version == \"3.10\""} +markers = {main = "sys_platform == \"win32\"", metrics = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or python_version == \"3.10\""} [[package]] name = "urllib3" @@ -7218,7 +7091,6 @@ description = "HTTP library with thread-safe connection pooling, file post, and optional = false python-versions = ">=3.9" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "urllib3-2.6.3-py3-none-any.whl", hash = "sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4"}, {file = "urllib3-2.6.3.tar.gz", hash = "sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed"}, @@ -7237,7 +7109,6 @@ description = "Fast, drop-in replacement for Python's uuid module, powered by Ru optional = false python-versions = ">=3.9" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "uuid_utils-0.14.0-cp39-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:f6695c0bed8b18a904321e115afe73b34444bc8451d0ce3244a1ec3b84deb0e5"}, {file = "uuid_utils-0.14.0-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:4f0a730bbf2d8bb2c11b93e1005e91769f2f533fa1125ed1f00fd15b6fcc732b"}, @@ -7270,7 +7141,6 @@ description = "The lightning-fast ASGI server." optional = false python-versions = ">=3.8" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "uvicorn-0.29.0-py3-none-any.whl", hash = "sha256:2c2aac7ff4f4365c206fd773a39bf4ebd1047c238f8b8268ad996829323473de"}, {file = "uvicorn-0.29.0.tar.gz", hash = "sha256:6a69214c0b6a087462412670b3ef21224fa48cae0e452b5883e8e8bdfdd11dd0"}, @@ -7298,7 +7168,7 @@ description = "Fast implementation of asyncio event loop on top of libuv" optional = false python-versions = ">=3.8.1" groups = ["main"] -markers = "platform_python_implementation != \"PyPy\" and sys_platform != \"win32\" and sys_platform != \"cygwin\"" +markers = "sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"PyPy\"" files = [ {file = "uvloop-0.22.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ef6f0d4cc8a9fa1f6a910230cd53545d9a14479311e87e3cb225495952eb672c"}, {file = "uvloop-0.22.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7cd375a12b71d33d46af85a3343b35d98e8116134ba404bd657b3b1d15988792"}, @@ -7363,7 +7233,6 @@ description = "Simple, modern and high performance file watching and code reload optional = false python-versions = ">=3.9" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "watchfiles-1.1.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:eef58232d32daf2ac67f42dea51a2c80f0d03379075d44a587051e63cc2e368c"}, {file = "watchfiles-1.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:03fa0f5237118a0c5e496185cafa92878568b652a2e9a9382a5151b1a0380a43"}, @@ -7486,7 +7355,6 @@ description = "Measures the displayed width of unicode strings in a terminal" optional = false python-versions = ">=3.8" groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "wcwidth-0.5.3-py3-none-any.whl", hash = "sha256:d584eff31cd4753e1e5ff6c12e1edfdb324c995713f75d26c29807bb84bf649e"}, {file = "wcwidth-0.5.3.tar.gz", hash = "sha256:53123b7af053c74e9fe2e92ac810301f6139e64379031f7124574212fb3b4091"}, @@ -7499,7 +7367,6 @@ description = "WebSocket client for Python with low level API options" optional = false python-versions = ">=3.9" groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "websocket_client-1.9.0-py3-none-any.whl", hash = "sha256:af248a825037ef591efbf6ed20cc5faa03d3b47b9e5a2230a529eeee1c1fc3ef"}, {file = "websocket_client-1.9.0.tar.gz", hash = "sha256:9e813624b6eb619999a97dc7958469217c3176312b3a16a4bd1bc7e08a46ec98"}, @@ -7517,7 +7384,6 @@ description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" optional = false python-versions = ">=3.10" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "websockets-16.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:04cdd5d2d1dacbad0a7bf36ccbcd3ccd5a30ee188f2560b7a62a30d14107b31a"}, {file = "websockets-16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8ff32bb86522a9e5e31439a58addbb0166f0204d64066fb955265c4e214160f0"}, @@ -7589,7 +7455,6 @@ description = "All stuff related to relationnal database from the WeLearn projec optional = false python-versions = ">=3.10" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "welearn_database-1.4.0-py3-none-any.whl", hash = "sha256:f07d2d4a150176d5e1e01d440943142e85b0a79174864da987ad4d07b0b59331"}, {file = "welearn_database-1.4.0.tar.gz", hash = "sha256:b7bb053fd364d9324fe3055f89ed3008e35aa82a4cb39fc1f9a208b33697de4d"}, @@ -7608,7 +7473,6 @@ description = "The comprehensive WSGI web application library." optional = false python-versions = ">=3.9" groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "werkzeug-3.1.5-py3-none-any.whl", hash = "sha256:5111e36e91086ece91f93268bb39b4a35c1e6f1feac762c9c822ded0a4e322dc"}, {file = "werkzeug-3.1.5.tar.gz", hash = "sha256:6a548b0e88955dd07ccb25539d7d0cc97417ee9e179677d22c7041c8f078ce67"}, @@ -7627,7 +7491,6 @@ description = "Module for decorators, wrappers and monkey patching." optional = false python-versions = ">=3.8" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "wrapt-1.17.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:88bbae4d40d5a46142e70d58bf664a89b6b4befaea7b2ecc14e03cedb8e06c04"}, {file = "wrapt-1.17.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e6b13af258d6a9ad602d57d889f83b9d5543acd471eee12eb51f5b01f8eb1bc2"}, @@ -7719,7 +7582,6 @@ description = "Pure-Python WebSocket protocol implementation" optional = false python-versions = ">=3.10" groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "wsproto-1.3.2-py3-none-any.whl", hash = "sha256:61eea322cdf56e8cc904bd3ad7573359a242ba65688716b0710a5eb12beab584"}, {file = "wsproto-1.3.2.tar.gz", hash = "sha256:b86885dcf294e15204919950f666e06ffc6c7c114ca900b060d6e16293528294"}, @@ -7735,7 +7597,6 @@ description = "Python binding for xxHash" optional = false python-versions = ">=3.7" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "xxhash-3.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:87ff03d7e35c61435976554477a7f4cd1704c3596a89a8300d5ce7fc83874a71"}, {file = "xxhash-3.6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f572dfd3d0e2eb1a57511831cf6341242f5a9f8298a45862d085f5b93394a27d"}, @@ -7886,7 +7747,6 @@ description = "Yet another URL library" optional = false python-versions = ">=3.9" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "yarl-1.22.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c7bd6683587567e5a49ee6e336e0612bec8329be1b7d4c8af5687dcdeb67ee1e"}, {file = "yarl-1.22.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5cdac20da754f3a723cceea5b3448e1a2074866406adeb4ef35b469d089adb8f"}, @@ -8032,7 +7892,6 @@ description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.9" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "zipp-3.23.0-py3-none-any.whl", hash = "sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e"}, {file = "zipp-3.23.0.tar.gz", hash = "sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166"}, @@ -8053,7 +7912,6 @@ description = "Very basic event publishing system" optional = false python-versions = ">=3.10" groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "zope_event-6.1-py3-none-any.whl", hash = "sha256:0ca78b6391b694272b23ec1335c0294cc471065ed10f7f606858fc54566c25a0"}, {file = "zope_event-6.1.tar.gz", hash = "sha256:6052a3e0cb8565d3d4ef1a3a7809336ac519bc4fe38398cb8d466db09adef4f0"}, @@ -8070,7 +7928,6 @@ description = "Interfaces for Python" optional = false python-versions = ">=3.10" groups = ["metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "zope_interface-8.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:788c293f3165964ec6527b2d861072c68eef53425213f36d3893ebee89a89623"}, {file = "zope_interface-8.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9a4e785097e741a1c953b3970ce28f2823bd63c00adc5d276f2981dd66c96c15"}, @@ -8117,7 +7974,6 @@ description = "Zstandard bindings for Python" optional = false python-versions = ">=3.9" groups = ["main", "metrics"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "zstandard-0.25.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e59fdc271772f6686e01e1b3b74537259800f57e24280be3f29c8a0deb1904dd"}, {file = "zstandard-0.25.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4d441506e9b372386a5271c64125f72d5df6d2a8e8a2a45a0ae09b03cb781ef7"}, @@ -8226,4 +8082,4 @@ cffi = ["cffi (>=1.17,<2.0) ; platform_python_implementation != \"PyPy\" and pyt [metadata] lock-version = "2.1" python-versions = ">=3.10,<3.13" -content-hash = "9dc235ee46a73295928c93bd9429eb30a9ca29e3d49c3f60688a025410f6a8b3" +content-hash = "8e36bcadefeefadc28fb3125dd22ccd6b1b0764a706ce111517fc4e0f52149c3" diff --git a/pyproject.toml b/pyproject.toml index 1010607..4ac1c53 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,7 +12,6 @@ azure-core = "^1.38.0" backoff = "^2.2.1" ecologits = "^0.5.2" fastapi = "^0.115.8" -huggingface-hub = "^0.29.1" langdetect = "^1.0.9" litellm = "^1.61.15" psycopg2-binary = "^2.9.10" @@ -35,8 +34,7 @@ autogen-agentchat = "^0.5.7" pypdf = "^6.6.0" numpy = "^1.26.4" python-docx = "^1.1.2" -langchain-core = "^0.3.81" -langgraph = "^0.6.7" +langchain-core = "^1.3.2" langgraph-checkpoint-postgres = "^2.0.23" azure-ai-inference = "^1.0.0b9" azure-identity = "^1.25.0" @@ -45,11 +43,13 @@ welearn-database = "1.4.0" bs4 = "^0.0.2" urllib3 = "^2.6.3" refinedoc = "^1.0.1" -langchain-azure-ai = "^0.1.8" aiohttp = "^3.13.3" httpx = "^0.28.1" beautifulsoup4 = "^4.14.3" json-repair = "^0.55.0" +langchain-mistralai = "^1.1.2" +langchain-azure-ai = "^1.2.3" +langgraph = "^1.1.10" [tool.poetry.group.dev.dependencies] pytest = "^7.4.0" @@ -64,7 +64,6 @@ locust = "^2.20.1" ragas = ">=0.2.15" langchain-community = ">=0.2.1" prettytable = "^3.10.0" -langchain-huggingface = "^0.1.2" From 4a37a1f31acd8da2caeefb7a32d9351c08c8caa9 Mon Sep 17 00:00:00 2001 From: Jean-Marc SEVIN Date: Tue, 28 Apr 2026 11:32:16 +0200 Subject: [PATCH 03/17] Get Mistral env vars --- src/app/core/config.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/app/core/config.py b/src/app/core/config.py index b454e7c..5a80b57 100644 --- a/src/app/core/config.py +++ b/src/app/core/config.py @@ -36,6 +36,10 @@ def get_api_version(self) -> dict: AZURE_APIM_API_KEY: str AZURE_APIM_API_BASE: str + # MISTRAL ENV VARS + MISTRAL_API_KEY: str + MISTRAL_LLM_MODEL_NAME: str + # OPENAI_API FOR RAG METRICS (To be challenged) AZURE_API_KEY: str AZURE_API_BASE: str From 9b6847c344616fb0e4cca67bce68fbb5c012b174 Mon Sep 17 00:00:00 2001 From: Jean-Marc SEVIN Date: Tue, 28 Apr 2026 11:33:11 +0200 Subject: [PATCH 04/17] Replace Azure AI by Mistral AI Co-authored-by: Copilot --- src/app/services/agent.py | 13 ------------- src/app/shared/infra/abst_chat.py | 23 +++++++++++------------ src/app/tutor/service/tutor.py | 11 ++++------- 3 files changed, 15 insertions(+), 32 deletions(-) diff --git a/src/app/services/agent.py b/src/app/services/agent.py index 6bc178c..b66f843 100644 --- a/src/app/services/agent.py +++ b/src/app/services/agent.py @@ -53,16 +53,3 @@ async def get_resources_about_sustainability( rag_query (str): The query string to search for relevant resources. """ return await _get_resources_about_sustainability(rag_query, config) - - -def trim_conversation_history(state): - trimmed_messages = trim_messages( - state["messages"], - strategy="last", - token_counter=len, - max_tokens=5, - start_on="human", - end_on=("human", "tool"), - include_system=True, - ) - return {"llm_input_messages": trimmed_messages} diff --git a/src/app/shared/infra/abst_chat.py b/src/app/shared/infra/abst_chat.py index 7314942..c4b4ea4 100644 --- a/src/app/shared/infra/abst_chat.py +++ b/src/app/shared/infra/abst_chat.py @@ -21,20 +21,18 @@ from typing import AsyncIterable, Dict, List, Optional from fastapi import BackgroundTasks, Depends, Request -from langchain_azure_ai.chat_models import AzureAIChatCompletionsModel # type: ignore +from langchain_mistralai import ChatMistralAI from langchain_core.runnables import RunnableConfig # type: ignore from langgraph.checkpoint.postgres.aio import AsyncPostgresSaver # type: ignore -from langgraph.prebuilt import create_react_agent # type: ignore - +from langchain.agents import create_agent # type: ignore +from langchain.agents.middleware import SummarizationMiddleware # type: ignore from src.app.models.chat import ReformulatedQueryResponse from src.app.models.documents import Document -# from src.app.shared.infra.llm_proxy import LLMProxy from src.app.search.services.search import SearchService from src.app.services import prompts from src.app.services.agent import ( get_resources_about_sustainability, - trim_conversation_history, ) from src.app.services.helpers import ( detect_language_from_entry, @@ -421,20 +419,21 @@ async def agent_message( str: The chat message content. """ settings = get_settings() - agent_model = AzureAIChatCompletionsModel( - endpoint=settings.AZURE_MISTRAL_API_BASE, - credential=settings.AZURE_MISTRAL_API_KEY, - model=settings.LLM_MODEL_NAME, + agent_model = ChatMistralAI( + model_name=settings.MISTRAL_LLM_MODEL_NAME, ) - agent_executor = create_react_agent( + agent_executor = create_agent( model=agent_model, tools=[ get_resources_about_sustainability, ], checkpointer=memory, - prompt=prompts.AGENT_SYSTEM_PROMPT, - pre_model_hook=trim_conversation_history, + system_prompt=prompts.AGENT_SYSTEM_PROMPT, + middleware=[SummarizationMiddleware( + model=agent_model, + trigger=("tokens", 32000), + )], ) config = RunnableConfig( diff --git a/src/app/tutor/service/tutor.py b/src/app/tutor/service/tutor.py index ba29ad8..9d264b4 100644 --- a/src/app/tutor/service/tutor.py +++ b/src/app/tutor/service/tutor.py @@ -1,4 +1,4 @@ -from langchain_azure_ai.chat_models import AzureAIChatCompletionsModel # type: ignore +from langchain_mistralai import ChatMistralAI # type: ignore from src.app.core.config import Settings from src.app.shared.utils.utils import extract_doc_info @@ -43,17 +43,14 @@ ) -chat_model: AzureAIChatCompletionsModel | None = None +chat_model: ChatMistralAI | None = None async def init_chat_model(settings) -> None: global chat_model if chat_model is None: - chat_model = AzureAIChatCompletionsModel( - endpoint=settings.AZURE_APIM_API_BASE, - credential=settings.AZURE_APIM_API_KEY, - model=settings.LLM_MODEL_NAME, - temperature=0.4, + chat_model = ChatMistralAI( + model_name=settings.MISTRAL_LLM_MODEL_NAME, ) From 0b79575889e9cc9770956c1a32a0c870fbc4b415 Mon Sep 17 00:00:00 2001 From: Jean-Marc SEVIN Date: Tue, 28 Apr 2026 11:40:53 +0200 Subject: [PATCH 05/17] Remove unused method --- src/app/services/agent.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/app/services/agent.py b/src/app/services/agent.py index b66f843..27e59f1 100644 --- a/src/app/services/agent.py +++ b/src/app/services/agent.py @@ -1,7 +1,6 @@ from typing import List, Tuple from fastapi import BackgroundTasks -from langchain_core.messages.utils import trim_messages from langchain_core.runnables import RunnableConfig from langchain_core.tools import tool From 3fd3738e12fb8a431c53b7e9d4d477e08a9619da Mon Sep 17 00:00:00 2001 From: Jean-Marc SEVIN Date: Wed, 29 Apr 2026 09:58:25 +0200 Subject: [PATCH 06/17] Format agent_message to Mistral schema Co-authored-by: Copilot --- src/app/shared/infra/abst_chat.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/app/shared/infra/abst_chat.py b/src/app/shared/infra/abst_chat.py index c4b4ea4..15fbac3 100644 --- a/src/app/shared/infra/abst_chat.py +++ b/src/app/shared/infra/abst_chat.py @@ -26,6 +26,7 @@ from langgraph.checkpoint.postgres.aio import AsyncPostgresSaver # type: ignore from langchain.agents import create_agent # type: ignore from langchain.agents.middleware import SummarizationMiddleware # type: ignore +from langchain.messages import HumanMessage # type: ignore from src.app.models.chat import ReformulatedQueryResponse from src.app.models.documents import Document @@ -446,15 +447,15 @@ async def agent_message( } ) - messages = [ - { - "role": "user", - "content": query, - }, - ] - + state = { + 'messages': + [ + HumanMessage(content=query) + ] + } + res = await agent_executor.ainvoke( - input={"messages": messages}, + input=state, config=config, background_tasks=background_tasks, ) From 11c6d5fea2666f3c800ee65176afddf54f09ee51 Mon Sep 17 00:00:00 2001 From: Jean-Marc SEVIN Date: Wed, 29 Apr 2026 16:18:32 +0200 Subject: [PATCH 07/17] Use Mistral as default completion client Co-authored-by: Copilot --- poetry.lock | 82 ++++++++++++++++++++++++++++++- pyproject.toml | 1 + src/app/core/lifespan.py | 8 ++- src/app/shared/infra/llm_proxy.py | 29 +++++++++++ 4 files changed, 113 insertions(+), 7 deletions(-) diff --git a/poetry.lock b/poetry.lock index 8d99fd6..63334e3 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1364,6 +1364,21 @@ litellm = ["litellm (>=1.41.23,<2.0.0)", "rapidfuzz (>=3.9.6,<4.0.0)"] mistralai = ["mistralai (>=0.4.3,<2.0.0)"] openai = ["openai (>=1.12.0,<2.0.0)"] +[[package]] +name = "eval-type-backport" +version = "0.3.1" +description = "Like `typing._eval_type`, but lets older Python versions use newer typing features." +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "eval_type_backport-0.3.1-py3-none-any.whl", hash = "sha256:279ab641905e9f11129f56a8a78f493518515b83402b860f6f06dd7c011fdfa8"}, + {file = "eval_type_backport-0.3.1.tar.gz", hash = "sha256:57e993f7b5b69d271e37482e62f74e76a0276c82490cf8e4f0dffeb6b332d5ed"}, +] + +[package.extras] +tests = ["pytest"] + [[package]] name = "exceptiongroup" version = "1.3.1" @@ -2618,6 +2633,21 @@ files = [ [package.dependencies] jsonpointer = ">=1.9" +[[package]] +name = "jsonpath-python" +version = "1.1.5" +description = "A lightweight and powerful JSONPath implementation for Python" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "jsonpath_python-1.1.5-py3-none-any.whl", hash = "sha256:a60315404d70a65e76c9a782c84e50600480221d94a58af47b7b4d437351cb4b"}, + {file = "jsonpath_python-1.1.5.tar.gz", hash = "sha256:ceea2efd9e56add09330a2c9631ea3d55297b9619348c1055e5bfb9cb0b8c538"}, +] + +[package.extras] +dev = ["poethepoet", "pytest (>=8.0)", "pytest-benchmark[histogram] (>=4.0)", "pytest-cov (>=5.0)", "ruff (>=0.3)"] + [[package]] name = "jsonpointer" version = "3.0.0" @@ -3523,6 +3553,38 @@ files = [ {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, ] +[[package]] +name = "mistralai" +version = "2.4.3" +description = "Python Client SDK for the Mistral AI API." +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "mistralai-2.4.3-py3-none-any.whl", hash = "sha256:06355f6473b1bffbf8cc60e352b873c53f72a4e9298366e5430db07f0ebb5310"}, + {file = "mistralai-2.4.3.tar.gz", hash = "sha256:82d671f29bfb161580ccd3f59eb0cf57c7bbc3c920d1ec436e55f82bf8d0034f"}, +] + +[package.dependencies] +eval-type-backport = ">=0.2.0" +httpx = ">=0.28.1" +jsonpath-python = ">=1.0.6" +opentelemetry-api = ">=1.33.1,<2.0.0" +opentelemetry-semantic-conventions = ">=0.60b1,<0.61" +pydantic = ">=2.11.2" +python-dateutil = ">=2.8.2" +typing-inspection = ">=0.4.0" + +[package.extras] +agents = ["authlib (>=1.5.2,<2.0)", "griffe (>=1.7.3,<2.0)", "mcp (>=1.0,<2.0)"] +gcp = ["google-auth (>=2.27.0)", "requests (>=2.32.3)"] +realtime = ["websockets (>=13.0)"] +workflow-payload-encryption = ["cryptography (>=41.0.0,<47.0.0)"] +workflow-payload-offloading = ["aioboto3 (>=12.4.0,<13.0.0)", "azure-storage-blob[aio] (>=12.28.0,<13.0.0)", "gcloud-aio-storage (>=9.3.0,<10.0.0)"] +workflow-payload-offloading-azure = ["azure-storage-blob[aio] (>=12.28.0,<13.0.0)"] +workflow-payload-offloading-gcs = ["gcloud-aio-storage (>=9.3.0,<10.0.0)"] +workflow-payload-offloading-s3 = ["aioboto3 (>=12.4.0,<13.0.0)"] + [[package]] name = "mpmath" version = "1.3.0" @@ -4001,6 +4063,22 @@ files = [ importlib-metadata = ">=6.0,<8.8.0" typing-extensions = ">=4.5.0" +[[package]] +name = "opentelemetry-semantic-conventions" +version = "0.60b1" +description = "OpenTelemetry Semantic Conventions" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "opentelemetry_semantic_conventions-0.60b1-py3-none-any.whl", hash = "sha256:9fa8c8b0c110da289809292b0591220d3a7b53c1526a23021e977d68597893fb"}, + {file = "opentelemetry_semantic_conventions-0.60b1.tar.gz", hash = "sha256:87c228b5a0669b748c76d76df6c364c369c28f1c465e50f661e39737e84bc953"}, +] + +[package.dependencies] +opentelemetry-api = "1.39.1" +typing-extensions = ">=4.5.0" + [[package]] name = "orjson" version = "3.11.6" @@ -5378,7 +5456,7 @@ version = "2.9.0.post0" description = "Extensions to the standard Python datetime module" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -groups = ["metrics"] +groups = ["main", "metrics"] files = [ {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, @@ -8082,4 +8160,4 @@ cffi = ["cffi (>=1.17,<2.0) ; platform_python_implementation != \"PyPy\" and pyt [metadata] lock-version = "2.1" python-versions = ">=3.10,<3.13" -content-hash = "8e36bcadefeefadc28fb3125dd22ccd6b1b0764a706ce111517fc4e0f52149c3" +content-hash = "06eab44cb188d2bd344673c5767a262ea7bca5a9c628037c708426cbc887aa01" diff --git a/pyproject.toml b/pyproject.toml index 4ac1c53..0abc20f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -50,6 +50,7 @@ json-repair = "^0.55.0" langchain-mistralai = "^1.1.2" langchain-azure-ai = "^1.2.3" langgraph = "^1.1.10" +mistralai = "^2.4.3" [tool.poetry.group.dev.dependencies] pytest = "^7.4.0" diff --git a/src/app/core/lifespan.py b/src/app/core/lifespan.py index ac82487..36c4576 100644 --- a/src/app/core/lifespan.py +++ b/src/app/core/lifespan.py @@ -20,11 +20,9 @@ async def lifespan(app: FastAPI): timeout=100, ) app.state.llm = LLMProxy( - model=settings.LLM_MODEL_NAME, - api_key=settings.AZURE_APIM_API_KEY, - api_base=settings.AZURE_APIM_API_BASE, - api_version="2024-05-01-preview", - is_azure_model=True, + model=settings.MISTRAL_LLM_MODEL_NAME, + api_key=settings.MISTRAL_API_KEY, + is_azure_model=False, ) yield diff --git a/src/app/shared/infra/llm_proxy.py b/src/app/shared/infra/llm_proxy.py index f0ca606..16042f5 100644 --- a/src/app/shared/infra/llm_proxy.py +++ b/src/app/shared/infra/llm_proxy.py @@ -5,6 +5,7 @@ import litellm from azure.ai.inference.aio import ChatCompletionsClient from azure.core.credentials import AzureKeyCredential +from mistralai.client import Mistral from litellm import acompletion from litellm.types.utils import ModelResponse from pydantic import BaseModel @@ -49,7 +50,18 @@ def __init__( credential=AzureKeyCredential(api_key), api_version=api_version, ) + else: + # We assume that if it's not an Azure model, it's a Mistral model for now. This can be extended in the future to support other types of models. + if api_key is None: + raise ValueError( + "For Mistral models, api_key must be provided." + ) + logger.debug("Initializing Mistral client") + self.client = Mistral( + api_key=api_key, + ) + @log_time_and_error async def close_client(self): if self.client: @@ -66,6 +78,9 @@ async def completion( if self.is_azure_model: return await self.az_completion(messages) + + else: + return await self.mistral_completion(messages) response = await acompletion( model=self.model, @@ -130,3 +145,17 @@ async def az_completion_stream(self, messages: list): ) return response + + async def mistral_completion(self, messages: list): + if self.client is None: + raise ValueError("Mistral client is not initialized.") + + response = await self.client.chat.complete_async( + messages=messages, + max_tokens=2048, + temperature=0.8, + top_p=0.1, + model=self.model, + ) + + return response.choices[0].message.content From 8e76b6a28fc81c8af0c0fe15cc82c317acf0d985 Mon Sep 17 00:00:00 2001 From: Jean-Marc SEVIN Date: Wed, 29 Apr 2026 17:29:12 +0200 Subject: [PATCH 08/17] Tests, format and lint --- src/app/core/lifespan.py | 3 +- src/app/shared/infra/abst_chat.py | 31 +++++------ src/app/shared/infra/llm_proxy.py | 54 ++----------------- src/app/tests/services/test_agent.py | 11 +--- src/app/tests/services/test_llm_proxy.py | 67 ++++++++---------------- 5 files changed, 43 insertions(+), 123 deletions(-) diff --git a/src/app/core/lifespan.py b/src/app/core/lifespan.py index 36c4576..2354a78 100644 --- a/src/app/core/lifespan.py +++ b/src/app/core/lifespan.py @@ -7,7 +7,7 @@ from src.app.shared.infra.llm_proxy import LLMProxy from src.app.shared.utils.dependencies import get_settings -from src.app.tutor.service.tutor import close_chat_model, init_chat_model +from src.app.tutor.service.tutor import init_chat_model @asynccontextmanager @@ -28,4 +28,3 @@ async def lifespan(app: FastAPI): yield await app.state.qdrant.close() await app.state.llm.close_client() - await close_chat_model() diff --git a/src/app/shared/infra/abst_chat.py b/src/app/shared/infra/abst_chat.py index 15fbac3..7e6c50a 100644 --- a/src/app/shared/infra/abst_chat.py +++ b/src/app/shared/infra/abst_chat.py @@ -21,20 +21,18 @@ from typing import AsyncIterable, Dict, List, Optional from fastapi import BackgroundTasks, Depends, Request -from langchain_mistralai import ChatMistralAI -from langchain_core.runnables import RunnableConfig # type: ignore -from langgraph.checkpoint.postgres.aio import AsyncPostgresSaver # type: ignore from langchain.agents import create_agent # type: ignore from langchain.agents.middleware import SummarizationMiddleware # type: ignore from langchain.messages import HumanMessage # type: ignore +from langchain_core.runnables import RunnableConfig # type: ignore +from langchain_mistralai import ChatMistralAI +from langgraph.checkpoint.postgres.aio import AsyncPostgresSaver # type: ignore + from src.app.models.chat import ReformulatedQueryResponse from src.app.models.documents import Document - from src.app.search.services.search import SearchService from src.app.services import prompts -from src.app.services.agent import ( - get_resources_about_sustainability, -) +from src.app.services.agent import get_resources_about_sustainability from src.app.services.helpers import ( detect_language_from_entry, extract_json_from_response, @@ -431,10 +429,12 @@ async def agent_message( ], checkpointer=memory, system_prompt=prompts.AGENT_SYSTEM_PROMPT, - middleware=[SummarizationMiddleware( - model=agent_model, - trigger=("tokens", 32000), - )], + middleware=[ + SummarizationMiddleware( + model=agent_model, + trigger=("tokens", 32000), + ) + ], ) config = RunnableConfig( @@ -447,13 +447,8 @@ async def agent_message( } ) - state = { - 'messages': - [ - HumanMessage(content=query) - ] - } - + state = {"messages": [HumanMessage(content=query)]} + res = await agent_executor.ainvoke( input=state, config=config, diff --git a/src/app/shared/infra/llm_proxy.py b/src/app/shared/infra/llm_proxy.py index 16042f5..3a4be88 100644 --- a/src/app/shared/infra/llm_proxy.py +++ b/src/app/shared/infra/llm_proxy.py @@ -1,4 +1,3 @@ -import json from abc import ABC from typing import Optional, Type, Union @@ -6,8 +5,6 @@ from azure.ai.inference.aio import ChatCompletionsClient from azure.core.credentials import AzureKeyCredential from mistralai.client import Mistral -from litellm import acompletion -from litellm.types.utils import ModelResponse from pydantic import BaseModel from src.app.utils.decorators import log_time_and_error @@ -53,18 +50,16 @@ def __init__( else: # We assume that if it's not an Azure model, it's a Mistral model for now. This can be extended in the future to support other types of models. if api_key is None: - raise ValueError( - "For Mistral models, api_key must be provided." - ) + raise ValueError("For Mistral models, api_key must be provided.") logger.debug("Initializing Mistral client") self.client = Mistral( api_key=api_key, ) - + @log_time_and_error async def close_client(self): - if self.client: + if self.client and self.is_azure_model: await self.client.close() @log_time_and_error @@ -78,50 +73,11 @@ async def completion( if self.is_azure_model: return await self.az_completion(messages) - + else: + # We assume that if it's not an Azure model, it's a Mistral model for now. This can be extended in the future to support other types of models. return await self.mistral_completion(messages) - response = await acompletion( - model=self.model, - api_key=self.api_key, - api_base=self.api_base, - api_version=None, - messages=messages, - response_format=response_format, - ) - - assert isinstance(response, ModelResponse) - - response = response["choices"][0]["message"]["content"].strip() - - try: - return json.loads(response) - except json.JSONDecodeError: - logger.warning( - "Response content is not valid JSON. Returning raw content instead." - ) - return response - - async def completion_stream( - self, - messages: list, - ): - - if self.is_azure_model: - return await self.az_completion_stream(messages) - - response = await acompletion( - model=self.model, - api_key=self.api_key, - api_base=self.api_base, - api_version=self.api_version, - messages=messages, - stream=True, - ) - - return response - async def az_completion(self, messages: list): if self.client is None: raise ValueError("Azure client is not initialized.") diff --git a/src/app/tests/services/test_agent.py b/src/app/tests/services/test_agent.py index 78ce29d..f61f0ae 100644 --- a/src/app/tests/services/test_agent.py +++ b/src/app/tests/services/test_agent.py @@ -3,10 +3,7 @@ from fastapi import BackgroundTasks -from src.app.services.agent import ( - _get_resources_about_sustainability, - trim_conversation_history, -) +from src.app.services.agent import _get_resources_about_sustainability class TestAgent(IsolatedAsyncioTestCase): @@ -48,12 +45,6 @@ async def test_get_resources_about_sustainability_not_found(self): self.assertEqual(content, "No relevant documents found.") self.assertEqual(docs, []) - def test_trim_conversation_history(self): - state = {"messages": ["msg1", "msg2", "msg3", "msg4", "msg5", "msg6"]} - result = trim_conversation_history(state) - self.assertIn("llm_input_messages", result) - self.assertIsInstance(result["llm_input_messages"], list) - async def test_get_resources_about_sustainability_no_search_service(self): # config without 'sp' (SearchService) config = { diff --git a/src/app/tests/services/test_llm_proxy.py b/src/app/tests/services/test_llm_proxy.py index d55bc75..d849275 100644 --- a/src/app/tests/services/test_llm_proxy.py +++ b/src/app/tests/services/test_llm_proxy.py @@ -1,54 +1,33 @@ import unittest from unittest import mock - -from litellm.types.utils import Choices, Message, ModelResponse +from unittest.mock import AsyncMock from src.app.shared.infra.llm_proxy import LLMProxy -def create_chat_responses_mocks(response: str): - return ModelResponse( - choices=[ - Choices( - message=Message(content=response, role="assistant"), - ) - ], - ) - - -@mock.patch("src.app.shared.infra.llm_proxy.acompletion", new_callable=mock.AsyncMock) class TestLLMProxy(unittest.IsolatedAsyncioTestCase): def setUp(self): - self.proxy = LLMProxy(model="fake_model") - - async def test_response_as_text(self, mocked_acompletion): - mocked_acompletion.return_value = create_chat_responses_mocks(response="text") - response = await self.proxy.completion( - messages=[{"role": "user", "content": "Hello"}], - ) - - self.assertIs(response, "text") + with mock.patch("src.app.shared.infra.llm_proxy.Mistral"): + self.proxy = LLMProxy(model="fake_model", api_key="fake_key") + + async def test_response_as_text(self): + with mock.patch.object( + self.proxy, "mistral_completion", new=AsyncMock(return_value="text") + ): + response = await self.proxy.completion( + messages=[{"role": "user", "content": "Hello"}], + ) + self.assertEqual(response, "text") self.assertIsInstance(response, str) - async def test_response_as_dict(self, mocked_acompletion): - mocked_acompletion.return_value = create_chat_responses_mocks( - response='{"key": "value"}' - ) - response = await self.proxy.completion( - messages=[{"role": "user", "content": "Hello"}], - ) - - self.assertIsInstance(response, dict) - - async def test_stream(self, mocked_acompletion): - await self.proxy.completion_stream( - messages=[{"role": "user", "content": "Hello"}], - ) - mocked_acompletion.assert_called_with( - model="fake_model", - api_key=None, - api_base=None, - api_version=None, - messages=[{"role": "user", "content": "Hello"}], - stream=True, - ) + async def test_response_as_json_string(self): + with mock.patch.object( + self.proxy, + "mistral_completion", + new=AsyncMock(return_value='{"key": "value"}'), + ): + response = await self.proxy.completion( + messages=[{"role": "user", "content": "Hello"}], + ) + self.assertIsInstance(response, str) + self.assertEqual(response, '{"key": "value"}') From 3f6469738d7748d75ed0a044363a9dd3b7e0601c Mon Sep 17 00:00:00 2001 From: Jean-Marc SEVIN Date: Thu, 30 Apr 2026 11:32:54 +0200 Subject: [PATCH 09/17] Manually add dependency --- poetry.lock | 2 +- pyproject.toml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/poetry.lock b/poetry.lock index 63334e3..f50b15f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -8160,4 +8160,4 @@ cffi = ["cffi (>=1.17,<2.0) ; platform_python_implementation != \"PyPy\" and pyt [metadata] lock-version = "2.1" python-versions = ">=3.10,<3.13" -content-hash = "06eab44cb188d2bd344673c5767a262ea7bca5a9c628037c708426cbc887aa01" +content-hash = "0ec00c3c900a10c113fb09b5810485b54060a78f6eae85cf83fe25f60c98a6ff" diff --git a/pyproject.toml b/pyproject.toml index 0abc20f..703eefa 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -48,6 +48,7 @@ httpx = "^0.28.1" beautifulsoup4 = "^4.14.3" json-repair = "^0.55.0" langchain-mistralai = "^1.1.2" +azure-ai-contentunderstanding = "^1.1.0" langchain-azure-ai = "^1.2.3" langgraph = "^1.1.10" mistralai = "^2.4.3" From 8308fe9a58020b4bf28d5199fc2266c703a30918 Mon Sep 17 00:00:00 2001 From: Jean-Marc SEVIN Date: Thu, 30 Apr 2026 11:52:07 +0200 Subject: [PATCH 10/17] Change syntax in pyproject.toml --- poetry.lock | 2 +- pyproject.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/poetry.lock b/poetry.lock index f50b15f..4527799 100644 --- a/poetry.lock +++ b/poetry.lock @@ -8160,4 +8160,4 @@ cffi = ["cffi (>=1.17,<2.0) ; platform_python_implementation != \"PyPy\" and pyt [metadata] lock-version = "2.1" python-versions = ">=3.10,<3.13" -content-hash = "0ec00c3c900a10c113fb09b5810485b54060a78f6eae85cf83fe25f60c98a6ff" +content-hash = "1d65964444467bd44ac4ddc729a6924824ec25609a3776cf3128f0269305af80" diff --git a/pyproject.toml b/pyproject.toml index 703eefa..c7ee268 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -48,7 +48,7 @@ httpx = "^0.28.1" beautifulsoup4 = "^4.14.3" json-repair = "^0.55.0" langchain-mistralai = "^1.1.2" -azure-ai-contentunderstanding = "^1.1.0" +azure-ai-contentunderstanding = ">=1.1.0,<2.0.0" langchain-azure-ai = "^1.2.3" langgraph = "^1.1.10" mistralai = "^2.4.3" From 89d2ea6787420b9238f243c742bc377b539a021c Mon Sep 17 00:00:00 2001 From: Jean-Marc SEVIN Date: Thu, 30 Apr 2026 14:41:48 +0200 Subject: [PATCH 11/17] Fix CI/CD issue with pip version Co-authored-by: Copilot --- Dockerfile | 1 + poetry.lock | 2 +- pyproject.toml | 1 - 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index c90eb7b..f8b9361 100644 --- a/Dockerfile +++ b/Dockerfile @@ -18,6 +18,7 @@ RUN apt update && apt install -y --no-install-recommends make COPY --from=requirements-stage ./tmp/requirements.txt ./requirements.txt +RUN pip install --upgrade pip RUN pip install --no-cache-dir --upgrade -r requirements.txt COPY . . diff --git a/poetry.lock b/poetry.lock index 4527799..63334e3 100644 --- a/poetry.lock +++ b/poetry.lock @@ -8160,4 +8160,4 @@ cffi = ["cffi (>=1.17,<2.0) ; platform_python_implementation != \"PyPy\" and pyt [metadata] lock-version = "2.1" python-versions = ">=3.10,<3.13" -content-hash = "1d65964444467bd44ac4ddc729a6924824ec25609a3776cf3128f0269305af80" +content-hash = "06eab44cb188d2bd344673c5767a262ea7bca5a9c628037c708426cbc887aa01" diff --git a/pyproject.toml b/pyproject.toml index c7ee268..0abc20f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -48,7 +48,6 @@ httpx = "^0.28.1" beautifulsoup4 = "^4.14.3" json-repair = "^0.55.0" langchain-mistralai = "^1.1.2" -azure-ai-contentunderstanding = ">=1.1.0,<2.0.0" langchain-azure-ai = "^1.2.3" langgraph = "^1.1.10" mistralai = "^2.4.3" From 7b51d53ba927af25b8fdddf0588b7157fa4ac938 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o?= Date: Thu, 30 Apr 2026 15:06:21 +0200 Subject: [PATCH 12/17] chore: update MISTRAL_API_KEY and modify lastmodified date in secrets.dev.yaml --- k8s/welearn-api/secrets.dev.yaml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/k8s/welearn-api/secrets.dev.yaml b/k8s/welearn-api/secrets.dev.yaml index dbfefd6..ade07ca 100644 --- a/k8s/welearn-api/secrets.dev.yaml +++ b/k8s/welearn-api/secrets.dev.yaml @@ -4,6 +4,7 @@ config: AZURE_MISTRAL_API_KEY: ENC[AES256_GCM,data:FjMSqC6wQM4/1cg5hwM3qAZiKmDEEU0rz6l44XDr0HQ0WLXRYKxDcm/0Ii1khG693fyQJalH7lvf8CRVdD4mnIm3KOaw5Q5MCkqrqoQo2GGm+7ZF,iv:h157m7hUESIOMC81yrnxzG//fInFLfsR8o2zYTsGcUs=,tag:pMOQn7+ijCbvYh1AksjYbQ==,type:str] AZURE_APIM_API_KEY: ENC[AES256_GCM,data:GKEHlKS5GgzSO+rHYYvrdL0e7WDZDyByD6mYbDmSNZQ=,iv:k/SHzVKSvMr0ibz3O19yQc3Hz4rzFRALxINlNJRLAwk=,tag:9sgSAnfTKEL5SDPyyw2uhA==,type:str] PG_PASSWORD: ENC[AES256_GCM,data:8GsISVAuJyIh0WUFwb9mpqyWcNT04fnmpH4ru5CA+aw=,iv:oGKLDiadbhRQWVSE5J/4QJbppiTIcHhNr9fFY7XI0jY=,tag:Ksk0uMrB9fmVT8thQODFJA==,type:str] + MISTRAL_API_KEY: ENC[AES256_GCM,data:2om3jEYb/E8bexmXO1LVWMp5fV4WOm51WCiJLiDEF3g=,iv:aYnBjQt3ZmK0DC4VGcqTGFUYRIOKrewkvoZC2Iz1ArY=,tag:eHpoeTdk5QVaKrqUJYueVw==,type:str] azureSecrets: azurestorageaccountname: ENC[AES256_GCM,data:vhsGuyM8IYCRua2BQtuYpLI/Dzdx,iv:kPcuAWarV4RXujfwe+9rKe/YWARoeOcFp789WwrI+z8=,tag:Hg8JJmYW0Zuz/2brM/z8yQ==,type:str] azurestorageaccountkey: ENC[AES256_GCM,data:xssnW7Kk3LGmF9dpeCiiV2Z7vyNo4n0aSMcA3aXJYd7uvx7B1HmmSRnc47y3pBS8Hg0dc+6Lf0AIod/Yr2mMC+Dfoosfj2oiY4P/7FQZNMD2xVuZCebTYA==,iv:wlEwj0M1U/EIgVbqxiT0aLgtcwmVGfuRgTaOdQYs6IU=,tag:pLiJujwzEMZOg1xEM22Ojg==,type:str] @@ -63,7 +64,7 @@ sops: Q1lsakJjbW5rTGRIYUt0M3ArN2xjMW8KyUV4W7zltLlQ3Bdp4U1OgU5hRlWLa5RU hxOYlyFSCKkn/hXTx2AAwyTVcwVGt/OoUujuRN1A1/pGrO1sDY0uFg== -----END AGE ENCRYPTED FILE----- - lastmodified: "2025-12-05T11:12:47Z" - mac: ENC[AES256_GCM,data:FL4ZyGT2BoO/xUYY4ZEvQqf1nTuLMbX8wE0tvghsFlnOp7bhINuZBA9Mc5xK5dsy5LkVesVV60CtMXu6yhNJUxGRcyrZHkrQnvUX+0qVh4GqRPxhFRP++e8oOFbsVs+XTwZSpJNN740VV27B5NbsM6lXbWi4DGH1q+aL2qE2EuY=,iv:lVWWYPAwkfNg9dJJtTRvD3mYmLcOnvId6fDsndNE6qc=,tag:T4sAj8BPtVzjABw++ejy7Q==,type:str] + lastmodified: "2026-04-30T13:05:26Z" + mac: ENC[AES256_GCM,data:ZFiWNcr07s7GcnleGpFZWb+YIk1Hv5nut4GFn4o2p5YFd0IvycuFWybk3sw1e4GmPoIJwaXiuSIThUYaZSBbuAzy9u7QZj0tkiVti7otbccsTj+mFOQ4p4iJty1Ms6+S03O4Yd3jWOugJQMbzuMm4OHKkI2rorvaVOdyQjvPK6c=,iv:+WSNB3GrlxU7kOCnAeI1M1JkTQG/ssEXD+QYt2WcwjM=,tag:Gc19gH91iYb6tAj0PKI8Wg==,type:str] unencrypted_suffix: _unencrypted - version: 3.9.4 + version: 3.12.1 From ee6cf3ddc82d0b27eca04d2f72bc67b741041d1a Mon Sep 17 00:00:00 2001 From: Jean-Marc SEVIN Date: Thu, 30 Apr 2026 15:15:26 +0200 Subject: [PATCH 13/17] Add Mistral API model name --- k8s/welearn-api/values.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/k8s/welearn-api/values.yaml b/k8s/welearn-api/values.yaml index 7db3776..052096a 100644 --- a/k8s/welearn-api/values.yaml +++ b/k8s/welearn-api/values.yaml @@ -38,6 +38,7 @@ config: AZURE_API_BASE: "https://welearn-openai.openai.azure.com/openai/" AZURE_API_VERSION: "2024-08-01-preview" LLM_MODEL_NAME: gpt-oss-120b + MISTRAL_LLM_MODEL_NAME: mistral-small-latest QDRANT_HOST: "http://qdrant.qdrant" QDRANT_PORT: "6333" MODELS_FOLDER_ROOTS: "/models" From 621cc281fd1a13e18951a4a13a8badeba10bb50c Mon Sep 17 00:00:00 2001 From: Jean-Marc SEVIN Date: Thu, 30 Apr 2026 15:58:09 +0200 Subject: [PATCH 14/17] Add test values for new env vars --- pytest.ini | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pytest.ini b/pytest.ini index e8bd55e..4104147 100644 --- a/pytest.ini +++ b/pytest.ini @@ -9,6 +9,8 @@ env = AZURE_MISTRAL_API_KEY=your_mistral_api_key CLIENT_ORIGINS=https://client.example.com LLM_MODEL_NAME=mistral-large-2402 + MISTRAL_LLM_MODEL_NAME=mistral-small-latest + MISTRAL_API_KEY=your_mistral_api_key PG_DATABASE=welearn PG_DRIVER=postgresql PG_HOST=localhost From d0175f7d8d50ae49159864be05476fcbea6cda63 Mon Sep 17 00:00:00 2001 From: Jean-Marc SEVIN Date: Thu, 30 Apr 2026 17:30:49 +0200 Subject: [PATCH 15/17] Fix errors in unit tests --- src/app/tests/services/tutor/test_utils.py | 23 +++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/app/tests/services/tutor/test_utils.py b/src/app/tests/services/tutor/test_utils.py index 3ca8885..093c7c4 100644 --- a/src/app/tests/services/tutor/test_utils.py +++ b/src/app/tests/services/tutor/test_utils.py @@ -1,9 +1,10 @@ from io import BytesIO -from unittest import TestCase +from unittest import IsolatedAsyncioTestCase from unittest.mock import Mock, patch from fastapi import HTTPException, UploadFile from qdrant_client.models import ScoredPoint +from starlette.datastructures import Headers from src.app.shared.utils.utils import ( build_system_message, @@ -12,7 +13,7 @@ ) -class TestTutorUtils(TestCase): +class TestTutorUtils(IsolatedAsyncioTestCase): def test_build_system_message_with_all_params(self): message = build_system_message( role="tutor", @@ -68,37 +69,37 @@ def test_extract_doc_info(self): self.assertEqual(result, expected) - @patch("src.app.services.tutor.utils._extract_docx_content") + @patch("src.app.shared.utils.utils._extract_docx_content") async def test_get_file_content_docx(self, mock_extract_docx): mock_extract_docx.return_value = "Hello, world!" file = UploadFile( file=BytesIO(b"test content"), filename="test.docx", - content_type="application/vnd.openxmlformats-officedocument.wordprocessingml.document", + headers=Headers({"content-type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document"}), ) content = await get_file_content(file) self.assertEqual(content, "Hello, world!") mock_extract_docx.assert_called_once() - @patch("src.app.services.tutor.utils._extract_pdf_content") + @patch("src.app.shared.utils.utils._extract_pdf_content") async def test_get_file_content_pdf(self, mock_extract_pdf): mock_extract_pdf.return_value = "Hello, world!" file = UploadFile( file=BytesIO(b"test content"), filename="test.pdf", - content_type="application/pdf", + headers=Headers({"content-type": "application/pdf"}), ) content = await get_file_content(file) self.assertEqual(content, "Hello, world!") mock_extract_pdf.assert_called_once() - @patch("src.app.services.tutor.utils._extract_text_content") + @patch("src.app.shared.utils.utils._extract_text_content") async def test_get_file_content_txt(self, mock_extract_text): mock_extract_text.return_value = "Hello, world!" file = UploadFile( file=BytesIO(b"test content"), filename="test.txt", - content_type="text/plain", + headers=Headers({"content-type": "text/plain"}), ) content = await get_file_content(file) self.assertEqual(content, "Hello, world!") @@ -108,16 +109,16 @@ async def test_get_file_content_unsupported(self): file = UploadFile( file=BytesIO(b"test content"), filename="test.unsupported", - content_type="application/unsupported", + headers=Headers({"content-type": "application/unsupported"}), ) with self.assertRaises(HTTPException): await get_file_content(file) async def test_get_file_content_empty(self): file = UploadFile( - file=open("test.empty.txt", "rb"), + file=BytesIO(b""), filename="test.empty.txt", - content_type="text/plain", + headers=Headers({"content-type": "text/plain"}), ) with self.assertRaises(HTTPException): await get_file_content(file) From dca56128201831260e4a76ef28402edfedeee31e Mon Sep 17 00:00:00 2001 From: Sandra Guerreiro Date: Tue, 5 May 2026 15:58:49 +0200 Subject: [PATCH 16/17] adds history and thread id --- src/app/api/api_v1/endpoints/chat.py | 47 +++++++++++++++++---- src/app/models/chat.py | 1 + src/app/shared/infra/abst_chat.py | 62 ++++++++++++++++++++++------ 3 files changed, 90 insertions(+), 20 deletions(-) diff --git a/src/app/api/api_v1/endpoints/chat.py b/src/app/api/api_v1/endpoints/chat.py index fafe8e7..6f80abb 100644 --- a/src/app/api/api_v1/endpoints/chat.py +++ b/src/app/api/api_v1/endpoints/chat.py @@ -1,5 +1,6 @@ from typing import Dict, Optional, cast from uuid import UUID +import uuid import backoff import psycopg @@ -23,7 +24,11 @@ ) from src.app.shared.infra.abst_chat import get_chat_service from src.app.shared.utils.dependencies import get_settings -from src.app.shared.utils.requests import extract_session_cookie +from src.app.shared.utils.requests import ( + extract_origin_from_request, + extract_session_cookie, +) +from src.app.user.utils.utils import resolve_user_and_session from src.app.utils.logger import logger as utils_logger logger = utils_logger(__name__) @@ -331,6 +336,25 @@ async def q_and_a_stream( ) +@router.get("/chat/history") +async def get_chat_history( + thread_id: UUID, + chatfactory=Depends(get_chat_service), +) -> list[Dict[str, str | list[Dict[str, str]] | None]]: + if thread_id: + async with await psycopg.AsyncConnection.connect( + DB_URI, autocommit=True, prepare_threshold=0, row_factory=dict_row + ) as conn: + await conn.execute("SET SEARCH_PATH to agent_related") + await conn.commit() + + memory = AsyncPostgresSaver(conn) + res = await chatfactory.agent_get_history( + thread_id=thread_id, memory=memory + ) + return res + + @router.post( "/chat/agent", summary="Agent Response", @@ -353,15 +377,21 @@ async def agent_response( chatfactory=Depends(get_chat_service), sp: SearchService = Depends(get_search_service), data_collection=Depends(get_data_collection_service), -) -> Optional[Dict]: +): try: session_id = extract_session_cookie(request) docs = [] + thread_id = body.thread_id if body.thread_id else None + + if not thread_id: + logger.info("No thread_id provided. Generating new thread_id.") + thread_id = uuid.uuid4() + if body.query is None: raise EmptyQueryError() - if body.thread_id: + if thread_id: async with await psycopg.AsyncConnection.connect( DB_URI, autocommit=True, prepare_threshold=0, row_factory=dict_row ) as conn: @@ -373,7 +403,7 @@ async def agent_response( res = await chatfactory.agent_message( query=body.query, memory=memory, - thread_id=body.thread_id, + thread_id=thread_id, corpora=body.corpora, sdg_filter=body.sdg_filter, sp=sp, @@ -395,22 +425,25 @@ async def agent_response( agent_ans = { "content": cast(str, res["messages"][-1].content), "docs": docs, + "thread_id": thread_id, } try: conversation_id, message_id = await data_collection.register_chat_data( session_id=session_id, user_query=body.query, - conversation_id=body.thread_id, + conversation_id=thread_id, answer_content=res["messages"][-1].content, sources=docs, ) - return { + agent_ans = { **agent_ans, "message_id": message_id, - "conversation_id": conversation_id, + "thread_id": thread_id, } + + return agent_ans except Exception as e: logger.error("Error while registering chat data: %s", e) diff --git a/src/app/models/chat.py b/src/app/models/chat.py index 42359c5..fe1bfe3 100644 --- a/src/app/models/chat.py +++ b/src/app/models/chat.py @@ -70,6 +70,7 @@ class AgentContext(SDGFilter): class AgentResponse(BaseModel): content: str | None = None docs: list[ScoredPoint] | None = None + thread_id: uuid.UUID | None = None class UserQueryMetadata(BaseModel): diff --git a/src/app/shared/infra/abst_chat.py b/src/app/shared/infra/abst_chat.py index 7e6c50a..48245ad 100644 --- a/src/app/shared/infra/abst_chat.py +++ b/src/app/shared/infra/abst_chat.py @@ -67,6 +67,7 @@ def __init__( self, client, ): + self.agent_executor = None self.chat_client = client self.system_prompts = { @@ -394,6 +395,34 @@ async def chat_message( ) return res + async def _create_agent( + self, + memory: AsyncPostgresSaver | None = None, + ): + if self.agent_executor: + return self.agent_executor + + settings = get_settings() + agent_model = ChatMistralAI( + model_name=settings.MISTRAL_LLM_MODEL_NAME, + ) + + self.agent_executor = create_agent( + model=agent_model, + tools=[ + get_resources_about_sustainability, + ], + checkpointer=memory, + system_prompt=prompts.AGENT_SYSTEM_PROMPT, + middleware=[ + SummarizationMiddleware( + model=agent_model, + trigger=("tokens", 32000), + ) + ], + ) + return self.agent_executor + async def agent_message( self, query: str, @@ -422,19 +451,8 @@ async def agent_message( model_name=settings.MISTRAL_LLM_MODEL_NAME, ) - agent_executor = create_agent( - model=agent_model, - tools=[ - get_resources_about_sustainability, - ], - checkpointer=memory, - system_prompt=prompts.AGENT_SYSTEM_PROMPT, - middleware=[ - SummarizationMiddleware( - model=agent_model, - trigger=("tokens", 32000), - ) - ], + agent_executor = await self._create_agent( + memory=memory, ) config = RunnableConfig( @@ -457,6 +475,24 @@ async def agent_message( return res + async def agent_get_history( + self, + thread_id: uuid.UUID, + memory: AsyncPostgresSaver, + ) -> list[dict[str, str]]: + + agent = await self._create_agent(memory=memory) + config = RunnableConfig(configurable={"thread_id": thread_id}) + + state = await agent.aget_state(config) + messages = state.values.get("messages", []) + + return [ + {"role": "user" if m.type == "human" else "assistant", "content": m.content} + for m in messages + if m.type in ("human", "ai") + ] + async def run_llm_with_json_parsing( self, messages: list[dict], From 385a8a5337057bda8842e5c9e3c548c5d6bb91c7 Mon Sep 17 00:00:00 2001 From: Sandra Guerreiro Date: Tue, 5 May 2026 16:14:08 +0200 Subject: [PATCH 17/17] adds sops to prod and staging --- k8s/welearn-api/secrets.prod.yaml | 10 ++++++++-- k8s/welearn-api/secrets.staging.yaml | 10 ++++++++-- src/app/api/api_v1/endpoints/chat.py | 8 ++------ src/app/shared/infra/abst_chat.py | 4 ---- src/app/tests/services/tutor/test_utils.py | 6 +++++- 5 files changed, 23 insertions(+), 15 deletions(-) diff --git a/k8s/welearn-api/secrets.prod.yaml b/k8s/welearn-api/secrets.prod.yaml index c03d1f2..05e7739 100644 --- a/k8s/welearn-api/secrets.prod.yaml +++ b/k8s/welearn-api/secrets.prod.yaml @@ -4,10 +4,15 @@ config: AZURE_MISTRAL_API_KEY: ENC[AES256_GCM,data:gvtwPHReMmaaKcNWUcf63NO6GpAiiyLRimQkuJC1qKlSa/leVe5oLJzY9/3JkY4S9LJvs7JI2MT2AvUgMRd+qPfMHySgosOQPxx0PJAtp6ikfAKb,iv:t9Pb1+XKP5B2VwA9c9fguR/oULpIETFngt0cmqJPb7I=,tag:ABBYMiyjUW/dsUESQB1Uqg==,type:str] AZURE_APIM_API_KEY: ENC[AES256_GCM,data:ceGyPsjjZ09T3U+zAJdTaqYr3ly5/wW4GYtJxd0noTI=,iv:1chC8dCnBhtqCd8Ex34dlSAO3LT+9IlbI5SQXdXt79U=,tag:2qd1zxwpDnKwFcGVZE8siw==,type:str] PG_PASSWORD: ENC[AES256_GCM,data:T+LaC4wkSed2ZbuZZA9EnqsZ,iv:7JM9iNYjLQ63kqZ5AtDODkE0BELWRal3wTB4G8W8Kho=,tag:IRUsvN4EowdEhJsSx++7Mg==,type:str] + MISTRAL_API_KEY: ENC[AES256_GCM,data:onBQp43O+S55XnaNKX2wZ9SW65owQR2rNost6Mw8/R8=,iv:rL9K7AD/mpl8lgq7XOu0qtfC/zg2x8MrSIKJW1idkNw=,tag:QDqgOruwTtxZH4IVIGtOIg==,type:str] azureSecrets: azurestorageaccountname: ENC[AES256_GCM,data:b0QcVmOiCxTrMqxPi+jI/NFOB4Zo6QA=,iv:IO39BNbdBcsLMYX5BydeQWM5oSIGPz66ldYKkGPmy7Q=,tag:UmkHbz1x90RoZ7Nw2gi02A==,type:str] azurestorageaccountkey: ENC[AES256_GCM,data:TTK/V7kI3W7UC4P2OoIJiCW+eM78j7+nhPK007sYwlhLRv6Q6dXIYT3jjPyz2r8HJBBnLM5t4leWU+97jDtYYEwIrdGDmEAw8z98vLchU8d+O8Q5CfXlSg==,iv:eETF+0rF/X9GyIGKQujbRM+KeGZvzeCtqYrE7e4VaPQ=,tag:S99K8hY6JEEoPjWMYXINFw==,type:str] sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] age: - recipient: age13da407hamk8c3rdp3nu3q8hqgxsefn902vrxsuphw2ljfmd2k5qqy7mgzx enc: | @@ -63,7 +68,8 @@ sops: ZjYvVUx5Y2UvblUwemdsYVdDWEN6bXcKd7kv1FAE5d1ROzveRc+1LJHOox3Xy7Ve vrDdYftAyCYvY5PSC82+/JiV0lqKwEx5+xLradzLB1lOb8F45px4Dw== -----END AGE ENCRYPTED FILE----- - lastmodified: "2025-12-05T11:12:42Z" - mac: ENC[AES256_GCM,data:sOEfKW8r/ruDBv/6pTJHPyw99TGL+JmFTyV8PbB8ZaeOwoa3zWei+XCvdeS7f35p3neYy/u0qznxI1qhowSxSQt6LtPdwqGezxEb8wkLI1SXwUH5kp4TcU7mDusBduMY5zomH+THviqDo8NlWz86gpElleyYTnnnWntd8oICFFM=,iv:O9+oxLcTVopjq6S+zrNfHN1CrrQ4gUc2Zb9HLCqWAfA=,tag:w5PVJeqB6c7gBu8YgPm0ww==,type:str] + lastmodified: "2026-05-05T14:13:13Z" + mac: ENC[AES256_GCM,data:wi64FB7cDBlS4FWJNkxd+scqswRlBv8zavInSnREoaLRCJ0Mo69n/ge2uB6RNum3qP/VFDrZzLUQ5uFcC1uKlqXUGP78u2srqt3Gljd716xCGI4dPI1sV19CbyMBHEYnYPq1bn/z0J+l+0s4G1+M2Ym9m1m8R0/rlEfIfIbD05E=,iv:Zdjf2CXFo2alz70lnV5GCdM/Uh6SDAqWYh8K1Xu9K6A=,tag:SPWfFeywx7bTWy/FGNgaug==,type:str] + pgp: [] unencrypted_suffix: _unencrypted version: 3.9.4 diff --git a/k8s/welearn-api/secrets.staging.yaml b/k8s/welearn-api/secrets.staging.yaml index c4b42e0..c7babd5 100644 --- a/k8s/welearn-api/secrets.staging.yaml +++ b/k8s/welearn-api/secrets.staging.yaml @@ -4,10 +4,15 @@ config: AZURE_MISTRAL_API_KEY: ENC[AES256_GCM,data:f9Ig3O6AisJ/m5Vcot8egHASrHSq3d8vkxp+RGE7KwRqC0lK+KoAkuI90iz1RFc5J9nACGp+pV/8V3OFW3uUTmC8UNWZdrH+Zpk6v7coqsQjb0cy,iv:Qo9s3kLLx3FbWKvoQOX5+DNLT/z9FZrAcvp48x6GOzo=,tag:mQZgcbQEvUWXn2QlnnZoTA==,type:str] AZURE_APIM_API_KEY: ENC[AES256_GCM,data:0RPZHeVfTsVxcLewO+Ckd39phDJxKJAhbG5jv6Ze8+E=,iv:ca2E1a1kAmuRExX6xl3RYz0IWGGcEOKaa4SXZ7QSISQ=,tag:afdEmP/R4a9iGcJnNLCyCg==,type:str] PG_PASSWORD: ENC[AES256_GCM,data:2fOIMhUVmR9UzHwFcAb2OroedRFxq/4Gbm+aSiml/90=,iv:6PyPvbY7IYFANkfKKiK86m3xkrtzQspQlIo6+qgaZTc=,tag:hM8LpwMY64u361gnd//yFg==,type:str] + MISTRAL_API_KEY: ENC[AES256_GCM,data:04rlq1Gg1yVQGiJxamsUsbYO4BAvQmGzAk+7Pa5Rd0M=,iv:OxfEwzzBAnoIB/x6aeZWAm1iOHYToqScqVzs6AqhC1U=,tag:2238THbjn2oSk8hVtkVayA==,type:str] azureSecrets: azurestorageaccountname: ENC[AES256_GCM,data:cyznEYCgdmOLaK65CiL3iXiRgJW4,iv:Ivqi93DGvm2S9HVLOUCDEnC/qs2OQ4ejbH/yQDIU1dQ=,tag:CymYFXGA6MLvHWa94eIUJg==,type:str] azurestorageaccountkey: ENC[AES256_GCM,data:bU324wNm44RtxdMQQQ3gO7N0FsKR/S+gj2oL62TnCrRRdJWhl5OurgbBuXq3wtH5zfSJsdr94FRGgttjBePkTkJk9PMssGhCChnKRttxb9od+VuH/EJfYA==,iv:qyom9rLLOCagB+7d9YgzIgtMZfF/yEn5zTVGljfHNYA=,tag:WSd0l0nRx7MMWkqoMOuRtA==,type:str] sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] age: - recipient: age1dvu205sflecfu6uewgwmgs83nkm2c2fzfxs55zfkjs2gmqjya50qmm6lck enc: | @@ -63,7 +68,8 @@ sops: S2dEMnlFaVhWekxiL2pXd1B3aUxBOVkKQyMWNIM5IsQAB01bq66xCMU6Spgps9h9 nmnWY8LKRAHuw24H1rZLkFEHlUbdRuhqRfkCDWJuxwjKBEA6WsCmwg== -----END AGE ENCRYPTED FILE----- - lastmodified: "2026-04-16T08:13:53Z" - mac: ENC[AES256_GCM,data:mMaGEJ42OJbjaO1mtnGNTMeTULpNc/+ifHc6OIMdQoMpMKHDBBt5mUWRSSsoHoxFvBepfDOrQww0remh/l4P2nHi5c6ccuu2gJIb7DxMI8U7BT0cfYtqteLIBUecdhJZvDWplGj+udd67acEky8CVksmuDXiwtncqundTgBbgnQ=,iv:eRO3qnpj/I8VEJcWDecKcy4/FOTDSrtEBVDJ0dOpVVo=,tag:EGkypDU/+XSF7vNu3Ac/HA==,type:str] + lastmodified: "2026-05-05T14:13:23Z" + mac: ENC[AES256_GCM,data:qlEtzvYnyU/izsIwfhDliLLFHlNHiYUHqjKUz3BGGAapdhwGnEpIObf9wlyt9glaO2q7d3R1uYcXKZum0qm2QLYK3yU/PDrWl8W1b4aBdpwNMDWCvV6T96oPXepDGMSt85TnhQ6i3TWQ8dV3mVvF3YTLDAwKppUVAniQUVMCP/I=,iv:1pr45Bed7vIj5aZNZwLnt47w5mCuQ8rGmMHrECjDiPk=,tag:3GABUwf0OlBrkDHW9Ll5iA==,type:str] + pgp: [] unencrypted_suffix: _unencrypted version: 3.11.0 diff --git a/src/app/api/api_v1/endpoints/chat.py b/src/app/api/api_v1/endpoints/chat.py index 6f80abb..00a6dad 100644 --- a/src/app/api/api_v1/endpoints/chat.py +++ b/src/app/api/api_v1/endpoints/chat.py @@ -1,6 +1,6 @@ +import uuid from typing import Dict, Optional, cast from uuid import UUID -import uuid import backoff import psycopg @@ -24,11 +24,7 @@ ) from src.app.shared.infra.abst_chat import get_chat_service from src.app.shared.utils.dependencies import get_settings -from src.app.shared.utils.requests import ( - extract_origin_from_request, - extract_session_cookie, -) -from src.app.user.utils.utils import resolve_user_and_session +from src.app.shared.utils.requests import extract_session_cookie from src.app.utils.logger import logger as utils_logger logger = utils_logger(__name__) diff --git a/src/app/shared/infra/abst_chat.py b/src/app/shared/infra/abst_chat.py index 48245ad..f76409c 100644 --- a/src/app/shared/infra/abst_chat.py +++ b/src/app/shared/infra/abst_chat.py @@ -446,10 +446,6 @@ async def agent_message( Returns: str: The chat message content. """ - settings = get_settings() - agent_model = ChatMistralAI( - model_name=settings.MISTRAL_LLM_MODEL_NAME, - ) agent_executor = await self._create_agent( memory=memory, diff --git a/src/app/tests/services/tutor/test_utils.py b/src/app/tests/services/tutor/test_utils.py index 093c7c4..74925e7 100644 --- a/src/app/tests/services/tutor/test_utils.py +++ b/src/app/tests/services/tutor/test_utils.py @@ -75,7 +75,11 @@ async def test_get_file_content_docx(self, mock_extract_docx): file = UploadFile( file=BytesIO(b"test content"), filename="test.docx", - headers=Headers({"content-type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document"}), + headers=Headers( + { + "content-type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document" + } + ), ) content = await get_file_content(file) self.assertEqual(content, "Hello, world!")