docker000 / game /sim /mood.py
seachen's picture
Deploy Quiet Town Corner Shop Docker demo (Gradio + Python sim) (part 5)
3831e97 verified
Raw
History Blame Contribute Delete
1.45 kB
"""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