Skip to content

vllm.entrypoints.scale_out.derender.api_router

Functions:

derender_chat_completion(request, raw_request) async

Derender a generate response into a ChatCompletionResponse.

Accepts both non-streaming (stream=false, default) and streaming (stream=true) request bodies on the same path; FastAPI validates and routes on the stream discriminator.

Non-streaming: body is DerenderChatRequest (generate_response with the complete token list). Returns a ChatCompletionResponse.

Streaming: body is DerenderChatStreamRequest (one generate_chunk delta + optional stream_state). Returns a DerenderChatStreamResponse (chunk + stream_state). The client carries stream_state between successive calls, one per SSE chunk from /inference/v1/generate.

Source code in vllm/entrypoints/scale_out/derender/api_router.py
@router.post(
    "/v1/chat/completions/derender",
    dependencies=[Depends(validate_json_request)],
    responses={
        HTTPStatus.BAD_REQUEST.value: {"model": ErrorResponse},
        HTTPStatus.NOT_FOUND.value: {"model": ErrorResponse},
        HTTPStatus.INTERNAL_SERVER_ERROR.value: {"model": ErrorResponse},
    },
)
async def derender_chat_completion(
    request: DerenderChatRequestUnion,
    raw_request: Request,
):
    """Derender a generate response into a ChatCompletionResponse.

    Accepts both non-streaming (`stream=false`, default) and streaming
    (`stream=true`) request bodies on the same path; FastAPI validates and
    routes on the `stream` discriminator.

    Non-streaming: body is `DerenderChatRequest` (`generate_response` with
    the complete token list). Returns a `ChatCompletionResponse`.

    Streaming: body is `DerenderChatStreamRequest` (one `generate_chunk`
    delta + optional `stream_state`). Returns a `DerenderChatStreamResponse`
    (`chunk` + `stream_state`). The client carries `stream_state` between
    successive calls, one per SSE chunk from `/inference/v1/generate`.
    """
    handler = derender(raw_request)
    if handler is None:
        raise NotImplementedError(
            "The model does not support Chat Completions Derender API"
        )

    if isinstance(request, DerenderChatStreamRequest):
        stream_result = await handler.derender_chat_stream_response(request)
        if isinstance(stream_result, ErrorResponse):
            return JSONResponse(
                content=stream_result.model_dump(),
                status_code=stream_result.error.code,
            )
        chunk, stream_state = stream_result
        response = DerenderChatStreamResponse(chunk=chunk, stream_state=stream_state)
        return JSONResponse(content=response.model_dump())

    result = await handler.derender_chat_response(request)
    if isinstance(result, ErrorResponse):
        return JSONResponse(content=result.model_dump(), status_code=result.error.code)
    return JSONResponse(content=result.model_dump())

derender_completion(request, raw_request) async

Derender a generate response into a CompletionResponse.

Accepts both non-streaming (stream=false, default) and streaming (stream=true) request bodies on the same path.

Non-streaming: body is DerenderCompletionRequest. Returns a CompletionResponse.

Streaming: body is DerenderCompletionStreamRequest (one generate_chunk + optional stream_state). Returns a DerenderCompletionStreamResponse (chunk + stream_state).

Source code in vllm/entrypoints/scale_out/derender/api_router.py
@router.post(
    "/v1/completions/derender",
    dependencies=[Depends(validate_json_request)],
    responses={
        HTTPStatus.BAD_REQUEST.value: {"model": ErrorResponse},
        HTTPStatus.NOT_FOUND.value: {"model": ErrorResponse},
        HTTPStatus.INTERNAL_SERVER_ERROR.value: {"model": ErrorResponse},
    },
)
async def derender_completion(
    request: DerenderCompletionRequestUnion,
    raw_request: Request,
):
    """Derender a generate response into a CompletionResponse.

    Accepts both non-streaming (`stream=false`, default) and streaming
    (`stream=true`) request bodies on the same path.

    Non-streaming: body is `DerenderCompletionRequest`. Returns a
    `CompletionResponse`.

    Streaming: body is `DerenderCompletionStreamRequest` (one
    `generate_chunk` + optional `stream_state`). Returns a
    `DerenderCompletionStreamResponse` (`chunk` + `stream_state`).
    """
    handler = derender(raw_request)
    if handler is None:
        raise NotImplementedError("The model does not support Completions Derender API")

    if isinstance(request, DerenderCompletionStreamRequest):
        stream_result = await handler.derender_completion_stream_response(request)
        if isinstance(stream_result, ErrorResponse):
            return JSONResponse(
                content=stream_result.model_dump(),
                status_code=stream_result.error.code,
            )
        chunk, stream_state = stream_result
        response = DerenderCompletionStreamResponse(
            chunk=chunk, stream_state=stream_state
        )
        return JSONResponse(content=response.model_dump())

    result = await handler.derender_completion_response(request)
    if isinstance(result, ErrorResponse):
        return JSONResponse(content=result.model_dump(), status_code=result.error.code)
    return JSONResponse(content=result.model_dump())