class CodetteEngine: def __init__(self, loader, registry): self.loader = loader self.registry = registry def generate(self, messages, adapter): self.loader.set_active_adapter(adapter) prompt = self.loader.format_messages(messages) inputs = self.loader.tokenize(prompt) params = self.registry[adapter]["generation"] output = self.loader.model.generate( **inputs, max_new_tokens=params.get("max_tokens", 512), temperature=params.get("temperature", 0.7), top_p=params.get("top_p", 0.9), repetition_penalty=params.get("repetition_penalty", 1.1) ) text = self.loader.tokenizer.decode( output[0], skip_special_tokens=True ) return text def multi_perspective(self, messages, adapters): outputs = {} for adapter in adapters: outputs[adapter] = self.generate(messages, adapter) return self._synthesize(messages, outputs) def _synthesize(self, messages, responses): combined = "\n\n".join( f"{name.upper()}:\n{text}" for name, text in responses.items() ) synthesis_messages = messages + [ { "role": "system", "content": "Combine the perspectives into a single answer." }, { "role": "user", "content": combined } ] return self.generate(synthesis_messages, "multi_perspective")