Coverage for opt/mealie/lib/python3.12/site-packages/mealie/routes/admin/admin_debug.py: 29%

34 statements  

« prev     ^ index     » next       coverage.py v7.10.6, created at 2025-11-25 15:32 +0000

1import os 1a

2import shutil 1a

3 

4from fastapi import APIRouter, File, UploadFile 1a

5 

6from mealie.core.dependencies.dependencies import get_temporary_path 1a

7from mealie.routes._base import BaseAdminController, controller 1a

8from mealie.schema.admin.debug import DebugResponse 1a

9from mealie.services.openai import OpenAILocalImage, OpenAIService 1a

10 

11router = APIRouter(prefix="/debug") 1a

12 

13 

14@controller(router) 1a

15class AdminDebugController(BaseAdminController): 1a

16 @router.post("/openai", response_model=DebugResponse) 1a

17 async def debug_openai(self, image: UploadFile | None = File(None)): 1a

18 if not self.settings.OPENAI_ENABLED: 

19 return DebugResponse(success=False, response="OpenAI is not enabled") 

20 if image and not self.settings.OPENAI_ENABLE_IMAGE_SERVICES: 

21 return DebugResponse( 

22 success=False, response="Image was provided, but OpenAI image services are not enabled" 

23 ) 

24 

25 with get_temporary_path() as temp_path: 

26 if image: 

27 with temp_path.joinpath(image.filename).open("wb") as buffer: 

28 shutil.copyfileobj(image.file, buffer) 

29 local_image_path = temp_path.joinpath(image.filename) 

30 local_images = [OpenAILocalImage(filename=os.path.basename(local_image_path), path=local_image_path)] 

31 else: 

32 local_images = None 

33 

34 try: 

35 openai_service = OpenAIService() 

36 prompt = openai_service.get_prompt("debug") 

37 

38 message = "Hello, checking to see if I can reach you." 

39 if local_images: 

40 message = f"{message} Here is an image to test with:" 

41 

42 response = await openai_service.get_response( 

43 prompt, message, images=local_images, force_json_response=False 

44 ) 

45 return DebugResponse(success=True, response=f'OpenAI is working. Response: "{response}"') 

46 

47 except Exception as e: 

48 self.logger.exception(e) 

49 return DebugResponse( 

50 success=False, 

51 response=f'OpenAI request failed. Full error has been logged. {e.__class__.__name__}: "{e}"', 

52 )