feat: Create the Random Choice Oracle
This commit is contained in:
38
gm_assistant/oracle/random_choice.py
Normal file
38
gm_assistant/oracle/random_choice.py
Normal file
@@ -0,0 +1,38 @@
|
||||
# SPDX-FileCopyrightText: 2025 2025
|
||||
# SPDX-FileContributor: Gergely Polonkai
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
"""Random Choice Oracle"""
|
||||
|
||||
import random
|
||||
from typing import Any
|
||||
|
||||
from .base import Oracle
|
||||
|
||||
|
||||
class RandomChoiceOracle(Oracle):
|
||||
"""An Oracle that can choose randomly from a list of possibilities"""
|
||||
|
||||
TYPE_MARKER = "random-choice"
|
||||
|
||||
def __init__(self, oracle_data: dict[str, Any]) -> None:
|
||||
self.choices: list[str] | None = None
|
||||
|
||||
super().__init__(oracle_data)
|
||||
|
||||
def parse_and_validate(self, oracle_data: dict[str, Any]) -> None:
|
||||
super().parse_and_validate(oracle_data)
|
||||
|
||||
if "choices" not in oracle_data:
|
||||
raise KeyError("choices is missing from the data")
|
||||
|
||||
if not oracle_data["choices"]:
|
||||
raise ValueError("Choice list cannot be empty")
|
||||
|
||||
if not isinstance(oracle_data["choices"], list):
|
||||
raise TypeError("choices must be a list")
|
||||
|
||||
self.choices = oracle_data["choices"]
|
||||
|
||||
def generate(self) -> str:
|
||||
return random.choice(self.choices or [])
|
Reference in New Issue
Block a user