feat: improve llm settings ui and douyu daily fallback
This commit is contained in:
@@ -1027,7 +1027,60 @@ class DouyuPlugin(MessagePluginInterface):
|
||||
sessions.sort(
|
||||
key=lambda item: str(((item.get("segments") or [{}])[0]).get("start_time", "")),
|
||||
)
|
||||
return sessions[:self._daily_report_max_sessions]
|
||||
if sessions:
|
||||
return sessions[:self._daily_report_max_sessions]
|
||||
|
||||
inferred_sessions = self._infer_sessions_for_anchor_day(room_id, anchor_day)
|
||||
if inferred_sessions:
|
||||
logger.info(
|
||||
f"斗鱼每日报告使用弹幕文件回推 session: room={room_id}, day={anchor_day}, "
|
||||
f"count={len(inferred_sessions)}"
|
||||
)
|
||||
return inferred_sessions[:self._daily_report_max_sessions]
|
||||
return []
|
||||
|
||||
def _infer_sessions_for_anchor_day(self, room_id: str, anchor_day: str) -> List[Dict[str, Any]]:
|
||||
date_key = anchor_day.replace("-", "")
|
||||
day_messages = DouyuDanmuSummaryHelper.load_day_messages(room_id, date_key)
|
||||
if not day_messages:
|
||||
return []
|
||||
|
||||
inferred_sessions = DouyuDanmuSummaryHelper.infer_sessions_from_messages(
|
||||
room_id,
|
||||
day_messages,
|
||||
session_cutoff_hour=self._session_cutoff_hour,
|
||||
merge_gap_hours=self._merge_gap_hours,
|
||||
min_session_messages=min(50, self._daily_report_min_messages),
|
||||
)
|
||||
|
||||
inferred_sessions = [
|
||||
item for item in inferred_sessions
|
||||
if str(item.get("anchor_day") or "") == anchor_day
|
||||
]
|
||||
if inferred_sessions:
|
||||
return inferred_sessions
|
||||
|
||||
if len(day_messages) < self._daily_report_min_messages:
|
||||
return []
|
||||
|
||||
ordered = sorted(day_messages, key=lambda item: item.get("timestamp") or datetime.min)
|
||||
start_dt = ordered[0].get("timestamp")
|
||||
end_dt = ordered[-1].get("timestamp")
|
||||
if not isinstance(start_dt, datetime) or not isinstance(end_dt, datetime):
|
||||
return []
|
||||
return [{
|
||||
"session_id": f"{room_id}_{date_key}_fallback",
|
||||
"room_id": room_id,
|
||||
"anchor_day": anchor_day,
|
||||
"nickname": "",
|
||||
"room_name": "",
|
||||
"segments": [{
|
||||
"start_time": start_dt.strftime("%Y-%m-%d %H:%M:%S"),
|
||||
"end_time": end_dt.strftime("%Y-%m-%d %H:%M:%S"),
|
||||
}],
|
||||
"is_live": False,
|
||||
"source": "fallback_full_day",
|
||||
}]
|
||||
|
||||
def _build_daily_report_payload(self, room_id: str, anchor_day: str, sessions: List[Dict[str, Any]]) -> Optional[Dict[str, Any]]:
|
||||
if not sessions:
|
||||
@@ -1516,17 +1569,29 @@ class DouyuPlugin(MessagePluginInterface):
|
||||
if target_group_id
|
||||
else self.redis_manager.all_subscribed_rooms()
|
||||
)
|
||||
if not rooms:
|
||||
logger.info(
|
||||
f"斗鱼每日报告无可处理房间: day={anchor_day}, target_group={target_group_id or 'ALL'}"
|
||||
)
|
||||
return False
|
||||
delivered_any = False
|
||||
for room_id in rooms:
|
||||
if not force and self.redis_manager.get_text_value(self._daily_report_room_key(room_id, anchor_day)):
|
||||
logger.info(f"斗鱼每日报告已发送过,跳过: room={room_id}, day={anchor_day}")
|
||||
continue
|
||||
sessions = self._load_sessions_for_anchor_day(room_id, anchor_day)
|
||||
if not sessions:
|
||||
logger.info(f"斗鱼每日报告无 session: room={room_id}, day={anchor_day}")
|
||||
continue
|
||||
if any(bool(session.get("is_live")) for session in sessions):
|
||||
logger.info(f"斗鱼每日报告存在直播中场次,跳过: room={room_id}, day={anchor_day}")
|
||||
continue
|
||||
payload = self._build_daily_report_payload(room_id, anchor_day, sessions)
|
||||
if not payload:
|
||||
logger.info(
|
||||
f"斗鱼每日报告 payload 为空: room={room_id}, day={anchor_day}, "
|
||||
f"sessions={len(sessions)}, min_messages={self._daily_report_min_messages}"
|
||||
)
|
||||
continue
|
||||
report_result = await self._get_or_create_daily_report_result(room_id, anchor_day, payload)
|
||||
report_text = str(report_result.get("report_text") or "").strip()
|
||||
|
||||
Reference in New Issue
Block a user