configuration: made 'default' AI ID optional

This commit is contained in:
2023-09-11 07:38:49 +02:00
parent c143c001f9
commit d4021eeb11
4 changed files with 22 additions and 17 deletions
+12 -6
View File
@@ -4,25 +4,31 @@ Creates different AI instances, based on the given configuration.
import argparse
from typing import cast
from .configuration import Config, OpenAIConfig, default_ai_ID
from .configuration import Config, AIConfig, OpenAIConfig
from .ai import AI, AIError
from .ais.openai import OpenAI
def create_ai(args: argparse.Namespace, config: Config) -> AI:
def create_ai(args: argparse.Namespace, config: Config) -> AI: # noqa: 11
"""
Creates an AI subclass instance from the given arguments
and configuration file.
and configuration file. If AI has not been set in the
arguments, it searches for the ID 'default'. If that
is not found, it uses the first AI in the list.
"""
ai_conf: AIConfig
if args.AI:
try:
ai_conf = config.ais[args.AI]
except KeyError:
raise AIError(f"AI ID '{args.AI}' does not exist in this configuration")
elif default_ai_ID in config.ais:
ai_conf = config.ais[default_ai_ID]
elif 'default' in config.ais:
ai_conf = config.ais['default']
else:
raise AIError("No AI name given and no default exists")
try:
ai_conf = next(iter(config.ais.values()))
except StopIteration:
raise AIError("No AI found in this configuration")
if ai_conf.name == 'openai':
ai = OpenAI(cast(OpenAIConfig, ai_conf))