"""Mood line selection from atmosphere snapshot.""" from __future__ import annotations import json from pathlib import Path from typing import Dict, List, Tuple DEFAULT_TEMPLATES = { "cozy": "店里像被一层软光裹住。", "bright": "窗边的亮色把花瓣都叫醒了。", "quiet": "安静得能听见纸袋轻响。", "lively": "空气里有一点点热闹的甜。", "nostalgic": "干燥花香像旧信笺。", "scent_floral": "花香在柜台边打了个转。", } def load_templates(path: Path | None = None) -> Dict[str, str]: path = path or Path(__file__).resolve().parents[2] / "content/diary/mood_templates.json" if not path.exists(): return dict(DEFAULT_TEMPLATES) data = json.loads(path.read_text(encoding="utf-8")) out = dict(DEFAULT_TEMPLATES) for row in data.get("templates") or []: if row.get("dim") and row.get("text"): out[row["dim"]] = row["text"] return out TEMPLATES = load_templates() def top_dims(snapshot: dict, n=2) -> List[Tuple[str, float]]: dims = {k: v for k, v in snapshot.items() if k != "crowding"} return sorted(dims.items(), key=lambda kv: kv[1], reverse=True)[:n] def mood_from_snapshot(snapshot: dict) -> str: top = top_dims(snapshot) if not top or top[0][1] < 0.2: return "今天的店,安安静静。" return TEMPLATES.get(top[0][0], "今天的店,安安静静。") # reseal-product R166