File size: 1,408 Bytes
f5776d3 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
import dsp
import tqdm
import random
from dspy.teleprompt.teleprompt import Teleprompter
"""
TODO: The EnsembledProgram should actually imitate the structure of the individual programs (IF they are all compatible). This allows compiling with an ensemble program as a (singular) teacher. Basically the top majority-compatible trace will end up being used, if dspy.majority is the reduce_fn.
"""
class Ensemble(Teleprompter):
def __init__(self, *, reduce_fn=None, size=None, deterministic=False):
"""A common reduce_fn is dspy.majority."""
assert deterministic is False, "TODO: Implement example hashing for deterministic ensemble."
self.reduce_fn = reduce_fn
self.size = size
self.deterministic = deterministic
def compile(self, programs):
size = self.size
reduce_fn = self.reduce_fn
import dspy
class EnsembledProgram(dspy.Module):
def __init__(self):
super().__init__()
self.programs = programs
def forward(self, *args, **kwargs):
programs = random.sample(self.programs, size) if size else self.programs
outputs = [prog(*args, **kwargs) for prog in programs]
if reduce_fn:
return reduce_fn(outputs)
return outputs
return EnsembledProgram()
|