Optimization Example

This example shows how to optimize BRAID modules for better performance.

Basic Optimization

import dspy
from braid import BraidReasoning, BraidOptimizer

# Configure DSPy
lm = dspy.OpenAI(model="gpt-4")
dspy.configure(lm=lm)

# Create module
braid = BraidReasoning()

# Training examples
trainset = [
    {"problem": "Problem 1", "answer": "Answer 1"},
    {"problem": "Problem 2", "answer": "Answer 2"},
]

# Create optimizer
optimizer = BraidOptimizer()

# Optimize
optimized_braid = optimizer.optimize(braid, trainset)

# Evaluate
testset = [{"problem": "Test problem", "answer": "Test answer"}]
metrics = optimizer.evaluate(optimized_braid, testset)
print(metrics)

Using with Base Optimizer

from dspy.teleprompt import MIPROv2
from braid import BraidReasoning, BraidOptimizer

# Create base optimizer
base_optimizer = MIPROv2()

# Create BRAID optimizer
braid_optimizer = BraidOptimizer(base_optimizer=base_optimizer)

# Optimize
optimized_braid = braid_optimizer.optimize(braid, trainset)

Custom Metrics

from braid import BraidReasoning, BraidOptimizer

def custom_metric(result, expected_answer):
    score = 0.0
    if result.answer and expected_answer:
        if expected_answer.lower() in result.answer.lower():
            score += 0.5
        if result.parsed_grd:
            score += 0.3
        if len(result.reasoning_steps) >= 2:
            score += 0.2
    return score

optimizer = BraidOptimizer()
optimized = optimizer.optimize(braid, trainset, metric=custom_metric)