internlm/SWE-Fixer-Train-110K huggingface dataset:
Repository: Flexget/Flexget

Issue:
[BUG] Flexget add to qbittorrent plugin will force recheck even if file is available
Qbittorrent allows you to buypass rechecking if the file exists. But it will sit there and verify every single file. 


Discussion:

Resolving patch:
diff --git a/flexget/plugins/clients/qbittorrent.py b/flexget/plugins/clients/qbittorrent.py
--- a/flexget/plugins/clients/qbittorrent.py
+++ b/flexget/plugins/clients/qbittorrent.py
@@ -47,6 +47,7 @@ class OutputQBitTorrent:
                     'maxdownspeed': {'type': 'integer'},
                     'fail_html': {'type': 'boolean'},
                     'add_paused': {'type': 'boolean'},
+                    'skip_check': {'type': 'boolean'},
                 },
                 'additionalProperties': False,
             },
@@ -182,6 +183,10 @@ def add_entries(self, task, config):
             if add_paused:
                 form_data['paused'] = 'true'
 
+            skip_check = entry.get('skip_check', config.get('skip_check'))
+            if skip_check:
+                form_data['skip_checking'] = 'true'
+
             maxupspeed = entry.get('maxupspeed', config.get('maxupspeed'))
             if maxupspeed:
                 form_data['upLimit'] = maxupspeed * 1024
@@ -202,6 +207,7 @@ def add_entries(self, task, config):
                 logger.info('Save path: {}', form_data.get('savepath'))
                 logger.info('Label: {}', form_data.get('label'))
                 logger.info('Paused: {}', form_data.get('paused', 'false'))
+                logger.info('Skip Hash Check: {}', form_data.get('skip_checking', 'false'))
                 if maxupspeed:
                     logger.info('Upload Speed Limit: {}', form_data.get('upLimit'))
                 if maxdownspeed:


Test patch:
Repository: Flexget/Flexget

Issue:
python 3.10 issue
I have an issue with python 3.10 and Flexget. Greenlet has been updated to 1.1.2 because the 1.0.0 version is not compatible with python 3.10. After that Flexget was installed successfully but I got the error message below.

- FlexGet version: 3.1.137
- Python version: 3.10
- Installation method: pip
- Using daemon (yes/no): no
- OS and version: Linux / Slackware / 5.14.8 kernel

Traceback (most recent call last):
  File "/usr/bin/flexget", line 5, in <module>
    from flexget import main
  File "/usr/lib/python3.10/site-packages/flexget/__init__.py", line 11, in <module>
    from flexget.manager import Manager  # noqa
  File "/usr/lib/python3.10/site-packages/flexget/manager.py", line 47, in <module>
    from flexget.ipc import IPCClient, IPCServer  # noqa
  File "/usr/lib/python3.10/site-packages/flexget/ipc.py", line 14, in <module>
    from flexget import terminal
  File "/usr/lib/python3.10/site-packages/flexget/terminal.py", line 7, in <module>
    from colorclass import Color, Windows
  File "/usr/lib/python3.10/site-packages/colorclass/__init__.py", line 11, in <module>
    from colorclass.codes import list_tags  # noqa
  File "/usr/lib/python3.10/site-packages/colorclass/codes.py", line 4, in <module>
    from collections import Mapping
ImportError: cannot import name 'Mapping' from 'collections' (/usr/lib/python3.10/collections/__init__.py)

Thanks!


Discussion:
https://flexget.com/InstallWizard/Linux
> ## Prerequisites
> ### Python
>
>Supported versions of Python:
>
>- 3.6
>- 3.7
>- 3.8
>- 3.9

Thanks for your response.

Do you have any plan in the near future to support python 3.10? Thanks!
We'd like to support it. We have to make sure our deps are all compatible first. I started work on removing the one that caused you this issue.
Thanks a lot! I appreciate it!

If you need help to test it. Please let me know.

Resolving patch:
diff --git a/setup.py b/setup.py
--- a/setup.py
+++ b/setup.py
@@ -61,6 +61,7 @@ def load_requirements(filename: str) -> List[str]:
         "Programming Language :: Python :: 3.7",
         "Programming Language :: Python :: 3.8",
         "Programming Language :: Python :: 3.9",
+        "Programming Language :: Python :: 3.10",
         "Programming Language :: Python :: Implementation :: CPython",
         "Programming Language :: Python :: Implementation :: PyPy",
     ],


Test patch:
Repository: Flexget/Flexget

