feat: write_meeting_docs() — creates index, transkript, zusammenfassung

This commit is contained in:
2026-04-02 01:05:07 +02:00
parent 9b5b89e159
commit 033c1fc486
2 changed files with 90 additions and 0 deletions
+67
View File
@@ -59,3 +59,70 @@ def list_transcripts(output_dir: str, limit: int = 20) -> list[dict]:
stat = os.stat(full)
result.append({"filename": f, "path": full, "size": stat.st_size, "mtime": stat.st_mtime})
return result
def write_meeting_docs(
aligned_segments: list[tuple[str, str]],
summary: str,
speakers: list[str],
duration_min: int,
output_dir: str,
dt: "datetime | None" = None,
) -> dict[str, str]:
"""Write index, transkript, and zusammenfassung. Returns {type: path}."""
if dt is None:
dt = datetime.now()
os.makedirs(output_dir, exist_ok=True)
base = dt.strftime("%Y-%m-%d-%H%M") + "-meeting"
date_str = dt.strftime("%d.%m.%Y %H:%M")
frontmatter_base = f"---\ndate: {dt.isoformat(timespec='seconds')}\ntags: [transkript, meeting]\n---\n\n"
# --- transkript ---
transcript_lines = []
for speaker, text in aligned_segments:
transcript_lines.append(f"**{speaker}:** {text}\n")
transcript_content = "\n".join(transcript_lines)
transkript_filename = f"{base}-transkript.md"
transkript_path = os.path.join(output_dir, transkript_filename)
with open(transkript_path, "w", encoding="utf-8") as f:
f.write(frontmatter_base)
f.write(transcript_content)
if not transcript_content.endswith("\n"):
f.write("\n")
# --- zusammenfassung ---
zusammenfassung_filename = f"{base}-zusammenfassung.md"
zusammenfassung_path = os.path.join(output_dir, zusammenfassung_filename)
with open(zusammenfassung_path, "w", encoding="utf-8") as f:
f.write(frontmatter_base)
f.write(summary)
if not summary.endswith("\n"):
f.write("\n")
# --- index ---
speaker_str = ", ".join(speakers) if speakers else "Unbekannt"
tl_dr = _extract_tldr(summary)
index_content = (
f"# Meeting — {date_str}\n\n"
f"**Sprecher:** {speaker_str} \n"
f"**Dauer:** {duration_min} min\n\n"
f"> {tl_dr}\n\n"
f"- [Transkript]({transkript_filename})\n"
f"- [Zusammenfassung]({zusammenfassung_filename})\n"
)
index_filename = f"{base}-index.md"
index_path = os.path.join(output_dir, index_filename)
with open(index_path, "w", encoding="utf-8") as f:
f.write(f"---\ndate: {dt.isoformat(timespec='seconds')}\ntags: [transkript, meeting, index]\n---\n\n")
f.write(index_content)
return {"index": index_path, "transkript": transkript_path, "zusammenfassung": zusammenfassung_path}
def _extract_tldr(summary: str) -> str:
"""Return the first non-heading, non-empty line from the summary as TL;DR."""
for line in summary.splitlines():
stripped = line.strip()
if stripped and not stripped.startswith("#"):
return stripped[:200]
return "Kein TL;DR verfügbar."