mirror of
https://github.com/mealie-recipes/mealie.git
synced 2025-12-29 21:37:15 -05:00
feat: OpenAI Custom Headers/Params and Debug Page (#4227)
Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
This commit is contained in:
@@ -3,6 +3,7 @@ from mealie.routes._base.routers import AdminAPIRouter
|
||||
from . import (
|
||||
admin_about,
|
||||
admin_backups,
|
||||
admin_debug,
|
||||
admin_email,
|
||||
admin_maintenance,
|
||||
admin_management_groups,
|
||||
@@ -19,3 +20,4 @@ router.include_router(admin_management_groups.router, tags=["Admin: Manage Group
|
||||
router.include_router(admin_email.router, tags=["Admin: Email"])
|
||||
router.include_router(admin_backups.router, tags=["Admin: Backups"])
|
||||
router.include_router(admin_maintenance.router, tags=["Admin: Maintenance"])
|
||||
router.include_router(admin_debug.router, tags=["Admin: Debug"])
|
||||
|
||||
52
mealie/routes/admin/admin_debug.py
Normal file
52
mealie/routes/admin/admin_debug.py
Normal file
@@ -0,0 +1,52 @@
|
||||
import os
|
||||
import shutil
|
||||
|
||||
from fastapi import APIRouter, File, UploadFile
|
||||
|
||||
from mealie.core.dependencies.dependencies import get_temporary_path
|
||||
from mealie.routes._base import BaseAdminController, controller
|
||||
from mealie.schema.admin.debug import DebugResponse
|
||||
from mealie.services.openai import OpenAILocalImage, OpenAIService
|
||||
|
||||
router = APIRouter(prefix="/debug")
|
||||
|
||||
|
||||
@controller(router)
|
||||
class AdminDebugController(BaseAdminController):
|
||||
@router.post("/openai", response_model=DebugResponse)
|
||||
async def debug_openai(self, image: UploadFile | None = File(None)):
|
||||
if not self.settings.OPENAI_ENABLED:
|
||||
return DebugResponse(success=False, response="OpenAI is not enabled")
|
||||
if image and not self.settings.OPENAI_ENABLE_IMAGE_SERVICES:
|
||||
return DebugResponse(
|
||||
success=False, response="Image was provided, but OpenAI image services are not enabled"
|
||||
)
|
||||
|
||||
with get_temporary_path() as temp_path:
|
||||
if image:
|
||||
with temp_path.joinpath(image.filename).open("wb") as buffer:
|
||||
shutil.copyfileobj(image.file, buffer)
|
||||
local_image_path = temp_path.joinpath(image.filename)
|
||||
local_images = [OpenAILocalImage(filename=os.path.basename(local_image_path), path=local_image_path)]
|
||||
else:
|
||||
local_images = None
|
||||
|
||||
try:
|
||||
openai_service = OpenAIService()
|
||||
prompt = openai_service.get_prompt("debug")
|
||||
|
||||
message = "Hello, checking to see if I can reach you."
|
||||
if local_images:
|
||||
message = f"{message} Here is an image to test with:"
|
||||
|
||||
response = await openai_service.get_response(
|
||||
prompt, message, images=local_images, force_json_response=False
|
||||
)
|
||||
return DebugResponse(success=True, response=f'OpenAI is working. Response: "{response}"')
|
||||
|
||||
except Exception as e:
|
||||
self.logger.exception(e)
|
||||
return DebugResponse(
|
||||
success=False,
|
||||
response=f'OpenAI request failed. Full error has been logged. {e.__class__.__name__}: "{e}"',
|
||||
)
|
||||
Reference in New Issue
Block a user