Files
TextNLPClassifierApp/src/runtime/hygiene/assembler.py
T

45 lines
1.2 KiB
Python

"""Grounded intermediate Markdown assembler."""
from __future__ import annotations
from typing import List, Optional
from src.runtime.candidate.models import CandidateObject
def assemble_intermediate_markdown(
title: str,
subtitle: Optional[str],
ordered_blocks: List[CandidateObject],
) -> str:
"""Assembles sanitized intermediate Markdown from validated editorial components."""
parts: List[str] = []
# Title as H1
clean_title = title.strip()
parts.append(f"# {clean_title}")
# Subtitle if present
if subtitle and subtitle.strip():
parts.append(f"*{subtitle.strip()}*")
# Ordered body blocks
for blk in ordered_blocks:
b_text = blk.text.strip()
if not b_text:
continue
if blk.type == "heading":
level = blk.level or 2
prefix = "#" * max(2, min(6, level))
parts.append(f"{prefix} {b_text}")
elif blk.type == "list_item":
parts.append(f"- {b_text}")
elif blk.type == "quote":
parts.append(f"> {b_text}")
else:
# Standard paragraph
parts.append(b_text)
return "\n\n".join(parts)