diff --git a/docs/_static/llama-stack-spec.html b/docs/_static/llama-stack-spec.html index 775eb93b3..397467d34 100644 --- a/docs/_static/llama-stack-spec.html +++ b/docs/_static/llama-stack-spec.html @@ -10711,6 +10711,10 @@ "has_more": { "type": "boolean", "description": "Whether there are more items available after this set" + }, + "url": { + "type": "string", + "description": "The URL for accessing this list" } }, "additionalProperties": false, diff --git a/docs/_static/llama-stack-spec.yaml b/docs/_static/llama-stack-spec.yaml index ef6b5d70a..edd7d18a5 100644 --- a/docs/_static/llama-stack-spec.yaml +++ b/docs/_static/llama-stack-spec.yaml @@ -7511,6 +7511,9 @@ components: type: boolean description: >- Whether there are more items available after this set + url: + type: string + description: The URL for accessing this list additionalProperties: false required: - data diff --git a/llama_stack/apis/common/responses.py b/llama_stack/apis/common/responses.py index 5cb41e23d..e4cf21a54 100644 --- a/llama_stack/apis/common/responses.py +++ b/llama_stack/apis/common/responses.py @@ -23,7 +23,9 @@ class PaginatedResponse(BaseModel): :param data: The list of items for the current page :param has_more: Whether there are more items available after this set + :param url: The URL for accessing this list """ data: list[dict[str, Any]] has_more: bool + url: str | None = None diff --git a/llama_stack/distribution/server/server.py b/llama_stack/distribution/server/server.py index 4f2427a55..88b64ef2e 100644 --- a/llama_stack/distribution/server/server.py +++ b/llama_stack/distribution/server/server.py @@ -30,6 +30,7 @@ from fastapi.responses import JSONResponse, StreamingResponse from openai import BadRequestError from pydantic import BaseModel, ValidationError +from llama_stack.apis.common.responses import PaginatedResponse from llama_stack.distribution.datatypes import AuthenticationRequiredError, LoggingConfig, StackRunConfig from llama_stack.distribution.distribution import builtin_automatically_routed_apis from llama_stack.distribution.request_headers import PROVIDER_DATA_VAR, User, request_provider_data_context @@ -230,7 +231,10 @@ def create_dynamic_typed_route(func: Any, method: str, route: str) -> Callable: return StreamingResponse(gen, media_type="text/event-stream") else: value = func(**kwargs) - return await maybe_await(value) + result = await maybe_await(value) + if isinstance(result, PaginatedResponse) and result.url is None: + result.url = route + return result except Exception as e: logger.exception(f"Error executing endpoint {route=} {method=}") raise translate_exception(e) from e