Skip to content

Commit 3f1520e

Browse files
Add gateway services state migration for CORS support in services for backward compatibility (with older verions of gateway)
1 parent 345b2c9 commit 3f1520e

1 file changed

Lines changed: 25 additions & 0 deletions

File tree

src/dstack/_internal/proxy/gateway/services/registry.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -394,9 +394,34 @@ async def apply_entrypoint(
394394
await nginx.register(config, acme)
395395

396396

397+
async def _migrate_cors_enabled(repo: GatewayProxyRepo) -> None:
398+
"""Migrate services registered before the cors_enabled field was added.
399+
400+
Old gateway versions didn't persist cors_enabled on services. This derives it
401+
from the associated model's format so that CORS is enabled for openai-format
402+
models on gateway restart without requiring service re-registration.
403+
"""
404+
services = await repo.list_services()
405+
openai_run_names: set[tuple[str, str]] = set()
406+
for service in services:
407+
for model in await repo.list_models(service.project_name):
408+
if model.run_name == service.run_name and isinstance(
409+
model.format_spec, models.OpenAIChatModelFormat
410+
):
411+
openai_run_names.add((service.project_name, service.run_name))
412+
for service in services:
413+
if (
414+
not service.cors_enabled
415+
and (service.project_name, service.run_name) in openai_run_names
416+
):
417+
updated = models.Service(**{**service.dict(), "cors_enabled": True})
418+
await repo.set_service(updated)
419+
420+
397421
async def apply_all(
398422
repo: GatewayProxyRepo, nginx: Nginx, service_conn_pool: ServiceConnectionPool
399423
) -> None:
424+
await _migrate_cors_enabled(repo)
400425
service_tasks = [
401426
apply_service(
402427
service=service,

0 commit comments

Comments
 (0)