Skip to content

Commit 68c5294

Browse files
committed
inference: load partial manifest, don't fully fail on unknown models
1 parent ab47050 commit 68c5294

2 files changed

Lines changed: 17 additions & 12 deletions

File tree

src/skvaider/inference/routers/manager.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import structlog
22
import svcs
3-
from fastapi import APIRouter, HTTPException
3+
from fastapi import APIRouter
44
from fastapi.responses import JSONResponse
55

66
from skvaider.inference.manager import Manager
@@ -64,18 +64,18 @@ async def update_manifest(
6464
) -> JSONResponse:
6565
"""Update the manifest of models to load; the manager converges asynchronously."""
6666
manager = services.get(Manager)
67-
models = {m.lower() for m in body.models}
68-
unknown = models - manager.models.keys()
67+
unknown = body.models - manager.models.keys()
68+
models = body.models - unknown
69+
manager.update_manifest(models, body.serial)
6970
if unknown:
70-
log.error(
71-
"manifest rejected: unknown models",
71+
log.warning(
72+
"manifest accepted with errors: unknown models",
7273
unknown=sorted(unknown),
73-
requested=sorted(models),
74-
configured=sorted(manager.models.keys()),
74+
manifest=sorted(models),
75+
known=sorted(manager.models.keys()),
7576
)
76-
raise HTTPException(
77-
status_code=500,
78-
detail=f"Unknown models: {sorted(unknown)}",
77+
return JSONResponse(
78+
status_code=400,
79+
content={"status": "unknown models", "unknown": sorted(unknown)},
7980
)
80-
manager.update_manifest(models, body.serial)
8181
return JSONResponse(status_code=202, content={"status": "ok"})

src/skvaider/manifest.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import time
22
from typing import Any, Literal
33

4-
from pydantic import GetCoreSchemaHandler
4+
from pydantic import GetCoreSchemaHandler, field_validator
55
from pydantic_core import core_schema
66

77
from skvaider.utils import RequestMethod, RequestModel, ResponseModel
@@ -121,3 +121,8 @@ class ManifestRequest(RequestModel[ManifestResponse]):
121121

122122
models: set[str]
123123
serial: Serial
124+
125+
@field_validator("models", mode="after")
126+
@classmethod
127+
def normalize_models(cls, models: set[str]) -> set[str]:
128+
return {m.lower() for m in models}

0 commit comments

Comments
 (0)