diff --git a/pyproject.toml b/pyproject.toml index 0cdc6cf6bb..c5a1eba553 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -140,7 +140,7 @@ litellm = [ # platforms cannot be pinned back selectively. 1.91.x is the last line with a # universal wheel that installs everywhere. Revisit once litellm ships macOS # and musllinux wheels. - "litellm>=1.83.0,<1.92.0", + "litellm>=1.84.0,<1.92.0", ] # all includes all functional dependencies excluding the ones from the "dev" dependency group @@ -151,7 +151,7 @@ all = [ "flask>=3.1.3", "ipykernel>=6.29.5", "jupyter>=1.1.1", - "litellm>=1.83.0,<1.92.0", # 1.92.0+ drops the universal wheel (no mac/musl/old-glibc/win-arm64); see litellm group + "litellm>=1.84.0,<1.92.0", # 1.92.0+ drops the universal wheel (no mac/musl/old-glibc/win-arm64); see litellm group "ollama>=0.5.1", "opencv-python>=4.11.0.86", "playwright>=1.49.0", diff --git a/pyrit/prompt_target/openai/openai_video_target.py b/pyrit/prompt_target/openai/openai_video_target.py index 6b2102a5b1..a8ff9063da 100644 --- a/pyrit/prompt_target/openai/openai_video_target.py +++ b/pyrit/prompt_target/openai/openai_video_target.py @@ -261,8 +261,7 @@ async def _send_text_plus_image_to_video_async( logger.info("Text+Image-to-video mode: Using image as first frame") input_file = await self._prepare_image_input_async(image_piece=image_piece) return await self._handle_openai_request_async( - # Azure continues to support the Videos API despite its OpenAI deprecation. - api_call=lambda: self._client.videos.create_and_poll( # ty: ignore[deprecated] + api_call=lambda: self._client.videos.create_and_poll( model=self._model_name, prompt=prompt, size=self._size, @@ -284,8 +283,7 @@ async def _send_text_to_video_async(self, *, prompt: str, request: Message) -> M The response Message with the generated video path. """ return await self._handle_openai_request_async( - # Azure continues to support the Videos API despite its OpenAI deprecation. - api_call=lambda: self._client.videos.create_and_poll( # ty: ignore[deprecated] + api_call=lambda: self._client.videos.create_and_poll( model=self._model_name, prompt=prompt, size=self._size, @@ -339,12 +337,11 @@ async def _remix_and_poll_async(self, *, video_id: str, prompt: str) -> Any: Returns: The completed Video object from the OpenAI SDK. """ - # Azure continues to support the Videos API despite its OpenAI deprecation. - video = await self._client.videos.remix(video_id, prompt=prompt) # ty: ignore[deprecated] + video = await self._client.videos.remix(video_id, prompt=prompt) # Poll until completion if not already done if video.status not in ["completed", "failed"]: - video = await self._client.videos.poll(video.id) # ty: ignore[deprecated] + video = await self._client.videos.poll(video.id) return video @@ -394,8 +391,7 @@ async def _construct_message_from_response_async(self, response: Any, request: A logger.info(f"Video was remixed from: {video.remixed_from_video_id}") # Download video content using SDK - # Azure continues to support the Videos API despite its OpenAI deprecation. - video_response = await self._client.videos.download_content(video.id) # ty: ignore[deprecated] + video_response = await self._client.videos.download_content(video.id) # Extract bytes from HttpxBinaryResponseContent video_content = video_response.content diff --git a/uv.lock b/uv.lock index 26f78f6208..a692b1adeb 100644 --- a/uv.lock +++ b/uv.lock @@ -2215,19 +2215,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784, upload-time = "2025-04-24T22:06:20.566Z" }, ] -[[package]] -name = "httpcore2" -version = "2.12.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "h11" }, - { name = "truststore" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/be/ad/f4f0e57345f1870f3e8cb624e058d7eca6e5a27d33bcc3311d9b618734cd/httpcore2-2.12.0.tar.gz", hash = "sha256:9293522bba0aa7c4c8e9e3f040c16575bd8868e155a77fa30c7a9085a5eae648", size = 67548, upload-time = "2026-08-18T13:22:08.211Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d2/74/d370e55600d9bcfa0d9794b0166126d49291a3d2b20c268fc98c453a4948/httpcore2-2.12.0-py3-none-any.whl", hash = "sha256:7e04258ce01013d7d615e5b910a3b27fac937d7a95038227e79652b4ba3b4ceb", size = 83074, upload-time = "2026-08-18T13:22:05.854Z" }, -] - [[package]] name = "httptools" version = "0.7.1" @@ -2291,32 +2278,6 @@ http2 = [ { name = "h2" }, ] -[[package]] -name = "httpx2" -version = "2.12.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "anyio", marker = "sys_platform != 'emscripten'" }, - { name = "httpcore2", marker = "sys_platform != 'emscripten'" }, - { name = "httpx2-jsfetch", marker = "python_full_version >= '3.12' and sys_platform == 'emscripten'" }, - { name = "idna" }, - { name = "truststore", marker = "sys_platform != 'emscripten'" }, - { name = "typing-extensions", marker = "python_full_version < '3.13'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/7f/f8/579a8b51e42e38ee32647df9f08aa25643ae788e275cc625b199829c4671/httpx2-2.12.0.tar.gz", hash = "sha256:7631fe9887a8a2275f4a2540e053aa670fcc50742864a9ae7c66e609fdcf12cf", size = 100040, upload-time = "2026-08-18T13:22:09.086Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c8/95/411ba65569158e862368917aaf56597f3e5fa3b91b0502919638465a08f3/httpx2-2.12.0-py3-none-any.whl", hash = "sha256:cc8b6eecb8661c146b8f89a60e97456ee086e91a784ed31ac450c3a9e613dd36", size = 95427, upload-time = "2026-08-18T13:22:06.834Z" }, -] - -[[package]] -name = "httpx2-jsfetch" -version = "1.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/cd/c4/0e5636363151a2a1795e0a77617168b9ca438e1748ec05fc9b5687f93d64/httpx2_jsfetch-1.0.tar.gz", hash = "sha256:70a0e3eabfef7cce5ad9c629f7d01ca05e418f586646f4ddf14782e4c1454c60", size = 6872, upload-time = "2026-08-07T00:13:07.492Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9b/43/832f631d32e4f1211caa2ba368317739fe71f0b8530e4c9d15dc454bac2a/httpx2_jsfetch-1.0-py3-none-any.whl", hash = "sha256:cb916b707601e69a07721aabc8f3f6659be3a6893bc1ff5c6f9e02241df2da32", size = 6382, upload-time = "2026-08-07T00:13:06.567Z" }, -] - [[package]] name = "huggingface-hub" version = "1.13.0" @@ -3066,7 +3027,7 @@ wheels = [ [[package]] name = "litellm" -version = "1.83.0" +version = "1.84.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiohttp" }, @@ -3082,9 +3043,9 @@ dependencies = [ { name = "tiktoken" }, { name = "tokenizers" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/22/92/6ce9737554994ca8e536e5f4f6a87cc7c4774b656c9eb9add071caf7d54b/litellm-1.83.0.tar.gz", hash = "sha256:860bebc76c4bb27b4cf90b4a77acd66dba25aced37e3db98750de8a1766bfb7a", size = 17333062, upload-time = "2026-03-31T05:08:25.331Z" } +sdist = { url = "https://files.pythonhosted.org/packages/dd/e9/8941b7e72a187000561d932c0f2f2ed2b0fd080dfc33ba6e05961d45ca7d/litellm-1.84.0.tar.gz", hash = "sha256:b8ad0cbea11a5941b18d5af973017a340abd3d3ab41cb86e5401b970626d71a6", size = 15103206, upload-time = "2026-05-14T05:45:53.017Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/19/2c/a670cc050fcd6f45c6199eb99e259c73aea92edba8d5c2fc1b3686d36217/litellm-1.83.0-py3-none-any.whl", hash = "sha256:88c536d339248f3987571493015784671ba3f193a328e1ea6780dbebaa2094a8", size = 15610306, upload-time = "2026-03-31T05:08:21.987Z" }, + { url = "https://files.pythonhosted.org/packages/01/a6/77fa1bbf5e42eb596b06318b3f7e6af5d0f44028046d1d598c6a595d028f/litellm-1.84.0-py3-none-any.whl", hash = "sha256:2a58d6041e6aa27d1a28dc8d8828ab500fef1a00ef74ca65e60899035010c2f2", size = 16735062, upload-time = "2026-05-14T05:45:49.927Z" }, ] [[package]] @@ -4190,21 +4151,21 @@ wheels = [ [[package]] name = "openai" -version = "3.1.0" +version = "2.54.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio" }, { name = "distro" }, - { name = "httpx2" }, + { name = "httpx" }, { name = "jiter" }, { name = "pydantic" }, { name = "sniffio" }, { name = "tqdm" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/58/9b/d45911bf9abfc5a754d800d79fe56e4dcf6e7b679d6ff4b7e9689b56bc02/openai-3.1.0.tar.gz", hash = "sha256:3ae7190da63f718727f9c525740d3f713e85553d2bf1d0cc9247346bd9063a4d", size = 1131016, upload-time = "2026-08-14T23:49:46.325Z" } +sdist = { url = "https://files.pythonhosted.org/packages/50/9a/8c75e8c8a5b407a0586faeb2afac91674ff955c191ecc1d6d3b6669f6788/openai-2.54.0.tar.gz", hash = "sha256:e3e6f8bc1ba30ddf381ace1a14340eed381cb984a1a59bd0f34b5be3b5d49cfa", size = 1100285, upload-time = "2026-08-11T18:46:59.035Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d3/45/84b9e909968c0f4c3112a828bba9aa8be6a5ee322fcb3d781145ee53d88e/openai-3.1.0-py3-none-any.whl", hash = "sha256:f06d5a5c8d06a0aead3a67d33fe5a3c3c31540a0f7a8017b02ba8cd99bc5c736", size = 1670762, upload-time = "2026-08-14T23:49:43.998Z" }, + { url = "https://files.pythonhosted.org/packages/64/a8/bb76c7356de8ad57f59d5ff993d434df0607f07f08bcc9c9a5c275e399c0/openai-2.54.0-py3-none-any.whl", hash = "sha256:89089789197ccdb87f173a03145ed1598d00795220c93e96cf712b1cbf5e5f2b", size = 1660351, upload-time = "2026-08-11T18:46:56.684Z" }, ] [[package]] @@ -5424,8 +5385,8 @@ requires-dist = [ { name = "ipykernel", marker = "extra == 'all'", specifier = ">=6.29.5" }, { name = "jinja2", specifier = ">=3.1.6" }, { name = "jupyter", marker = "extra == 'all'", specifier = ">=1.1.1" }, - { name = "litellm", marker = "extra == 'all'", specifier = ">=1.83.0,<1.92.0" }, - { name = "litellm", marker = "extra == 'litellm'", specifier = ">=1.83.0,<1.92.0" }, + { name = "litellm", marker = "extra == 'all'", specifier = ">=1.84.0,<1.92.0" }, + { name = "litellm", marker = "extra == 'litellm'", specifier = ">=1.84.0,<1.92.0" }, { name = "numpy", marker = "python_full_version < '3.14'", specifier = ">=1.26.0" }, { name = "numpy", marker = "python_full_version >= '3.14'", specifier = ">=2.3.0" }, { name = "ollama", marker = "extra == 'all'", specifier = ">=0.5.1" }, @@ -7117,15 +7078,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f0/ac/229b7d4589d2e5937310e72c6d46e89599d16a4a12b479ffa1499fee8eb8/triton-3.7.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:10ba85fa2cca4a2fbdeb36bf1cb082f2c252bda55bf9fccd74f65ec5bc647e68", size = 197824404, upload-time = "2026-06-17T19:53:42.772Z" }, ] -[[package]] -name = "truststore" -version = "0.10.4" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/53/a3/1585216310e344e8102c22482f6060c7a6ea0322b63e026372e6dcefcfd6/truststore-0.10.4.tar.gz", hash = "sha256:9d91bd436463ad5e4ee4aba766628dd6cd7010cf3e2461756b3303710eebc301", size = 26169, upload-time = "2025-08-12T18:49:02.73Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/19/97/56608b2249fe206a67cd573bc93cd9896e1efb9e98bce9c163bcdc704b88/truststore-0.10.4-py3-none-any.whl", hash = "sha256:adaeaecf1cbb5f4de3b1959b42d41f6fab57b2b1666adb59e89cb0b53361d981", size = 18660, upload-time = "2025-08-12T18:49:01.46Z" }, -] - [[package]] name = "ty" version = "0.0.73"