Issue:
[imdb_list]  Unknown IMDB type entry received: tvspecial. Skipping
### Expected behaviour:

All entries from `imdb_list` input are accepted. Particularly, entries with type `tvspecial` are treated as movies.

### Actual behaviour:

`imdb_list` does not accept entries with type `tvspecial` and outputs an appropriate log message.
This appears to be a recent change on IMDB side as I'm almost certain I didn't observe this behavior a few days ago.

https://github.com/Flexget/Flexget/blob/develop/flexget/components/managed_lists/lists/imdb_list.py#L32
https://github.com/Flexget/Flexget/blob/develop/flexget/components/managed_lists/lists/imdb_list.py#L347-L357

### Steps to reproduce:

Add a "TV special" to IMDB watchlist, have a task that uses said IMDB list as input. In my case it syncs IMDB entries to Trakt.
For example:
https://www.imdb.com/title/tt16301388/
https://trakt.tv/movies/death-to-2021-2021

#### Config:
```yaml
  sync-imdb-to-trakt:
    imdb_list:
      login: '{? imdb.login ?}'
      cookies: '{? imdb.cookie ?}'
      list: '{? imdb.list ?}'
    accept_all: yes
    list_add:
      - trakt_list:
          account: '{? trakt.account ?}'
          list: '{? trakt.movies_watchlist ?}'
          type: movies
    disable: seen
```
  
#### Log:
```
2022-01-11 09:26:01 VERBOSE  imdb_list     sync-imdb-to-trakt Unknown IMDB type entry received: tvspecial. Skipping
```

### Additional information:

- FlexGet version: 3.2.7
- Python version: 3.7
- Installation method: docker
- Using daemon (yes/no): yes



Discussion:

Resolving patch:
diff --git a/flexget/components/managed_lists/lists/imdb_list.py b/flexget/components/managed_lists/lists/imdb_list.py
--- a/flexget/components/managed_lists/lists/imdb_list.py
+++ b/flexget/components/managed_lists/lists/imdb_list.py
@@ -29,7 +29,7 @@
 
 Base = db_schema.versioned_base('imdb_list', 0)
 
-MOVIE_TYPES = ['documentary', 'tvmovie', 'video', 'short', 'movie']
+MOVIE_TYPES = ['documentary', 'tvmovie', 'video', 'short', 'movie', 'tvspecial']
 SERIES_TYPES = ['tvseries', 'tvepisode', 'tvminiseries']
 OTHER_TYPES = ['videogame']
 


Test patch:
Repository: kevoreilly/CAPEv2

Issue:
Fix machine deadlock
Fix the problem that the machine may deadlock in abnormal state.


Discussion:
Thank you 

Resolving patch:
diff --git a/lib/cuckoo/common/abstracts.py b/lib/cuckoo/common/abstracts.py
--- a/lib/cuckoo/common/abstracts.py
+++ b/lib/cuckoo/common/abstracts.py
@@ -217,6 +217,11 @@ def _initialize(self, module_name):
                 log.warning("Configuration details about machine %s are missing: %s", machine_id.strip(), e)
                 continue
 
+    def initialize_check(self):
+        """When start machine run all checks.
+        """
+        self._initialize_check()
+
     def _initialize_check(self):
         """Runs checks against virtualization software when a machine manager
         is initialized.
@@ -382,6 +387,12 @@ def initialize(self, module):
         """
         super(LibVirtMachinery, self).initialize(module)
 
