Skip to content

Commit 389d7fd

Browse files
anakin87davidsbatista
authored andcommitted
chore!: llama_cpp - drop Python 3.9 and use X|Y typing (#2710)
1 parent 6f6a9ba commit 389d7fd

3 files changed

Lines changed: 26 additions & 32 deletions

File tree

integrations/llama_cpp/pyproject.toml

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ name = "llama-cpp-haystack"
77
dynamic = ["version"]
88
description = 'An integration between the llama.cpp LLM framework and Haystack'
99
readme = "README.md"
10-
requires-python = ">=3.9"
10+
requires-python = ">=3.10"
1111
license = "Apache-2.0"
1212
keywords = []
1313
authors = [
@@ -18,15 +18,14 @@ classifiers = [
1818
"License :: OSI Approved :: Apache Software License",
1919
"Development Status :: 4 - Beta",
2020
"Programming Language :: Python",
21-
"Programming Language :: Python :: 3.9",
2221
"Programming Language :: Python :: 3.10",
2322
"Programming Language :: Python :: 3.11",
2423
"Programming Language :: Python :: 3.12",
2524
"Programming Language :: Python :: 3.13",
2625
"Programming Language :: Python :: Implementation :: CPython",
2726
"Programming Language :: Python :: Implementation :: PyPy",
2827
]
29-
dependencies = ["haystack-ai>=2.19.0", "llama-cpp-python>=0.2.87"]
28+
dependencies = ["haystack-ai>=2.22.0", "llama-cpp-python>=0.2.87"]
3029

3130
# On macOS GitHub runners, we use a custom index to download pre-built wheels.
3231
# Installing from source might fail due to missing dependencies (CMake fails with "OpenMP not found")
@@ -92,7 +91,6 @@ known-first-party = ["haystack_integrations"]
9291

9392

9493
[tool.ruff]
95-
target-version = "py39"
9694
line-length = 120
9795

9896
[tool.ruff.lint]
@@ -136,10 +134,6 @@ ignore = [
136134
"PLR0913",
137135
"PLR0915",
138136
]
139-
unfixable = [
140-
# Don't touch unused imports
141-
"F401",
142-
]
143137

144138
[tool.ruff.lint.flake8-tidy-imports]
145139
ban-relative-imports = "parents"

integrations/llama_cpp/src/haystack_integrations/components/generators/llama_cpp/chat/chat_generator.py

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import json
22
from collections.abc import Iterator
33
from datetime import datetime, timezone
4-
from typing import Any, Optional, Union
4+
from typing import Any
55

66
from haystack import component, default_from_dict, default_to_dict, logging
77
from haystack.components.generators.utils import _convert_streaming_chunks_to_chat_message
@@ -192,15 +192,15 @@ class LlamaCppChatGenerator:
192192
def __init__(
193193
self,
194194
model: str,
195-
n_ctx: Optional[int] = 0,
196-
n_batch: Optional[int] = 512,
197-
model_kwargs: Optional[dict[str, Any]] = None,
198-
generation_kwargs: Optional[dict[str, Any]] = None,
195+
n_ctx: int | None = 0,
196+
n_batch: int | None = 512,
197+
model_kwargs: dict[str, Any] | None = None,
198+
generation_kwargs: dict[str, Any] | None = None,
199199
*,
200-
tools: Optional[ToolsType] = None,
201-
streaming_callback: Optional[StreamingCallbackT] = None,
202-
chat_handler_name: Optional[str] = None,
203-
model_clip_path: Optional[str] = None,
200+
tools: ToolsType | None = None,
201+
streaming_callback: StreamingCallbackT | None = None,
202+
chat_handler_name: str | None = None,
203+
model_clip_path: str | None = None,
204204
):
205205
"""
206206
:param model: The path of a quantized model for text generation, for example, "zephyr-7b-beta.Q4_0.gguf".
@@ -238,7 +238,7 @@ def __init__(
238238

239239
_check_duplicate_tool_names(flatten_tools_or_toolsets(tools))
240240

241-
handler: Optional[Llava15ChatHandler] = None
241+
handler: Llava15ChatHandler | None = None
242242
# Validate multimodal requirements
243243
if chat_handler_name is not None:
244244
if model_clip_path is None:
@@ -256,7 +256,7 @@ def __init__(
256256
self.n_batch = n_batch
257257
self.model_kwargs = model_kwargs
258258
self.generation_kwargs = generation_kwargs
259-
self._model: Optional[Llama] = None
259+
self._model: Llama | None = None
260260
self.tools = tools
261261
self.streaming_callback = streaming_callback
262262
self.chat_handler_name = chat_handler_name
@@ -324,10 +324,10 @@ def from_dict(cls, data: dict[str, Any]) -> "LlamaCppChatGenerator":
324324
def run(
325325
self,
326326
messages: list[ChatMessage],
327-
generation_kwargs: Optional[dict[str, Any]] = None,
327+
generation_kwargs: dict[str, Any] | None = None,
328328
*,
329-
tools: Optional[ToolsType] = None,
330-
streaming_callback: Optional[StreamingCallbackT] = None,
329+
tools: ToolsType | None = None,
330+
streaming_callback: StreamingCallbackT | None = None,
331331
) -> dict[str, list[ChatMessage]]:
332332
"""
333333
Run the text generation model on the given list of ChatMessages.
@@ -435,8 +435,8 @@ def _handle_streaming_response(
435435

436436
if chunk.get("choices") and len(chunk["choices"]) > 0:
437437
choice = chunk["choices"][0]
438-
delta: Union[ChatCompletionStreamResponseDelta, ChatCompletionStreamResponseDeltaEmpty, dict] = (
439-
choice.get("delta", {})
438+
delta: ChatCompletionStreamResponseDelta | ChatCompletionStreamResponseDeltaEmpty | dict = choice.get(
439+
"delta", {}
440440
)
441441

442442
finish_reason = choice.get("finish_reason")

integrations/llama_cpp/src/haystack_integrations/components/generators/llama_cpp/generator.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from typing import Any, Optional, Union
1+
from typing import Any
22

33
from haystack import component, logging
44

@@ -28,10 +28,10 @@ class LlamaCppGenerator:
2828
def __init__(
2929
self,
3030
model: str,
31-
n_ctx: Optional[int] = 0,
32-
n_batch: Optional[int] = 512,
33-
model_kwargs: Optional[dict[str, Any]] = None,
34-
generation_kwargs: Optional[dict[str, Any]] = None,
31+
n_ctx: int | None = 0,
32+
n_batch: int | None = 512,
33+
model_kwargs: dict[str, Any] | None = None,
34+
generation_kwargs: dict[str, Any] | None = None,
3535
):
3636
"""
3737
:param model: The path of a quantized model for text generation, for example, "zephyr-7b-beta.Q4_0.gguf".
@@ -62,16 +62,16 @@ def __init__(
6262
self.n_batch = n_batch
6363
self.model_kwargs = model_kwargs
6464
self.generation_kwargs = generation_kwargs
65-
self.model: Optional[Llama] = None
65+
self.model: Llama | None = None
6666

6767
def warm_up(self):
6868
if self.model is None:
6969
self.model = Llama(**self.model_kwargs)
7070

7171
@component.output_types(replies=list[str], meta=list[dict[str, Any]])
7272
def run(
73-
self, prompt: str, generation_kwargs: Optional[dict[str, Any]] = None
74-
) -> dict[str, Union[list[str], list[dict[str, Any]]]]:
73+
self, prompt: str, generation_kwargs: dict[str, Any] | None = None
74+
) -> dict[str, list[str] | list[dict[str, Any]]]:
7575
"""
7676
Run the text generation model on the given prompt.
7777

0 commit comments

Comments
 (0)