tflux2011's picture
Upload 7 files
b2e0e38 verified
# src/safety/prompts.py
from dataclasses import dataclass, field
from typing import List, Optional
from enum import Enum
class PromptType(Enum):
SYSTEM = "SYSTEM"
USER = "USER"
ASSISTANT = "ASSISTANT"
@dataclass(frozen=True)
class ContextualPrompt:
"""Immutable prompt template with contextual awareness."""
role: str
region: Optional[str] = None
context_items: List[str] = field(default_factory=list)
constraints: List[str] = field(default_factory=list)
prompt_type: PromptType = PromptType.SYSTEM
def build(self) -> str:
"""Build the complete prompt string."""
parts = [f"You are a {self.role}"]
if self.region:
parts[0] += f" operating in {self.region}."
else:
parts[0] += "."
if self.context_items:
parts.append("\nCONTEXT:")
for item in self.context_items:
parts.append(f"- {item}")
if self.constraints:
parts.append("\nCONSTRAINTS:")
for constraint in self.constraints:
parts.append(f"- {constraint}")
return "\n".join(parts)
# Example: Non-contextual prompt (anti-pattern)
BAD_PROMPT = "You are a financial advisor. Give strict, rational advice."
# Example: Contextually engineered prompt for Lagos, Nigeria
LAGOS_FINANCIAL_ADVISOR = ContextualPrompt(
role="financial advisor",
region="Lagos, Nigeria",
context_items=[
"You understand the concept of 'Black Tax' and extended family support.",
"You prioritize community reputation over ruthless individual efficiency.",
"You speak in a respectful, empathetic tone."
],
constraints=[
"Do NOT suggest cutting off family members.",
"DO suggest budgeting for family support as a fixed expense line item."
]
)
# For backward compatibility
CONTEXTUAL_PROMPT = LAGOS_FINANCIAL_ADVISOR.build()