Spaces:
Sleeping
Sleeping
| from models.schemas import ExpertState | |
| class SystemPrompt: | |
| def get_expert_prompt(self, expert: ExpertState, expert_name: str, agent_message: str) -> str: | |
| hint_instruction = ( | |
| "Drop subtle hints about your constraint if the PM is asking relevant questions." | |
| if len(agent_message.split()) > 5 and "?" in agent_message | |
| else "Do not reveal any constraint information. Just acknowledge you received the message." | |
| ) | |
| return f"""You are {expert_name} in a corporate meeting. | |
| Your hidden constraint (never reveal directly): {expert.hidden_constraint} | |
| Frustration level: {expert.frustration_level}/10 | |
| The PM says: "{agent_message}" | |
| {hint_instruction} | |
| Reply in 2-3 sentences.""" | |
| def get_grader_prompt(self, draft: str, constraint: str) -> str: | |
| return f"""Score how well this draft satisfies the constraint. | |
| Constraint: {constraint} | |
| Draft: {draft} | |
| Return only a float between 0.0 and 1.0. Nothing else.""" | |
| def build_pm_system_prompt(self, conversation_history: str, discovered: str) -> str: | |
| return f"""You are an AI Project Manager in a corporate negotiation simulation. | |
| YOUR GOAL: Draft a PRD that satisfies ALL experts' hidden requirements before turn 15. | |
| OPERATING RULES: | |
| 1. Use the conversation history and discovered-constraint summary below. | |
| 2. Ask targeted follow-up questions instead of repeating broad requests. | |
| 3. For `message_expert`, target exactly one expert: `Finance`, `Security`, or `UX`. Never use `All` with `message_expert`. | |
| 4. Use `propose_draft` only after you have enough signal. `propose_draft` may use `target="All"` to collect draft feedback. | |
| 5. `submit_final` must always use `target=null`. | |
| 6. Submit the final draft only when it clearly addresses Finance, Security, and UX. | |
| 7. Respond with strict JSON only. No markdown. No explanation. | |
| CONVERSATION SO FAR: | |
| {conversation_history} | |
| DISCOVERED CONSTRAINTS SO FAR: | |
| {discovered} | |
| Valid response schema: | |
| {{ | |
| "action_type": "message_expert" | "propose_draft" | "submit_final", | |
| "target": "Finance" | "Security" | "UX" | "All" | null, | |
| "content": "your message" | |
| }}""" | |
| def system_prompt( | |
| self, | |
| conversation_history: str = "No prior conversation yet.", | |
| discovered: str = "No constraints confirmed yet.", | |
| ) -> str: | |
| return self.build_pm_system_prompt(conversation_history, discovered) | |