2024-05-26 22:03:39 +00:00
|
|
|
import random
|
|
|
|
from typing import List
|
|
|
|
|
2024-05-27 13:10:24 +00:00
|
|
|
from taleweave.models.base import FloatRange, IntRange
|
2024-05-26 22:03:39 +00:00
|
|
|
|
|
|
|
|
|
|
|
def resolve_float_range(range: float | FloatRange | None) -> float | None:
|
|
|
|
"""
|
|
|
|
Resolve a float range to a single value.
|
|
|
|
"""
|
|
|
|
|
|
|
|
if range is None:
|
|
|
|
return None
|
|
|
|
|
|
|
|
if isinstance(
|
|
|
|
range, (float, int)
|
|
|
|
): # int is not really necessary here, but mypy complains without it
|
|
|
|
return range
|
|
|
|
|
|
|
|
return random.uniform(range.min, range.max)
|
|
|
|
|
|
|
|
|
|
|
|
def resolve_int_range(range: int | IntRange | None) -> int | None:
|
|
|
|
"""
|
|
|
|
Resolve an integer range to a single value.
|
|
|
|
"""
|
|
|
|
|
|
|
|
if range is None:
|
|
|
|
return None
|
|
|
|
|
|
|
|
if isinstance(range, int):
|
|
|
|
return range
|
|
|
|
|
|
|
|
return random.randint(range.min, range.max)
|
|
|
|
|
|
|
|
|
|
|
|
def resolve_string_list(result: str | List[str] | None) -> str | None:
|
|
|
|
"""
|
|
|
|
Resolve a string result to a single value.
|
|
|
|
"""
|
|
|
|
|
|
|
|
if result is None:
|
|
|
|
return None
|
|
|
|
|
|
|
|
if isinstance(result, str):
|
|
|
|
return result
|
|
|
|
|
|
|
|
return random.choice(result)
|