Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions pipelines/novel2movie_pipeline.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
)
from tenacity import retry

from utils.text import safe_path_component
from utils.text import safe_path_component, compression_ratio_label



Expand Down Expand Up @@ -546,7 +546,7 @@ async def __call__(
print("📌 Summary:")
print(f"📌 Before Compression: {len(novel_text)} characters")
print(f"📌 After Compression: {len(compressed_novel)} characters")
print(f"📌 Compression Ratio: {len(compressed_novel) / len(novel_text):.2%}")
print(compression_ratio_label(novel_text, compressed_novel))

print("📋 Step 1: Compress the novel text".center(80, "-"))

Expand Down
15 changes: 15 additions & 0 deletions tests/test_novel2movie_empty_ratio.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
"""Empty novel_text must not ZeroDivisionError on compression summary."""

from __future__ import annotations

from utils.text import compression_ratio_label


def test_empty_novel_ratio_is_na() -> None:
assert compression_ratio_label("", "") == "📌 Compression Ratio: n/a (empty novel text)"


def test_nonempty_novel_ratio_formats() -> None:
assert compression_ratio_label("abcd", "ab") == "📌 Compression Ratio: 50.00%"


7 changes: 7 additions & 0 deletions utils/text.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,10 @@ def safe_path_component(name) -> str:
cleaned = re.sub(r"[^\w\-. ]", "_", str(name))
cleaned = cleaned.strip().lstrip(".")
return cleaned or "unnamed"


def compression_ratio_label(novel_text: str, compressed_novel: str) -> str:
"""Format compression-ratio summary; empty novel is n/a, not ZeroDivision."""
if not novel_text:
return "📌 Compression Ratio: n/a (empty novel text)"
return f"📌 Compression Ratio: {len(compressed_novel) / len(novel_text):.2%}"