fixes based on full skills run

Signed-off-by: Vladimir Mandic <mandic00@live.com>
This commit is contained in:
Vladimir Mandic
2026-06-04 11:10:26 +02:00
parent e7e317191a
commit f25f325efb
13 changed files with 93 additions and 40 deletions
+11 -11
View File
@@ -44,7 +44,7 @@ class Api:
# server api
self.add_api_route("/sdapi/v1/motd", server.get_motd, methods=["GET"], response_model=str)
self.add_api_route("/sdapi/v1/log", server.get_log, methods=["GET"], response_model=list[str])
self.add_api_route("/sdapi/v1/log", server.post_log, methods=["POST"])
self.add_api_route("/sdapi/v1/log", server.post_log, methods=["POST"], status_code=204)
self.add_api_route("/sdapi/v1/start", self.get_session_start, methods=["GET"])
self.add_api_route("/sdapi/v1/version", server.get_version, methods=["GET"])
self.add_api_route("/sdapi/v1/torch", server.get_torch, methods=["GET"])
@@ -52,9 +52,9 @@ class Api:
self.add_api_route("/sdapi/v1/platform", server.get_platform, methods=["GET"])
self.add_api_route("/sdapi/v1/progress", server.get_progress, methods=["GET"], response_model=models.ResProgress)
self.add_api_route("/sdapi/v1/history", server.get_history, methods=["GET"], response_model=list[models.ResHistory])
self.add_api_route("/sdapi/v1/interrupt", server.post_interrupt, methods=["POST"])
self.add_api_route("/sdapi/v1/skip", server.post_skip, methods=["POST"])
self.add_api_route("/sdapi/v1/shutdown", server.post_shutdown, methods=["POST"])
self.add_api_route("/sdapi/v1/interrupt", server.post_interrupt, methods=["POST"], status_code=204)
self.add_api_route("/sdapi/v1/skip", server.post_skip, methods=["POST"], status_code=204)
self.add_api_route("/sdapi/v1/shutdown", server.post_shutdown, methods=["POST"], status_code=204)
self.add_api_route("/sdapi/v1/memory", server.get_memory, methods=["GET"], response_model=models.ResMemory)
self.add_api_route("/sdapi/v1/cmd-flags", server.get_cmd_flags, methods=["GET"], response_model=models.FlagsModel)
self.add_api_route("/sdapi/v1/gpu", gpu.get_gpu, methods=["GET"])
@@ -101,12 +101,12 @@ class Api:
self.add_api_route("/sdapi/v1/png-info", endpoints.post_pnginfo, methods=["POST"], response_model=models.ResImageInfo, tags=["Functional"])
self.add_api_route("/sdapi/v1/checkpoint", endpoints.get_checkpoint, methods=["GET"], tags=["Functional"])
self.add_api_route("/sdapi/v1/checkpoint", endpoints.set_checkpoint, methods=["POST"], tags=["Functional"])
self.add_api_route("/sdapi/v1/refresh-checkpoints", endpoints.post_refresh_checkpoints, methods=["POST"], tags=["Functional"])
self.add_api_route("/sdapi/v1/unload-checkpoint", endpoints.post_unload_checkpoint, methods=["POST"], tags=["Functional"])
self.add_api_route("/sdapi/v1/reload-checkpoint", endpoints.post_reload_checkpoint, methods=["POST"], tags=["Functional"])
self.add_api_route("/sdapi/v1/lock-checkpoint", endpoints.post_lock_checkpoint, methods=["POST"], tags=["Functional"])
self.add_api_route("/sdapi/v1/refresh-vae", endpoints.post_refresh_vae, methods=["POST"], tags=["Functional"])
self.add_api_route("/sdapi/v1/refresh-unets", endpoints.post_refresh_unets, methods=["POST"], tags=["Functional"])
self.add_api_route("/sdapi/v1/refresh-checkpoints", endpoints.post_refresh_checkpoints, methods=["POST"], status_code=204, tags=["Functional"])
self.add_api_route("/sdapi/v1/unload-checkpoint", endpoints.post_unload_checkpoint, methods=["POST"], status_code=204, tags=["Functional"])
self.add_api_route("/sdapi/v1/reload-checkpoint", endpoints.post_reload_checkpoint, methods=["POST"], status_code=204, tags=["Functional"])
self.add_api_route("/sdapi/v1/lock-checkpoint", endpoints.post_lock_checkpoint, methods=["POST"], status_code=204, tags=["Functional"])
self.add_api_route("/sdapi/v1/refresh-vae", endpoints.post_refresh_vae, methods=["POST"], status_code=204, tags=["Functional"])
self.add_api_route("/sdapi/v1/refresh-unets", endpoints.post_refresh_unets, methods=["POST"], status_code=204, tags=["Functional"])
self.add_api_route("/sdapi/v1/latents", endpoints.get_latent_history, methods=["GET"], response_model=list[str], tags=["Functional"])
self.add_api_route("/sdapi/v1/latents", endpoints.post_latent_history, methods=["POST"], response_model=int, tags=["Functional"])
self.add_api_route("/sdapi/v1/modules", endpoints.get_modules, methods=["GET"], tags=["Functional"])
@@ -131,7 +131,7 @@ class Api:
# gallery api
from modules.api import gallery
gallery.register_api(self.app)
gallery.register_api(self)
# nudenet api
from modules.api import nudenet
+2 -2
View File
@@ -66,7 +66,7 @@ def create_docs(app: FastAPI):
"dom_id": "#swagger-ui",
}
@app.get("/docs", include_in_schema=True)
@app.get("/docs", include_in_schema=True) # override for the default fastapi swagger route
async def custom_swagger_html():
res = get_swagger_ui_html(
title=f'{app.title}: Swagger UI',
@@ -79,7 +79,7 @@ def create_docs(app: FastAPI):
def create_redocs(app: FastAPI):
@app.get("/redocs", include_in_schema=True)
@app.get("/redocs", include_in_schema=True) # override for the default fastapi redocs route
async def custom_redoc_html():
res = get_redoc_html(
title=f'{app.title}: ReDoc',
+8 -6
View File
@@ -1,4 +1,5 @@
from fastapi.exceptions import HTTPException
from fastapi.responses import JSONResponse, Response
from modules import shared
from modules.logger import log
from modules.api import models, helpers
@@ -216,7 +217,7 @@ def post_unload_checkpoint():
from modules import sd_models
sd_models.unload_model_weights(op='model')
sd_models.unload_model_weights(op='refiner')
return {}
return Response(status_code=204)
def post_reload_checkpoint(force:bool=False):
"""Reload the selected checkpoint. Set ``force=True`` to unload first and do a clean reload."""
@@ -224,18 +225,19 @@ def post_reload_checkpoint(force:bool=False):
if force:
sd_models.unload_model_weights(op='model')
sd_models.reload_model_weights()
return {}
return Response(status_code=204)
def post_lock_checkpoint(lock:bool=False):
"""Lock or unlock the current model to prevent automatic model swaps."""
from modules import modeldata
modeldata.model_data.locked = lock
return {}
return Response(status_code=204)
def post_refresh_unets():
"""Rescan UNet directories and update the available UNet list."""
import modules.sd_unet
return modules.sd_unet.refresh_unet_list()
modules.sd_unet.refresh_unet_list()
return Response(status_code=204)
def get_checkpoint():
"""Return information about the currently loaded checkpoint including type, class, title, and hash."""
@@ -273,12 +275,12 @@ def set_checkpoint(sd_model_checkpoint: str, dtype: str | None = None, force: bo
def post_refresh_checkpoints():
"""Rescan checkpoint directories and update the available models list."""
shared.refresh_checkpoints()
return {}
return Response(status_code=204)
def post_refresh_vae():
"""Rescan VAE directories and update the available VAE list."""
shared.refresh_vaes()
return {}
return Response(status_code=204)
def get_modules():
"""Analyze the loaded model and return its sub-module breakdown with device, dtype, and parameter info."""
+5 -5
View File
@@ -71,7 +71,7 @@ class ConnectionManager:
### api definitions
def register_api(app: FastAPI): # register api
def register_api(api): # register api
manager = ConnectionManager()
def get_video_thumbnail(filepath):
@@ -208,11 +208,11 @@ def register_api(app: FastAPI): # register api
log.error(f'Gallery: {folder} {e}')
return []
shared.api.add_api_route("/sdapi/v1/browser/folders", get_folders, methods=["GET"], response_model=list[str])
shared.api.add_api_route("/sdapi/v1/browser/thumb", get_thumb, methods=["GET"], response_model=dict)
shared.api.add_api_route("/sdapi/v1/browser/files", ht_files, methods=["GET"], response_model=list)
api.add_api_route("/sdapi/v1/browser/folders", get_folders, methods=["GET"], response_model=list[str])
api.add_api_route("/sdapi/v1/browser/thumb", get_thumb, methods=["GET"], response_model=dict)
api.add_api_route("/sdapi/v1/browser/files", ht_files, methods=["GET"], response_model=list)
@app.websocket("/sdapi/v1/browser/files")
@api.app.websocket("/sdapi/v1/browser/files")
async def ws_files(ws: WebSocket):
try:
await manager.connect(ws)
+7 -6
View File
@@ -1,6 +1,6 @@
import os
import time
from fastapi import Request, Depends
from fastapi import Request, Depends, BackgroundTasks, Response
from fastapi.exceptions import HTTPException
from fastapi.responses import FileResponse
import installer
@@ -79,12 +79,12 @@ def post_log(req: models.ReqPostLog):
log.debug(f'UI: {req.debug}')
elif req.error is not None:
log.error(f'UI: {req.error}')
return {}
return Response(status_code=204)
def post_shutdown():
def post_shutdown(background_tasks: BackgroundTasks):
log.info("Shutdown request received")
import sys
sys.exit(0)
background_tasks.add_task(os._exit, 0)
return Response(status_code=204)
def get_cmd_flags():
return vars(shared.cmd_opts)
@@ -126,10 +126,11 @@ def get_status():
def post_interrupt():
shared.state.interrupt()
return {}
return Response(status_code=204)
def post_skip():
shared.state.skip()
return Response(status_code=204)
def get_memory():
try: