| """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], "今天的店,安安静静。") |
| |
|
|