Skip to content

Commit 486db68

Browse files
authored
Handle None content in stop-sequence trimming (#1826)
1 parent 5155568 commit 486db68

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

src/smolagents/models.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,15 @@ def convert(obj):
7474
return convert(obj)
7575

7676

77-
def remove_content_after_stop_sequences(content: str, stop_sequences: list[str]) -> str:
78-
"""Remove content after any stop sequence is encountered."""
77+
def remove_content_after_stop_sequences(content: str | None, stop_sequences: list[str] | None) -> str | None:
78+
"""Remove content after any stop sequence is encountered.
79+
80+
Some providers may return ``None`` content (for example when responding purely with tool calls),
81+
so we skip processing in that case.
82+
"""
83+
if content is None or not stop_sequences:
84+
return content
85+
7986
for stop_seq in stop_sequences:
8087
split = content.split(stop_seq)
8188
content = split[0]

tests/test_models.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -724,6 +724,17 @@ def test_remove_content_after_stop_sequences():
724724
assert removed_content == "Hello"
725725

726726

727+
def test_remove_content_after_stop_sequences_handles_none():
728+
# Test with None stop sequence
729+
content = "Hello world!"
730+
removed_content = remove_content_after_stop_sequences(content, None)
731+
assert removed_content == content
732+
733+
# Test with None content
734+
removed_content = remove_content_after_stop_sequences(None, ["<code>"])
735+
assert removed_content is None
736+
737+
727738
@pytest.mark.parametrize(
728739
"convert_images_to_image_urls, expected_clean_message",
729740
[

0 commit comments

Comments
 (0)