We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
[Bug] Config composition error with latest version of OmegaConf
# 🐛 Bug
## Description

When using OmegaConf at commit 2dd15f9 (first commit where this problem occurs), there are multiple Hydra tests failures, for instance:

```
pytest "tests/test_basic_launcher.py::TestBasicLauncher::test_sweep_1_job[basic-overrides0]"
(...)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = __INVALID__, value = None

    def validate_and_convert(self, value: Any) -> Any:
        """
        Validates input and converts to canonical form
        :param value: input value
        :return: converted value ("100" may be converted to 100 for example)
        """
        if value is None:
            if self._is_optional():
                return None
>           raise ValidationError("Non optional field cannot be assigned None")
E           hydra.errors.ConfigCompositionException

../omegaconf/omegaconf/nodes.py:55: ConfigCompositionException
```

## Checklist
- [X] I checked on the latest version of Hydra
- [X] I created a minimal repro (See [this](https://stackoverflow.com/help/minimal-reproducible-example) for tips).

## To reproduce

Use master branch of Hydra with OmegaConf's commit 2dd15f9

## Additional context

This might actually be an OmegaConf bug (I'm not sure).

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `hydra/conf/__init__.py`
Content:
```
1 # Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved
2 from dataclasses import dataclass, field
3 from typing import Any, Dict, List, Optional
4 
5 from omegaconf import MISSING
6 
7 from hydra.core.config_store import ConfigStore
8 
9 
10 @dataclass
11 class HelpConf:
12     app_name: str = MISSING
13     header: str = MISSING
14     footer: str = MISSING
15     template: str = MISSING
16 
17 
18 @dataclass
19 class HydraHelpConf:
20     hydra_help: str = MISSING
21     template: str = MISSING
22 
23 
24 @dataclass
25 class RunDir:
26     dir: str = MISSING
27 
28 
29 @dataclass
30 class SweepDir:
31     dir: str = MISSING
32     subdir: str = MISSING
33 
34 
35 @dataclass
36 class OverridesConf:
37     # Overrides for the hydra configuration
38     hydra: List[str] = field(default_factory=lambda: [])
39     # Overrides for the task configuration
40     task: List[str] = field(default_factory=lambda: [])
41 
42 
43 # job runtime information will be populated here
44 @dataclass
45 class JobConf:
46     # Job name, populated automatically unless specified by the user (in config or cli)
47     name: str = MISSING
48 
49     # Populated automatically by Hydra.
50     # Concatenation of job overrides that can be used as a part
51     # of the directory name.
52     # This can be configured via hydra.job.config.override_dirname
53     override_dirname: str = MISSING
54 
55     # Job ID in underlying scheduling system
56     id: str = MISSING
57 
58     # Job number if job is a part of a sweep
59     num: int = MISSING
60 
61     # The config name used by the job
62     config_name: Optional[str] = MISSING
63 
64     # Environment variables to set remotely
65     env_set: Dict[str, str] = field(default_factory=dict)
66     # Environment variables to copy from the launching machine
67     env_copy: List[str] = field(default_factory=list)
68 
69     # Job config
70     @dataclass
71     class JobConfig:
72         @dataclass
73         # configuration for the ${hydra.job.override_dirname} runtime variable
74         class OverrideDirname:
75             kv_sep: str = "="
76             item_sep: str = ","
77             exclude_keys: List[str] = field(default_factory=list)
78 
79         override_dirname: OverrideDirname = OverrideDirname()
80 
81     config: JobConfig = JobConfig()
82 
83 
84 @dataclass
85 class ConfigSourceInfo:
86     path: str
87     schema: str
88     provider: str
89 
90 
91 @dataclass
92 class RuntimeConf:
93     version: str = MISSING
94     cwd: str = MISSING
95     config_sources: List[ConfigSourceInfo] = MISSING
96 
97     # Composition choices dictionary
98     choices: Dict[str, str] = field(default_factory=lambda: {})
99 
100 
101 @dataclass
102 class HydraConf:
103     defaults: List[Any] = field(
104         default_factory=lambda: [
105             {"output": "default"},
106             {"launcher": "basic"},
107             {"sweeper": "basic"},
108             {"help": "default"},
109             {"hydra_help": "default"},
110             {"hydra_logging": "default"},
111             {"job_logging": "default"},
112             {"callbacks": None},
113             # env specific overrides
114             {"env": "default"},
115         ]
116     )
117 
118     # Elements to append to the config search path.
119     # Note: This can only be configured in the primary config.
120     searchpath: List[str] = field(default_factory=list)
121 
122     # Normal run output configuration
123     run: RunDir = RunDir()
124     # Multi-run output configuration
125     sweep: SweepDir = SweepDir()
126     # Logging configuration for Hydra
127     hydra_logging: Any = MISSING
128     # Logging configuration for the job
129     job_logging: Any = MISSING
130 
131     # Sweeper configuration
132     sweeper: Any = MISSING
133     # Launcher configuration
134     launcher: Any = MISSING
135     # Callbacks configuration
136     callbacks: Dict[str, Any] = field(default_factory=dict)
137 
138     # Program Help template
139     help: HelpConf = HelpConf()
140     # Hydra's Help template
141     hydra_help: HydraHelpConf = HydraHelpConf()
142 
143     # Output directory for produced configuration files and overrides.
144     # E.g., hydra.yaml, overrides.yaml will go here. Useful for debugging
145     # and extra context when looking at past runs.
146     # Setting to None will prevent the creation of the output subdir.
147     output_subdir: Optional[str] = ".hydra"
148 
149     # Those lists will contain runtime overrides
150     overrides: OverridesConf = OverridesConf()
151 
152     job: JobConf = JobConf()
153 
154     # populated at runtime
155     runtime: RuntimeConf = RuntimeConf()
156 
157     # Can be a boolean, string or a list of strings
158     # If a boolean, setting to true will set the log level for the root logger to debug
159     # If a string, it's interpreted as a the list [string]
160     # If a list, each element is interpreted as a logger to have logging level set to debug.
161     # Typical command lines to manipulate hydra.verbose:
162     # hydra.verbose=true
163     # hydra.verbose=[hydra,__main__]
164     # TODO: good use case for Union support in OmegaConf
165     verbose: Any = False
166 
167 
168 cs = ConfigStore.instance()
169 
170 cs.store(
171     group="hydra",
172     name="config",
173     node=HydraConf(),
174     provider="hydra",
175 )
176
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/hydra/conf/__init__.py b/hydra/conf/__init__.py
--- a/hydra/conf/__init__.py
+++ b/hydra/conf/__init__.py
@@ -95,7 +95,8 @@
     config_sources: List[ConfigSourceInfo] = MISSING
 
     # Composition choices dictionary
-    choices: Dict[str, str] = field(default_factory=lambda: {})
+    # Ideally, the value type would be Union[str, List[str], None]
+    choices: Dict[str, Any] = field(default_factory=lambda: {})
 
 
 @dataclass

{"golden_diff": "diff --git a/hydra/conf/__init__.py b/hydra/conf/__init__.py\n--- a/hydra/conf/__init__.py\n+++ b/hydra/conf/__init__.py\n@@ -95,7 +95,8 @@\n     config_sources: List[ConfigSourceInfo] = MISSING\n \n     # Composition choices dictionary\n-    choices: Dict[str, str] = field(default_factory=lambda: {})\n+    # Ideally, the value type would be Union[str, List[str], None]\n+    choices: Dict[str, Any] = field(default_factory=lambda: {})\n \n \n @dataclass\n", "issue": "[Bug] Config composition error with latest version of OmegaConf\n# \ud83d\udc1b Bug\r\n## Description\r\n\r\nWhen using OmegaConf at commit 2dd15f9 (first commit where this problem occurs), there are multiple Hydra tests failures, for instance:\r\n\r\n```\r\npytest \"tests/test_basic_launcher.py::TestBasicLauncher::test_sweep_1_job[basic-overrides0]\"\r\n(...)\r\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\r\n\r\nself = __INVALID__, value = None\r\n\r\n    def validate_and_convert(self, value: Any) -> Any:\r\n        \"\"\"\r\n        Validates input and converts to canonical form\r\n        :param value: input value\r\n        :return: converted value (\"100\" may be converted to 100 for example)\r\n        \"\"\"\r\n        if value is None:\r\n            if self._is_optional():\r\n                return None\r\n>           raise ValidationError(\"Non optional field cannot be assigned None\")\r\nE           hydra.errors.ConfigCompositionException\r\n\r\n../omegaconf/omegaconf/nodes.py:55: ConfigCompositionException\r\n```\r\n\r\n## Checklist\r\n- [X] I checked on the latest version of Hydra\r\n- [X] I created a minimal repro (See [this](https://stackoverflow.com/help/minimal-reproducible-example) for tips).\r\n\r\n## To reproduce\r\n\r\nUse master branch of Hydra with OmegaConf's commit 2dd15f9\r\n\r\n## Additional context\r\n\r\nThis might actually be an OmegaConf bug (I'm not sure).\n", "before_files": [{"content": "# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved\nfrom dataclasses import dataclass, field\nfrom typing import Any, Dict, List, Optional\n\nfrom omegaconf import MISSING\n\nfrom hydra.core.config_store import ConfigStore\n\n\n@dataclass\nclass HelpConf:\n    app_name: str = MISSING\n    header: str = MISSING\n    footer: str = MISSING\n    template: str = MISSING\n\n\n@dataclass\nclass HydraHelpConf:\n    hydra_help: str = MISSING\n    template: str = MISSING\n\n\n@dataclass\nclass RunDir:\n    dir: str = MISSING\n\n\n@dataclass\nclass SweepDir:\n    dir: str = MISSING\n    subdir: str = MISSING\n\n\n@dataclass\nclass OverridesConf:\n    # Overrides for the hydra configuration\n    hydra: List[str] = field(default_factory=lambda: [])\n    # Overrides for the task configuration\n    task: List[str] = field(default_factory=lambda: [])\n\n\n# job runtime information will be populated here\n@dataclass\nclass JobConf:\n    # Job name, populated automatically unless specified by the user (in config or cli)\n    name: str = MISSING\n\n    # Populated automatically by Hydra.\n    # Concatenation of job overrides that can be used as a part\n    # of the directory name.\n    # This can be configured via hydra.job.config.override_dirname\n    override_dirname: str = MISSING\n\n    # Job ID in underlying scheduling system\n    id: str = MISSING\n\n    # Job number if job is a part of a sweep\n    num: int = MISSING\n\n    # The config name used by the job\n    config_name: Optional[str] = MISSING\n\n    # Environment variables to set remotely\n    env_set: Dict[str, str] = field(default_factory=dict)\n    # Environment variables to copy from the launching machine\n    env_copy: List[str] = field(default_factory=list)\n\n    # Job config\n    @dataclass\n    class JobConfig:\n        @dataclass\n        # configuration for the ${hydra.job.override_dirname} runtime variable\n        class OverrideDirname:\n            kv_sep: str = \"=\"\n            item_sep: str = \",\"\n            exclude_keys: List[str] = field(default_factory=list)\n\n        override_dirname: OverrideDirname = OverrideDirname()\n\n    config: JobConfig = JobConfig()\n\n\n@dataclass\nclass ConfigSourceInfo:\n    path: str\n    schema: str\n    provider: str\n\n\n@dataclass\nclass RuntimeConf:\n    version: str = MISSING\n    cwd: str = MISSING\n    config_sources: List[ConfigSourceInfo] = MISSING\n\n    # Composition choices dictionary\n    choices: Dict[str, str] = field(default_factory=lambda: {})\n\n\n@dataclass\nclass HydraConf:\n    defaults: List[Any] = field(\n        default_factory=lambda: [\n            {\"output\": \"default\"},\n            {\"launcher\": \"basic\"},\n            {\"sweeper\": \"basic\"},\n            {\"help\": \"default\"},\n            {\"hydra_help\": \"default\"},\n            {\"hydra_logging\": \"default\"},\n            {\"job_logging\": \"default\"},\n            {\"callbacks\": None},\n            # env specific overrides\n            {\"env\": \"default\"},\n        ]\n    )\n\n    # Elements to append to the config search path.\n    # Note: This can only be configured in the primary config.\n    searchpath: List[str] = field(default_factory=list)\n\n    # Normal run output configuration\n    run: RunDir = RunDir()\n    # Multi-run output configuration\n    sweep: SweepDir = SweepDir()\n    # Logging configuration for Hydra\n    hydra_logging: Any = MISSING\n    # Logging configuration for the job\n    job_logging: Any = MISSING\n\n    # Sweeper configuration\n    sweeper: Any = MISSING\n    # Launcher configuration\n    launcher: Any = MISSING\n    # Callbacks configuration\n    callbacks: Dict[str, Any] = field(default_factory=dict)\n\n    # Program Help template\n    help: HelpConf = HelpConf()\n    # Hydra's Help template\n    hydra_help: HydraHelpConf = HydraHelpConf()\n\n    # Output directory for produced configuration files and overrides.\n    # E.g., hydra.yaml, overrides.yaml will go here. Useful for debugging\n    # and extra context when looking at past runs.\n    # Setting to None will prevent the creation of the output subdir.\n    output_subdir: Optional[str] = \".hydra\"\n\n    # Those lists will contain runtime overrides\n    overrides: OverridesConf = OverridesConf()\n\n    job: JobConf = JobConf()\n\n    # populated at runtime\n    runtime: RuntimeConf = RuntimeConf()\n\n    # Can be a boolean, string or a list of strings\n    # If a boolean, setting to true will set the log level for the root logger to debug\n    # If a string, it's interpreted as a the list [string]\n    # If a list, each element is interpreted as a logger to have logging level set to debug.\n    # Typical command lines to manipulate hydra.verbose:\n    # hydra.verbose=true\n    # hydra.verbose=[hydra,__main__]\n    # TODO: good use case for Union support in OmegaConf\n    verbose: Any = False\n\n\ncs = ConfigStore.instance()\n\ncs.store(\n    group=\"hydra\",\n    name=\"config\",\n    node=HydraConf(),\n    provider=\"hydra\",\n)\n", "path": "hydra/conf/__init__.py"}], "after_files": [{"content": "# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved\nfrom dataclasses import dataclass, field\nfrom typing import Any, Dict, List, Optional\n\nfrom omegaconf import MISSING\n\nfrom hydra.core.config_store import ConfigStore\n\n\n@dataclass\nclass HelpConf:\n    app_name: str = MISSING\n    header: str = MISSING\n    footer: str = MISSING\n    template: str = MISSING\n\n\n@dataclass\nclass HydraHelpConf:\n    hydra_help: str = MISSING\n    template: str = MISSING\n\n\n@dataclass\nclass RunDir:\n    dir: str = MISSING\n\n\n@dataclass\nclass SweepDir:\n    dir: str = MISSING\n    subdir: str = MISSING\n\n\n@dataclass\nclass OverridesConf:\n    # Overrides for the hydra configuration\n    hydra: List[str] = field(default_factory=lambda: [])\n    # Overrides for the task configuration\n    task: List[str] = field(default_factory=lambda: [])\n\n\n# job runtime information will be populated here\n@dataclass\nclass JobConf:\n    # Job name, populated automatically unless specified by the user (in config or cli)\n    name: str = MISSING\n\n    # Populated automatically by Hydra.\n    # Concatenation of job overrides that can be used as a part\n    # of the directory name.\n    # This can be configured via hydra.job.config.override_dirname\n    override_dirname: str = MISSING\n\n    # Job ID in underlying scheduling system\n    id: str = MISSING\n\n    # Job number if job is a part of a sweep\n    num: int = MISSING\n\n    # The config name used by the job\n    config_name: Optional[str] = MISSING\n\n    # Environment variables to set remotely\n    env_set: Dict[str, str] = field(default_factory=dict)\n    # Environment variables to copy from the launching machine\n    env_copy: List[str] = field(default_factory=list)\n\n    # Job config\n    @dataclass\n    class JobConfig:\n        @dataclass\n        # configuration for the ${hydra.job.override_dirname} runtime variable\n        class OverrideDirname:\n            kv_sep: str = \"=\"\n            item_sep: str = \",\"\n            exclude_keys: List[str] = field(default_factory=list)\n\n        override_dirname: OverrideDirname = OverrideDirname()\n\n    config: JobConfig = JobConfig()\n\n\n@dataclass\nclass ConfigSourceInfo:\n    path: str\n    schema: str\n    provider: str\n\n\n@dataclass\nclass RuntimeConf:\n    version: str = MISSING\n    cwd: str = MISSING\n    config_sources: List[ConfigSourceInfo] = MISSING\n\n    # Composition choices dictionary\n    # Ideally, the value type would be Union[str, List[str], None]\n    choices: Dict[str, Any] = field(default_factory=lambda: {})\n\n\n@dataclass\nclass HydraConf:\n    defaults: List[Any] = field(\n        default_factory=lambda: [\n            {\"output\": \"default\"},\n            {\"launcher\": \"basic\"},\n            {\"sweeper\": \"basic\"},\n            {\"help\": \"default\"},\n            {\"hydra_help\": \"default\"},\n            {\"hydra_logging\": \"default\"},\n            {\"job_logging\": \"default\"},\n            {\"callbacks\": None},\n            # env specific overrides\n            {\"env\": \"default\"},\n        ]\n    )\n\n    # Elements to append to the config search path.\n    # Note: This can only be configured in the primary config.\n    searchpath: List[str] = field(default_factory=list)\n\n    # Normal run output configuration\n    run: RunDir = RunDir()\n    # Multi-run output configuration\n    sweep: SweepDir = SweepDir()\n    # Logging configuration for Hydra\n    hydra_logging: Any = MISSING\n    # Logging configuration for the job\n    job_logging: Any = MISSING\n\n    # Sweeper configuration\n    sweeper: Any = MISSING\n    # Launcher configuration\n    launcher: Any = MISSING\n    # Callbacks configuration\n    callbacks: Dict[str, Any] = field(default_factory=dict)\n\n    # Program Help template\n    help: HelpConf = HelpConf()\n    # Hydra's Help template\n    hydra_help: HydraHelpConf = HydraHelpConf()\n\n    # Output directory for produced configuration files and overrides.\n    # E.g., hydra.yaml, overrides.yaml will go here. Useful for debugging\n    # and extra context when looking at past runs.\n    # Setting to None will prevent the creation of the output subdir.\n    output_subdir: Optional[str] = \".hydra\"\n\n    # Those lists will contain runtime overrides\n    overrides: OverridesConf = OverridesConf()\n\n    job: JobConf = JobConf()\n\n    # populated at runtime\n    runtime: RuntimeConf = RuntimeConf()\n\n    # Can be a boolean, string or a list of strings\n    # If a boolean, setting to true will set the log level for the root logger to debug\n    # If a string, it's interpreted as a the list [string]\n    # If a list, each element is interpreted as a logger to have logging level set to debug.\n    # Typical command lines to manipulate hydra.verbose:\n    # hydra.verbose=true\n    # hydra.verbose=[hydra,__main__]\n    # TODO: good use case for Union support in OmegaConf\n    verbose: Any = False\n\n\ncs = ConfigStore.instance()\n\ncs.store(\n    group=\"hydra\",\n    name=\"config\",\n    node=HydraConf(),\n    provider=\"hydra\",\n)\n", "path": "hydra/conf/__init__.py"}]}