Repository: openai/evals
Issue: Unable to modify match_fn from within modelgraded eval .yaml file
Root cause: Configuration Error

### Describe the bug

Users are unable to modify the `match_fn` to be used using kwargs from within a modelgraded eval .yaml file.

The bug occur because within `evals\evals\elsuite\modelgraded\classify.py`:
1. `ModelBasedClassify` does not take in a `match_fn` kwarg.
```
class ModelBasedClassify(evals.Eval):
    def __init__(
        self,
        modelgraded_spec: str,
        *args,
        modelgraded_spec_args: Optional[dict[str, dict[str, str]]] = None,
        sample_kwargs: Optional[dict[str, Any]] = None,
        eval_kwargs: Optional[dict[str, Any]] = None,
        multicomp_n: Union[int, str] = 1,
        eval_type: Optional[str] = None,
        metaeval: bool = False,
        **kwargs,
    ):
        super().__init__(*args, **kwargs)
        # treat last completion_fn as eval_completion_fn
        self.eval_completion_fn = self.completion_fns[-1]
        if len(self.completion_fns) > 1:
            self.completion_fns = self.completion_fns[:-1]
        n_models = len(self.completion_fns)
        self.sample_kwargs = {"max_tokens": 1024}
        self.sample_kwargs.update(sample_kwargs or {})
        self.eval_kwargs = {"max_tokens": 1024}
        self.eval_kwargs.update(eval_kwargs or {})
        self.metaeval = metaeval
        self.modelgraded_spec_args = modelgraded_spec_args or {}
        self.eval_type = eval_type
        if multicomp_n == "from_models":
            assert n_models > 1
            self.multicomp_n = n_models
        else:
            assert isinstance(multicomp_n, int)
            self.multicomp_n = multicomp_n
        if len(self.completion_fns) > 1:
            assert self.multicomp_n == n_models

        self.mg = self.registry.get_modelgraded_spec(modelgraded_spec)
```

2. Within `eval_sample()`, `classify` is not called with a `match_fn` kwarg nor with `**kwargs`.
```


choice, info = classify(
            mg=self.mg,
            completion_fn=self.eval_completion_fn,
            completion_kwargs=self.eval_kwargs,
            eval_type=self.eval_type,
            n=self.multicomp_n,
            format_kwargs={**completions, **test_sample, **self.modelgraded_spec_args},
        )
```

Within `evals\evals\elsuite\modelgraded\classify_utils.py`, `classify()` would always revert to the default string "starts_or_endswith".
```
def classify(
    mg: ModelGradedSpec,
    completion_fn: CompletionFn,
    completion_kwargs: Optional[dict[str, Any]] = None,
    format_kwargs: Optional[dict[str, Any]] = None,
    eval_type: Optional[str] = None,
    n: Optional[int] = None,
    match_fn: str = "starts_or_endswith",
) -> str:
```

Any attempt of having a assigning a match_fn through a kwarg in the .yaml file would have no effect on the `classify()` call.

### To Reproduce

1. Add `match_fn: exact` to the args of one of the modelgraded test evals found in `evals/registry/evals/test-modelgraded.yaml`.
2. Run the eval.
3. The eval would still be using the default string "starts_or_endswith".

### Code snippets

_No response_

### OS

Linux

### Python version

Python v3.9.5

### Library version

openai-evals v0.27.2