aidial_assistant/json_stream/json_number.py (24 lines of code) (raw):

import json from typing_extensions import override from aidial_assistant.json_stream.exceptions import invalid_sequence_error from aidial_assistant.json_stream.json_node import AtomicNode TYPE_STRING = "number" class JsonNumber(AtomicNode[float | int]): def __init__(self, raw_data: str, pos: int): super().__init__(raw_data, pos) self._value: float | int = JsonNumber._parse_number(raw_data, pos) @override def type(self) -> str: return TYPE_STRING @override def value(self) -> float | int: return self._value @staticmethod def starts_with(char: str) -> bool: return char.isdigit() or char == "-" @staticmethod def _parse_number(string: str, char_position: int) -> float | int: try: return json.loads(string) except json.JSONDecodeError: raise invalid_sequence_error(TYPE_STRING, string, char_position)