class LLMOrchestrator: def __init__(self, llm_client, input_validator, output_moderator): self.llm_client = llm_client self.input_validator = input_validator self.output_moderator = output_moder self.system_prompt = self._load_system_prompt("default_constitution.txt") def _load_system_prompt(self, filename): with open(filename, "r") as f: return f.read() def process_request(self, user_id: str, user_query: str) -> str: if not self.input_validator.is_safe(user_query): return "I cannot process this request due to safety guidelines." full_prompt = f"{self.system_prompt}\n\nUser: {user_query}\nAssistant:" try: raw_response = self.llm_client.generate(prompt=full_prompt, max_tokens=1024) except Exception as e: # Log the error and return a generic response print(f"LLM generation failed: {e}") return "An error occurred. Please try again later." safety_report = self.output_moderator.analyze_safety(raw_response) if safety_report.get("is_harmful", False): return "I cannot provide information on that topic due to safety policies." else: final_response = self.output_moderator.redact_sensitive_data(raw_response) # Log the interaction here, including safety_report and final_response return final_response # Example Usage: # orchestrator = LLMOrchestrator(LLMClient(), InputValidator(), OutputModerator()) # response = orchestrator.process_request("user123", "What are the side effects of this drug?")