feat: OpenAI Custom Headers/Params and Debug Page (#4227)

Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
This commit is contained in:
Michael Genson
2024-09-23 04:04:36 -05:00
committed by GitHub
parent 7c274de778
commit ea1f727a8b
20 changed files with 277 additions and 17 deletions

View File

@@ -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"])

View 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}"',
)