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 17:29 +0000

1import re 1a

2from typing import Self 1a

3 

4from pydantic import BaseModel 1a

5 

6from mealie.core.root_logger import get_logger 1a

7 

8RE_NULLS = re.compile(r"[\x00\u0000]|\\u0000") 1a

9 

10logger = get_logger() 1a

11 

12 

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 """ 

18 

19 __doc__ = "" # we don't want to include the docstring in the JSON schema 1a

20 

21 @classmethod 1a

22 def _preprocess_response(cls, response: str | None) -> str: 1a

23 if not response: 

24 return "" 

25 

26 response = re.sub(RE_NULLS, "", response) 

27 return response 

28 

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 

36 

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 """ 

42 

43 response = cls._preprocess_response(response) 

44 return cls._process_response(response)