Examples

This section provides practical examples of using BRAID-DSPy.

Basic Usage

Learn how to use BRAID-DSPy for basic reasoning tasks.

Basic Usage

Simple Problem Solving

import dspy
from braid import BraidReasoning

# Configure DSPy
lm = dspy.OpenAI(model="gpt-4", api_key="your-api-key")
dspy.configure(lm=lm)

# Create BRAID module
braid = BraidReasoning()

# Solve a problem
result = braid(problem="If a train travels 120 km in 2 hours, what is its speed?")

print(f"Answer: {result.answer}")
print(f"\nGRD:\n{result.grd}")
print(f"\nReasoning Steps:")
for step in result.reasoning_steps:
    print(f"  {step['step_number']}. {step['label']}: {step['result']}")

Using Pre-generated GRD

from braid import BraidReasoning

braid = BraidReasoning()

pre_generated_grd = """```mermaid
flowchart TD
    Start[Problem Analysis] --> Identify[Identify values]
    Identify --> Calculate[Calculate]
    Calculate --> Answer[Final Answer]
```"""

result = braid(problem="Your problem", grd=pre_generated_grd)
print(result.answer)

Custom Configuration

from braid import BraidReasoning

braid = BraidReasoning(
    use_generator=True,
    max_execution_steps=15,
    validate_grd=True
)

GSM8K Benchmark

See how BRAID-DSPy performs on GSM8K math problems.

GSM8K Benchmark Example

This example shows how to use BRAID-DSPy with GSM8K grade school math problems.

import dspy
from braid import BraidReasoning

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

# Sample GSM8K problems
gsm8k_examples = [
    {
        "problem": "Natalia sold clips to 48 of her friends in April, and then she sold half as many clips in May. How many clips did Natalia sell altogether in April and May?",
        "answer": "72"
    },
    {
        "problem": "A train travels 120 km in 2 hours. What is its speed in km/h?",
        "answer": "60"
    }
]

# Create BRAID module
braid = BraidReasoning(use_generator=True)

# Evaluate on examples
for example in gsm8k_examples:
    result = braid(problem=example["problem"])
    print(f"Problem: {example['problem']}")
    print(f"Expected: {example['answer']}")
    print(f"Got: {result.answer}")
    print(f"Valid: {result.valid}\n")

Optimization

Learn how to optimize BRAID modules for better performance.

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)