Coverage for opt/mealie/lib/python3.12/site-packages/mealie/schema/openai/_base.py: 52%
25 statements
« prev ^ index » next coverage.py v7.10.6, created at 2025-11-25 15:48 +0000
« prev ^ index » next coverage.py v7.10.6, created at 2025-11-25 15:48 +0000
1import re 1a
2from typing import Self 1a
4from pydantic import BaseModel 1a
6from mealie.core.root_logger import get_logger 1a
8RE_NULLS = re.compile(r"[\x00\u0000]|\\u0000") 1a
10logger = get_logger() 1a
13class OpenAIBase(BaseModel): 1a
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 1a
21 @classmethod 1a
22 def _preprocess_response(cls, response: str | None) -> str: 1a
23 if not response:
24 return ""
26 response = re.sub(RE_NULLS, "", response)
27 return response
29 @classmethod 1a
30 def _process_response(cls, response: str) -> Self: 1a
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 1a
38 def parse_openai_response(cls, response: str | None) -> Self: 1a
39 """
40 Parse the OpenAI response into a class instance.
41 """
43 response = cls._preprocess_response(response)
44 return cls._process_response(response)