+    def initialize_check(self):
+        """When start machine run all checks.
+        @raise CuckooMachineError: if libvirt version is not supported.
+        """
+        self._initialize_check()
+
     def _initialize_check(self):
         """Runs all checks when a machine manager is initialized.
         @raise CuckooMachineError: if libvirt version is not supported.
diff --git a/lib/cuckoo/core/scheduler.py b/lib/cuckoo/core/scheduler.py
--- a/lib/cuckoo/core/scheduler.py
+++ b/lib/cuckoo/core/scheduler.py
@@ -321,6 +321,10 @@ def launch_analysis(self):
 
             # Mark the selected analysis machine in the database as started.
             guest_log = self.db.guest_start(self.task.id, self.machine.name, self.machine.label, machinery.__class__.__name__)
+            
+            # Try to check machinery status,
+            # Prevent some abnormal states of the machine from affecting the analysis
+            machinery.initialize_check()
             # Start the machine.
             machinery.start(self.machine.label)
 
@@ -349,13 +353,11 @@ def launch_analysis(self):
             succeeded = True
         except (CuckooMachineError, CuckooNetworkError) as e:
             if not unlocked:
-                machinery.release(self.machine.label)
                 machine_lock.release()
             log.error(str(e), extra={"task_id": self.task.id}, exc_info=True)
             dead_machine = True
         except CuckooGuestError as e:
             if not unlocked:
-                machinery.release(self.machine.label)
                 machine_lock.release()
             log.error(str(e), extra={"task_id": self.task.id}, exc_info=True)
         finally:


Test patch:
Repository: kevoreilly/CAPEv2

Issue:
CAPA rule path does not exist
# Expected Behavior

CAPA is able to load its rules.

# Current Behavior

CAPA is unable to load rules. Splits the file path into a list and loops through each character. Enumerates the / directory then moves to the next character o at which point it errors as the path does not exist:
OSError: rule path o does not exist or cannot be accessed

# Failure Information (for bugs)

The argument capa.main.RULES_PATH_DEFAULT_STRING passed to get_rules is a string, but should be a list of file paths:
https://github.com/kevoreilly/CAPEv2/blob/d9124712cabe5bf9a7a3a98da93cbdbd37a53da3/lib/cuckoo/common/integrations/capa.py#L44

## Steps to Reproduce

Enable CAPA in the config and run web server.

## Context

commit 1bd0bf62055fc3741ea19a85d510d54052dbf431
Ubuntu 20.04.04 LTS

## Failure Logs

  File "/opt/CAPEv2/web/../lib/cuckoo/common/integrations/parse_pe.py", line 74, in <module>
    from lib.cuckoo.common.integrations.capa import HAVE_FLARE_CAPA, flare_capa_details
  File "/opt/CAPEv2/web/../lib/cuckoo/common/integrations/capa.py", line 48, in <module>
    rules = capa.main.get_rules(capa.main.RULES_PATH_DEFAULT_STRING, disable_progress=True)
  File "/usr/local/lib/python3.8/dist-packages/capa/main.py", line 580, in get_rules
    raise IOError("rule path %s does not exist or cannot be accessed" % rule_path)
OSError: rule path o does not exist or cannot be accessed


Discussion:

Resolving patch:
diff --git a/lib/cuckoo/common/integrations/capa.py b/lib/cuckoo/common/integrations/capa.py
--- a/lib/cuckoo/common/integrations/capa.py
+++ b/lib/cuckoo/common/integrations/capa.py
@@ -40,8 +40,10 @@
             rules_path = os.path.join(CUCKOO_ROOT, "data", "capa-rules")
             if os.path.exists(rules_path):
                 capa.main.RULES_PATH_DEFAULT_STRING = os.path.join(CUCKOO_ROOT, "data", "capa-rules")
+                rules_list = []
+                rules_list.append(rules_path)
                 try:
-                    rules = capa.main.get_rules(capa.main.RULES_PATH_DEFAULT_STRING, disable_progress=True)
+                    rules = capa.main.get_rules(rules_list, disable_progress=True)
                     rules = capa.rules.RuleSet(rules)
                     HAVE_FLARE_CAPA = True
                 except InvalidRuleWithPath:


Test patch:
Repository: open-mmlab/mmsegmentation

Issue:
FileNotFoundError: [Errno 2] No such file or directory: 'VOCdevkit/VOCaug/dataset/trainval.txt'
https://github.com/open-mmlab/mmsegmentation/blob/1c3f54765981ba352d4cf6582edb1c8915e51d71/tools/convert_datasets/voc_aug.py#L53

Directory `VOCdevkit/VOCaug/dataset` does not exist `trainval.txt`, `trainval.txt` is the merger of `train.txt` and `val.txt`?


Discussion:

Resolving patch:
diff --git a/tools/convert_datasets/voc_aug.py b/tools/convert_datasets/voc_aug.py
--- a/tools/convert_datasets/voc_aug.py
+++ b/tools/convert_datasets/voc_aug.py
@@ -50,8 +50,12 @@ def main():
         list(mmcv.scandir(in_dir, suffix='.mat')),
         nproc=nproc)
 
-    with open(osp.join(aug_path, 'dataset', 'trainval.txt')) as f:
-        full_aug_list = [line.strip() for line in f]
+    full_aug_list = []
+    with open(osp.join(aug_path, 'dataset', 'train.txt')) as f:
+        full_aug_list += [line.strip() for line in f]
+    with open(osp.join(aug_path, 'dataset', 'val.txt')) as f:
+        full_aug_list += [line.strip() for line in f]
+
     with open(
             osp.join(devkit_path, 'VOC2012/ImageSets/Segmentation',
                      'train.txt')) as f:


Test patch:
Repository: open-mmlab/mmsegmentation

Issue:
关于新增的RandomRotate
好像pipeline的__init__.py里面忘记导入这个变换了，导致现在无法使用。


Discussion:
Thank you for your reminder, we will fix it.

Resolving patch:
diff --git a/mmseg/datasets/pipelines/__init__.py b/mmseg/datasets/pipelines/__init__.py
--- a/mmseg/datasets/pipelines/__init__.py
+++ b/mmseg/datasets/pipelines/__init__.py
@@ -4,11 +4,13 @@
 from .loading import LoadAnnotations, LoadImageFromFile
 from .test_time_aug import MultiScaleFlipAug
 from .transforms import (Normalize, Pad, PhotoMetricDistortion, RandomCrop,
-                         RandomFlip, Resize, SegRescale)
+                         RandomFlip, RandomRotate, Rerange, Resize, RGB2Gray,
+                         SegRescale)
 
 __all__ = [
     'Compose', 'to_tensor', 'ToTensor', 'ImageToTensor', 'ToDataContainer',
     'Transpose', 'Collect', 'LoadAnnotations', 'LoadImageFromFile',
     'MultiScaleFlipAug', 'Resize', 'RandomFlip', 'Pad', 'RandomCrop',
-    'Normalize', 'SegRescale', 'PhotoMetricDistortion'
+    'Normalize', 'SegRescale', 'PhotoMetricDistortion', 'RandomRotate',
+    'Rerange', 'RGB2Gray'
 ]


Test patch:
Repository: open-mmlab/mmsegmentation

Issue:
an unexpected keyword argument 'drop_out_ratio' when using config file ocrnet_r50-d8.py
**Describe the bug**

It seems that there is a small error in the config file: 
https://github.com/open-mmlab/mmsegmentation/blob/381eacb9a5e0e8eb475e456845f1d4c55f3c0339/configs/_base_/models/ocrnet_r50-d8.py#L26
and
https://github.com/open-mmlab/mmsegmentation/blob/381eacb9a5e0e8eb475e456845f1d4c55f3c0339/configs/_base_/models/ocrnet_r50-d8.py#L38

**Error traceback**

```
Traceback (most recent call last):
  File "./tools/train.py", line 161, in <module>
    main()
  File "./tools/train.py", line 131, in main
    cfg.model, train_cfg=cfg.train_cfg, test_cfg=cfg.test_cfg)
  File "/root/userfolder/mmsegmentation/mmseg/models/builder.py", line 56, in build_segmentor
    return build(cfg, SEGMENTORS, dict(train_cfg=train_cfg, test_cfg=test_cfg))
  File "/root/userfolder/mmsegmentation/mmseg/models/builder.py", line 31, in build
    return build_from_cfg(cfg, registry, default_args)
  File "/root/userfolder/anaconda3/envs/open-mmlab/lib/python3.7/site-packages/mmcv/utils/registry.py", line 171, in build_from_cfg
    return obj_cls(**args)
  File "/root/userfolder/mmsegmentation/mmseg/models/segmentors/cascade_encoder_decoder.py", line 36, in __init__
    pretrained=pretrained)
  File "/root/userfolder/mmsegmentation/mmseg/models/segmentors/encoder_decoder.py", line 34, in __init__
    self._init_decode_head(decode_head)
  File "/root/userfolder/mmsegmentation/mmseg/models/segmentors/cascade_encoder_decoder.py", line 44, in _init_decode_head
    self.decode_head.append(builder.build_head(decode_head[i]))
  File "/root/userfolder/mmsegmentation/mmseg/models/builder.py", line 46, in build_head
    return build(cfg, HEADS)
  File "/root/userfolder/mmsegmentation/mmseg/models/builder.py", line 31, in build
    return build_from_cfg(cfg, registry, default_args)
  File "/root/userfolder/anaconda3/envs/open-mmlab/lib/python3.7/site-packages/mmcv/utils/registry.py", line 171, in build_from_cfg
    return obj_cls(**args)
  File "/root/userfolder/mmsegmentation/mmseg/models/decode_heads/fcn_head.py", line 31, in __init__
    super(FCNHead, self).__init__(**kwargs)
TypeError: __init__() got an unexpected keyword argument 'drop_out_ratio'
```

**Bug fix**
change the keyword `drop_out_ratio=0.1` to `dropout_ratio=0.1` will fix this.




Discussion:

Resolving patch:
diff --git a/configs/_base_/models/ocrnet_r50-d8.py b/configs/_base_/models/ocrnet_r50-d8.py
--- a/configs/_base_/models/ocrnet_r50-d8.py
+++ b/configs/_base_/models/ocrnet_r50-d8.py
@@ -23,7 +23,7 @@
             channels=256,
             num_convs=1,
             concat_input=False,
-            drop_out_ratio=0.1,
+            dropout_ratio=0.1,
             num_classes=19,
             norm_cfg=norm_cfg,
             align_corners=False,
@@ -35,7 +35,7 @@
             in_index=3,
             channels=512,
             ocr_channels=256,
-            drop_out_ratio=0.1,
+            dropout_ratio=0.1,
             num_classes=19,
             norm_cfg=norm_cfg,
             align_corners=False,


Test patch:
Repository: open-mmlab/mmsegmentation

Issue:
error in train.py
error in line 134 in mmsegmentation/tools/train.py 
model.init_weights() is error 
model.init_weight() is ok



Discussion:



> error in line 134 in mmsegmentation/tools/train.py
> model.init_weights() is error
> model.init_weight() is ok

Hi @JoyLuo 
The `init_weights` is inherited from [`BaseModule`](https://github.com/open-mmlab/mmcv/blob/master/mmcv/runner/base_module.py#L39) in `MMCV`.
> > error in line 134 in mmsegmentation/tools/train.py
> > model.init_weights() is error
> > model.init_weight() is ok
> 
> Hi @JoyLuo
> The `init_weights` is inherited from [`BaseModule`](https://github.com/open-mmlab/mmcv/blob/master/mmcv/runner/base_module.py#L39) in `MMCV`.

BaseModule use init_weight in V1.3.1
please revise the readme to install mmcv



Hi @JoyLuo 
Thanks for your kind reminder.
Appreciate it a lot.

Resolving patch:
diff --git a/mmseg/__init__.py b/mmseg/__init__.py
--- a/mmseg/__init__.py
+++ b/mmseg/__init__.py
@@ -2,7 +2,7 @@
 
 from .version import __version__, version_info
 
-MMCV_MIN = '1.3.1'
+MMCV_MIN = '1.3.7'
 MMCV_MAX = '1.4.0'
 
 


Test patch:
Repository: open-mmlab/mmsegmentation

Issue:
STDC training on fp16: Input type (torch.cuda.FloatTensor) and weight type (torch.cuda.HalfTensor) should be the same
在stdc1_512x1024_80k_cityscapes.py中添加了
```
optimizer_config = dict(type='Fp16OptimizerHook', loss_scale='dynamic')
fp16 = dict()
```
后再次进行训练则出现了以下报错
![avatar](https://img-blog.csdnimg.cn/97204a9e0c434537b3ee297a5d589968.png)

请问该如何修改




Discussion:

Resolving patch:
diff --git a/mmseg/models/decode_heads/stdc_head.py b/mmseg/models/decode_heads/stdc_head.py
--- a/mmseg/models/decode_heads/stdc_head.py
+++ b/mmseg/models/decode_heads/stdc_head.py
@@ -37,7 +37,7 @@ def losses(self, seg_logit, seg_label):
         # parameters. However, it is a constant in original repo and other
         # codebase because it would not be added into computation graph
         # after threshold operation.
-        seg_label = seg_label.float()
+        seg_label = seg_label.to(self.laplacian_kernel)
         boundary_targets = F.conv2d(
             seg_label, self.laplacian_kernel, padding=1)
         boundary_targets = boundary_targets.clamp(min=0)


Test patch:
Repository: openai/evals

Issue:
Registry path CLI option for oaievalset
### Describe the feature or improvement you're requesting

It should take an `--registry_path` like `oaieval` does

### Additional context

Useful when using as a library, to run eval sets stored in my own project outside this repo.


Discussion:
Looking at the source `oaievalset` passes unknown arguments through to `oaieval`. But I think it needs to add that path to its own registry before that so it can find the evalset.

Resolving patch:
diff --git a/evals/cli/oaievalset.py b/evals/cli/oaievalset.py
--- a/evals/cli/oaievalset.py
+++ b/evals/cli/oaievalset.py
@@ -48,6 +48,13 @@ def get_parser() -> argparse.ArgumentParser:
     parser = argparse.ArgumentParser(description="Run eval sets through the API")
     parser.add_argument("model", type=str, help="Name of a completion model.")
     parser.add_argument("eval_set", type=str, help="Name of eval set. See registry.")
+    parser.add_argument(
+        "--registry_path",
+        type=str,
+        default=None,
+        action="append",
+        help="Path to the registry",
+    )
     parser.add_argument(
         "--resume",
         action=argparse.BooleanOptionalAction,
@@ -66,6 +73,7 @@ def get_parser() -> argparse.ArgumentParser:
 class OaiEvalSetArguments(argparse.Namespace):
     model: str
     eval_set: str
+    registry_path: Optional[str]
     resume: bool
     exit_on_error: bool
 
@@ -77,6 +85,9 @@ def run(
     run_command: str = "oaieval",
 ) -> None:
     registry = registry or Registry()
+    if args.registry_path:
+        registry.add_registry_paths(args.registry_path)
+
     commands: list[Task] = []
     eval_set = registry.get_eval_set(args.eval_set) if args.eval_set else None
     if eval_set:
@@ -85,6 +96,9 @@ def run(
                 logger.debug("The eval #%d in eval_set is not valid", index)
 
             command = [run_command, args.model, eval.key] + unknown_args
+            if args.registry_path:
+                command.append("--registry_path")
+                command = command + args.registry_path
             if command in commands:
                 continue
             commands.append(command)


Test patch:
Repository: openai/evals

Issue:
Getting started example doesn't work - oieval attempts to update a None type object
### Describe the bug

When running the example provided in https://github.com/openai/evals/blob/main/docs/run-evals.md: `oaieval gpt-3.5-turbo test-match`, the following error is encountered out of the box:
```
 File "/Users/juliewang/Documents/evals/evals/cli/oaieval.py", line 167, in run
    eval_spec.args.update(extra_eval_params)
    ^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'update'
```

This is due to this line: https://github.com/openai/evals/blob/main/evals/cli/oaieval.py#L158. The `args` field of `EvalSpec` is optional: https://github.com/openai/evals/blob/0dc0ba455194f5c9c4566ce415a2b2714f56e2db/evals/base.py#L58, and in the `test-match` case, `eval_spec.args` is `None`. 


### To Reproduce

1. Run  `oaieval gpt-3.5-turbo test-match`

### Code snippets

_No response_

### OS

macOS

### Python version

Python 3.12.2

### Library version

openai-evals commit b5853eb4fed5001188671e87b20d8f8261b57e63
Getting started example doesn't work - oieval attempts to update a None type object
### Describe the bug

When running the example provided in https://github.com/openai/evals/blob/main/docs/run-evals.md: `oaieval gpt-3.5-turbo test-match`, the following error is encountered out of the box:
```
 File "/Users/juliewang/Documents/evals/evals/cli/oaieval.py", line 167, in run
    eval_spec.args.update(extra_eval_params)
    ^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'update'
```

This is due to this line: https://github.com/openai/evals/blob/main/evals/cli/oaieval.py#L158. The `args` field of `EvalSpec` is optional: https://github.com/openai/evals/blob/0dc0ba455194f5c9c4566ce415a2b2714f56e2db/evals/base.py#L58, and in the `test-match` case, `eval_spec.args` is `None`. 


### To Reproduce

1. Run  `oaieval gpt-3.5-turbo test-match`

### Code snippets

_No response_

### OS

macOS

### Python version

Python 3.12.2

### Library version

openai-evals commit b5853eb4fed5001188671e87b20d8f8261b57e63


Discussion:

Resolving patch:
diff --git a/evals/cli/oaieval.py b/evals/cli/oaieval.py
--- a/evals/cli/oaieval.py
+++ b/evals/cli/oaieval.py
@@ -155,7 +155,11 @@ def to_number(x: str) -> Union[int, float, str]:
         return {k: to_number(v) for k, v in str_dict.items()}
 
     extra_eval_params = parse_extra_eval_params(args.extra_eval_params)
-    eval_spec.args.update(extra_eval_params)
+
+    if eval_spec.args is None:
+        eval_spec.args = extra_eval_params
+    else:
+        eval_spec.args.update(extra_eval_params)
 
     # If the user provided an argument to --completion_args, parse it into a dict here, to be passed to the completion_fn creation **kwargs
     completion_args = args.completion_args.split(",")


Test patch: