SuperAPI AI Directory

dspy-better-together

Agents & models

View repository

Updated 10-16 02:38

About this skill

DSPy BetterTogether

Goal

Sequence prompt and weight optimizers, evaluate intermediate programs, and return the best candidate.

Prerequisites

  • Use DSPy 3.2.1 or later in the stable 3.2.x series.
  • Assign an LM directly to every predictor with student.set_lm(lm).
  • Keep a validation set, or allow BetterTogether to hold out part of the trainset.
  • Confirm the LM provider supports fine-tuning before including BootstrapFinetune.

Basic Pattern

import dspy

lm = dspy.LM("openai/gpt-4o-mini") dspy.configure(lm=lm)

student = dspy.ChainOfThought("question -> answer") student.set_lm(lm)

def metric(example, pred, trace=None): return float(example.answer.lower() == pred.answer.lower())

optimizer = dspy.BetterTogether( metric=metric, p=dspy.GEPA( metric=lambda gold, pred, trace=None, pred_name=None, pred_trace=None: dspy.Prediction(score=metric(gold, pred), feedback="Check answer correctness."), reflection_lm=dspy.LM("openai/gpt-4o"), auto="light", ), w=dspy.BootstrapFinetune(metric=metric), )

compiled = optimizer.compile( student, trainset=trainset, valset=valset, strategy="p -> w -> p", )


## Strategy Choices

| Strategy | Use it when |
|----------|-------------|
| `"p -> w"` | Start with a simple prompt-then-weight pass |
| `"p -> w -> p"` | Re-optimize prompts after fine-tuning |
| `"w -> p"` | Fine-tuning data is already strong |
| Custom chains | Comparing prompt optimizers or conducting controlled experiments |

Optimizer names come from constructor keyword arguments. For example, `mipro=...` and `gepa=...` make `"mipro -> gepa"` valid.

## Per-Optimizer Compile Arguments

Pass optimizer-specific arguments through `optimizer_compile_args`:

```python
compiled = optimizer.compile(
    student,
    trainset=trainset,
    valset=valset,
    strategy="p -> w",
    optimizer_compile_args={
        "p": {"max_metric_calls": 150},
    },
)

Do not pass student inside optimizer_compile_args; BetterTogether manages the current program.

Inspect Results

The returned program exposes:

  • candidate_programs: evaluated candidates with score and strategy
  • flag_compilation_error_occurred: whether a step failed before completion

Related Skills

Official Documentation