dspy.BestOfN
dspy.BestOfN(module: Module, N: int, reward_fn: Callable[[dict, Prediction], float], threshold: float, fail_count: Optional[int] = None)
Bases: Module
Runs a module up to N
times with different temperatures and returns the best prediction
out of N
attempts or the first prediction that passes the threshold
.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
module
|
Module
|
The module to run. |
required |
N
|
int
|
The number of times to run the module. |
required |
reward_fn
|
Callable[[dict, Prediction], float]
|
The reward function which takes in the args passed to the module, the resulting prediction, and returns a scalar reward. |
required |
threshold
|
float
|
The threshold for the reward function. |
required |
fail_count
|
Optional[int]
|
The number of times the module can fail before raising an error. Defaults to N if not provided. |
None
|
Example
import dspy
dspy.settings.configure(lm=dspy.LM("openai/gpt-4o-mini"))
# Define a QA module with chain of thought
qa = dspy.ChainOfThought("question -> answer")
# Define a reward function that checks for one-word answers
def one_word_answer(args, pred):
return 1.0 if len(pred.answer.split()) == 1 else 0.0
# Create a refined module that tries up to 3 times
best_of_3 = dspy.BestOfN(module=qa, N=3, reward_fn=one_word_answer, threshold=1.0)
# Use the refined module
result = best_of_3(question="What is the capital of Belgium?").answer
# Returns: Brussels