# Vanilla class Vanilla(dspy.Module): def __init__(self, num_passages=3): super().__init__() self.retrieve = dspy.Retrieve(k=num_passages) self.generate_answer = dspy.Predict("context, question -> answer") def forward(self, question): context = self.retrieve(question).passages answer = self.generate_answer(context=context, question=question) return answer vanilla = Vanilla() # COT class COT(dspy.Module): def __init__(self, num_passages=3): super().__init__() self.retrieve = dspy.Retrieve(k=num_passages) self.generate_answer = dspy.ChainOfThought("context, question -> answer") def forward(self, question): context = self.retrieve(question).passages answer = self.generate_answer(context=context, question=question) return answer cot = COT() # ReAct react = dspy.ReAct("question-> answer", tools=[dspy.Retrieve(k=3)], max_iters=5) # BasicMultiHop class BasicMultiHop(dspy.Module): def __init__(self, passages_per_hop=3): self.retrieve = dspy.Retrieve(k=passages_per_hop) self.generate_query = dspy.ChainOfThought("context, question-> search_query") self.generate_answer = dspy.ChainOfThought("context, question-> answer") def forward(self, question): context = [] for hop in range(2): query = self.generate_query(context=context, question=question).search_query context += self.retrieve(query).passages return self.generate_answer(context=context, question=question) multihop = BasicMultiHop(passages_per_hop=3)