Coverage for opt/mealie/lib/python3.12/site-packages/mealie/schema/openai/_base.py: 52%
25 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 03:04 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 03:04 +0000
1import re
2from typing import Self
4from pydantic import BaseModel
6from mealie.core.root_logger import get_logger
8RE_NULLS = re.compile(r"[\x00\u0000]|\\u0000")
10logger = get_logger()
13class OpenAIBase(BaseModel):
14 """
15 This class defines the JSON schema sent to OpenAI. Its schema is
16 injected directly into the OpenAI prompt.
17 """
19 __doc__ = "" # we don't want to include the docstring in the JSON schema
21 @classmethod
22 def _preprocess_response(cls, response: str | None) -> str:
23 if not response:
24 return ""
26 response = re.sub(RE_NULLS, "", response)
27 return response
29 @classmethod
30 def _process_response(cls, response: str) -> Self:
31 try:
32 return cls.model_validate_json(response)
33 except Exception:
34 logger.debug(f"Failed to parse OpenAI response as {cls}. Response: {response}")
35 raise
37 @classmethod
38 def parse_openai_response(cls, response: str | None) -> Self:
39 """
40 Parse the OpenAI response into a class instance.
41 """
43 response = cls._preprocess_response(response)
44 return cls._process_response(response)