PMFlow/backend/app/services/signal_planner/mixin_prompt.py

42 lines
1.4 KiB
Python

"""Prompt assembly for signal planner service."""
from __future__ import annotations
from .shared import Any, PROMPT_SIGNAL_PLANNER, Signal, json, now_cn_naive
class SignalPlannerPromptMixin:
"""Build planner prompt text from signal and project context."""
@classmethod
def _build_prompt(
cls,
*,
signal: Signal,
project_title: str,
recent_signals: list[dict[str, Any]],
members: list[dict[str, Any]],
) -> str:
strategic = cls._as_dict(signal.strategic_analysis)
ai_analysis = (
strategic.get("ai_analysis")
if isinstance(strategic.get("ai_analysis"), dict)
else {}
)
return PROMPT_SIGNAL_PLANNER.format(
signal_id=int(signal.id),
signal_title=str(signal.title or ""),
signal_summary=str(signal.summary or ai_analysis.get("summary") or ""),
signal_content=str(signal.content or ""),
project_id=(
str(signal.matched_project_id)
if signal.matched_project_id is not None
else ""
),
project_title=str(project_title or ""),
project_scope=str(ai_analysis.get("requirement_project_scope") or ""),
recent_signals=json.dumps(recent_signals, ensure_ascii=False),
member_profiles=json.dumps(members, ensure_ascii=False),
now_cn=now_cn_naive().isoformat(),
)