diff --git a/packages/paper-qa-nemotron/pyproject.toml b/packages/paper-qa-nemotron/pyproject.toml index 2a26e2fa7..b24692bb4 100644 --- a/packages/paper-qa-nemotron/pyproject.toml +++ b/packages/paper-qa-nemotron/pyproject.toml @@ -50,7 +50,7 @@ dev = [ "pytest-recording", "pytest-rerunfailures", "pytest>=9", # Pin for pytest-subtests upstreaming - "vcrpy>=6", # Pin for https://github.com/kevin1024/vcrpy/issues/884 + "vcrpy>=8", # Pin for dropping unused requests support ] sagemaker = ["aiobotocore"] typing = [ diff --git a/packages/paper-qa-nemotron/tests/conftest.py b/packages/paper-qa-nemotron/tests/conftest.py index 5ade5d999..a5c127a07 100644 --- a/packages/paper-qa-nemotron/tests/conftest.py +++ b/packages/paper-qa-nemotron/tests/conftest.py @@ -5,7 +5,7 @@ import httpx_aiohttp import litellm.llms.custom_httpx.aiohttp_transport import pytest -import vcr.stubs.httpx_stubs +import vcr.stubs.httpcore_stubs from lmi.utils import ( ANTHROPIC_API_KEY_HEADER, CROSSREF_KEY_HEADER, @@ -29,6 +29,7 @@ def fixture_vcr_config() -> dict[str, Any]: ], "record_mode": "once", "cassette_library_dir": str(CASSETTES_DIR), + # "drop_unused_requests": True, # Restore after https://github.com/kevin1024/vcrpy/issues/961 } @@ -50,9 +51,14 @@ async def __aiter__(self) -> AsyncIterator[bytes]: yield chunk -async def _async_vcr_send(cassette, real_send, *args, **kwargs): # noqa: ARG001 - """VCR send that only sends, not possibly recording or playing back responses.""" - return await real_send(*args, **kwargs) +async def _vcr_handle_async_request( + cassette, # noqa: ARG001 + real_handle_async_request, + self, + real_request, +): + """VCR handler that only sends, not possibly recording or playing back responses.""" + return await real_handle_async_request(self, real_request) # Permanently patch the original response stream, @@ -64,4 +70,4 @@ async def _async_vcr_send(cassette, real_send, *args, **kwargs): # noqa: ARG001 # Permanently patch vcrpy's async VCR recording functionality, # to work around https://github.com/kevin1024/vcrpy/issues/944 -vcr.stubs.httpx_stubs._async_vcr_send = _async_vcr_send +vcr.stubs.httpcore_stubs._vcr_handle_async_request = _vcr_handle_async_request diff --git a/pyproject.toml b/pyproject.toml index 5751ceeb8..2bb852fc3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -81,7 +81,7 @@ dev = [ "python-dotenv", "refurb>=2", # Pin to keep recent "typeguard", - "vcrpy>=6", # Pin for https://github.com/kevin1024/vcrpy/issues/884 + "vcrpy>=8", # Pin for dropping unused requests support ] docling = ["paper-qa-docling"] image = ["fhlmi[image]"] diff --git a/tests/conftest.py b/tests/conftest.py index 1cc6a5fd4..d76faea93 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -13,7 +13,7 @@ import httpx_aiohttp import litellm.llms.custom_httpx.aiohttp_transport import pytest -import vcr.stubs.httpx_stubs +import vcr.stubs.httpcore_stubs from dotenv import load_dotenv from lmi.utils import ( ANTHROPIC_API_KEY_HEADER, @@ -117,6 +117,7 @@ def fixture_vcr_config() -> dict[str, Any]: "record_mode": "once" if not IN_GITHUB_ACTIONS else "none", "allow_playback_repeats": True, "cassette_library_dir": str(CASSETTES_DIR), + # "drop_unused_requests": True, # Restore after https://github.com/kevin1024/vcrpy/issues/961 } @@ -213,9 +214,14 @@ async def __aiter__(self) -> AsyncIterator[bytes]: yield chunk -async def _async_vcr_send(cassette, real_send, *args, **kwargs): # noqa: ARG001 - """VCR send that only sends, not possibly recording or playing back responses.""" - return await real_send(*args, **kwargs) +async def _vcr_handle_async_request( + cassette, # noqa: ARG001 + real_handle_async_request, + self, + real_request, +): + """VCR handler that only sends, not possibly recording or playing back responses.""" + return await real_handle_async_request(self, real_request) # Permanently patch the original response stream, @@ -227,4 +233,4 @@ async def _async_vcr_send(cassette, real_send, *args, **kwargs): # noqa: ARG001 # Permanently patch vcrpy's async VCR recording functionality, # to work around https://github.com/kevin1024/vcrpy/issues/944 -vcr.stubs.httpx_stubs._async_vcr_send = _async_vcr_send +vcr.stubs.httpcore_stubs._vcr_handle_async_request = _vcr_handle_async_request diff --git a/uv.lock b/uv.lock index 30d5395be..68f339909 100644 --- a/uv.lock +++ b/uv.lock @@ -2889,7 +2889,7 @@ requires-dist = [ { name = "types-setuptools", marker = "extra == 'typing'" }, { name = "unstructured", extras = ["docx", "pptx", "xlsx"], marker = "extra == 'office'" }, { name = "usearch", marker = "extra == 'memory'", specifier = ">=2.16.4" }, - { name = "vcrpy", marker = "extra == 'dev'", specifier = ">=6" }, + { name = "vcrpy", marker = "extra == 'dev'", specifier = ">=8" }, ] provides-extras = ["dev", "docling", "image", "ldp", "local", "memory", "nemotron", "office", "openreview", "pymupdf", "pypdf", "pypdf-media", "qdrant", "typing", "zotero"] @@ -3000,7 +3000,7 @@ requires-dist = [ { name = "tenacity" }, { name = "types-aiobotocore", marker = "extra == 'typing'" }, { name = "types-pillow", marker = "extra == 'typing'" }, - { name = "vcrpy", marker = "extra == 'dev'", specifier = ">=6" }, + { name = "vcrpy", marker = "extra == 'dev'", specifier = ">=8" }, ] provides-extras = ["dev", "sagemaker", "typing"] @@ -5693,17 +5693,15 @@ wheels = [ [[package]] name = "vcrpy" -version = "7.0.0" +version = "8.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pyyaml" }, - { name = "urllib3" }, { name = "wrapt" }, - { name = "yarl" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/25/d3/856e06184d4572aada1dd559ddec3bedc46df1f2edc5ab2c91121a2cccdb/vcrpy-7.0.0.tar.gz", hash = "sha256:176391ad0425edde1680c5b20738ea3dc7fb942520a48d2993448050986b3a50", size = 85502, upload-time = "2024-12-31T00:07:57.894Z" } +sdist = { url = "https://files.pythonhosted.org/packages/23/74/4200cb68d59e86849992eb6512d969cd561051f034e017428e040b113974/vcrpy-8.1.0.tar.gz", hash = "sha256:e585ca3cd9bb751e402728a00394847561250588eebc047b4d3c8948d5487733", size = 85930, upload-time = "2025-12-08T16:46:13.049Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/13/5d/1f15b252890c968d42b348d1e9b0aa12d5bf3e776704178ec37cceccdb63/vcrpy-7.0.0-py2.py3-none-any.whl", hash = "sha256:55791e26c18daa363435054d8b35bd41a4ac441b6676167635d1b37a71dbe124", size = 42321, upload-time = "2024-12-31T00:07:55.277Z" }, + { url = "https://files.pythonhosted.org/packages/09/77/892bcd82445ac949816205b51ab80deb86a492a315f2e290ed4eab35021c/vcrpy-8.1.0-py3-none-any.whl", hash = "sha256:fc4fb6e954c6d082ba6d329c6f3d1228f5b1b1d2836f9022c301b587cfad7378", size = 42748, upload-time = "2025-12-08T16:46:12.08Z" }, ] [[package]]