diff --git a/docs/_static/llama-stack-spec.html b/docs/_static/llama-stack-spec.html index 2875f0f41..8d877e3b7 100644 --- a/docs/_static/llama-stack-spec.html +++ b/docs/_static/llama-stack-spec.html @@ -1251,6 +1251,58 @@ ] } }, + "/v1/telemetry/metrics/{metric_name}": { + "post": { + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetMetricsResponse" + } + } + } + }, + "400": { + "$ref": "#/components/responses/BadRequest400" + }, + "429": { + "$ref": "#/components/responses/TooManyRequests429" + }, + "500": { + "$ref": "#/components/responses/InternalServerError500" + }, + "default": { + "$ref": "#/components/responses/DefaultError" + } + }, + "tags": [ + "Telemetry" + ], + "description": "", + "parameters": [ + { + "name": "metric_name", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetMetricsRequest" + } + } + }, + "required": true + } + } + }, "/v1/models/{model_id}": { "get": { "responses": { @@ -7559,6 +7611,127 @@ "title": "FileResponse", "description": "Response representing a file entry." }, + "GetMetricsRequest": { + "type": "object", + "properties": { + "start_time": { + "type": "integer" + }, + "end_time": { + "type": "integer" + }, + "step": { + "type": "string" + }, + "query_type": { + "type": "string", + "enum": [ + "range", + "instant" + ], + "title": "MetricQueryType" + }, + "label_matchers": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + }, + "operator": { + "type": "string", + "enum": [ + "=", + "!=", + "=~", + "!~" + ], + "title": "MetricLabelOperator", + "default": "=" + } + }, + "additionalProperties": false, + "required": [ + "name", + "value", + "operator" + ], + "title": "MetricLabelMatcher" + } + } + }, + "additionalProperties": false, + "required": [ + "start_time", + "query_type" + ], + "title": "GetMetricsRequest" + }, + "MetricDataPoint": { + "type": "object", + "properties": { + "timestamp": { + "type": "string", + "format": "date-time" + }, + "value": { + "type": "number" + } + }, + "additionalProperties": false, + "required": [ + "timestamp", + "value" + ], + "title": "MetricDataPoint" + }, + "MetricSeries": { + "type": "object", + "properties": { + "metric": { + "type": "string" + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "values": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MetricDataPoint" + } + } + }, + "additionalProperties": false, + "required": [ + "metric", + "labels", + "values" + ], + "title": "MetricSeries" + }, + "GetMetricsResponse": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MetricSeries" + } + } + }, + "additionalProperties": false, + "required": [ + "data" + ], + "title": "GetMetricsResponse" + }, "Model": { "type": "object", "properties": { diff --git a/docs/_static/llama-stack-spec.yaml b/docs/_static/llama-stack-spec.yaml index cb73919d9..5d0c0f78d 100644 --- a/docs/_static/llama-stack-spec.yaml +++ b/docs/_static/llama-stack-spec.yaml @@ -857,6 +857,40 @@ paths: required: true schema: type: string + /v1/telemetry/metrics/{metric_name}: + post: + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/GetMetricsResponse' + '400': + $ref: '#/components/responses/BadRequest400' + '429': + $ref: >- + #/components/responses/TooManyRequests429 + '500': + $ref: >- + #/components/responses/InternalServerError500 + default: + $ref: '#/components/responses/DefaultError' + tags: + - Telemetry + description: '' + parameters: + - name: metric_name + in: path + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/GetMetricsRequest' + required: true /v1/models/{model_id}: get: responses: @@ -5273,6 +5307,93 @@ components: - created_at title: FileResponse description: Response representing a file entry. + GetMetricsRequest: + type: object + properties: + start_time: + type: integer + end_time: + type: integer + step: + type: string + query_type: + type: string + enum: + - range + - instant + title: MetricQueryType + label_matchers: + type: array + items: + type: object + properties: + name: + type: string + value: + type: string + operator: + type: string + enum: + - '=' + - '!=' + - =~ + - '!~' + title: MetricLabelOperator + default: '=' + additionalProperties: false + required: + - name + - value + - operator + title: MetricLabelMatcher + additionalProperties: false + required: + - start_time + - query_type + title: GetMetricsRequest + MetricDataPoint: + type: object + properties: + timestamp: + type: string + format: date-time + value: + type: number + additionalProperties: false + required: + - timestamp + - value + title: MetricDataPoint + MetricSeries: + type: object + properties: + metric: + type: string + labels: + type: object + additionalProperties: + type: string + values: + type: array + items: + $ref: '#/components/schemas/MetricDataPoint' + additionalProperties: false + required: + - metric + - labels + - values + title: MetricSeries + GetMetricsResponse: + type: object + properties: + data: + type: array + items: + $ref: '#/components/schemas/MetricSeries' + additionalProperties: false + required: + - data + title: GetMetricsResponse Model: type: object properties: diff --git a/llama_stack/apis/telemetry/telemetry.py b/llama_stack/apis/telemetry/telemetry.py index 6d30d96e0..369b07c8b 100644 --- a/llama_stack/apis/telemetry/telemetry.py +++ b/llama_stack/apis/telemetry/telemetry.py @@ -203,13 +203,11 @@ class QuerySpanTreeResponse(BaseModel): data: dict[str, SpanWithStatus] -@json_schema_type class MetricQueryType(Enum): RANGE = "range" INSTANT = "instant" -@json_schema_type class MetricLabelOperator(Enum): EQUALS = "=" NOT_EQUALS = "!=" @@ -217,7 +215,6 @@ class MetricLabelOperator(Enum): REGEX_NOT_MATCH = "!~" -@json_schema_type class MetricLabelMatcher(BaseModel): name: str value: str @@ -233,13 +230,12 @@ class MetricDataPoint(BaseModel): @json_schema_type class MetricSeries(BaseModel): metric: str - labels: Dict[str, str] - values: List[MetricDataPoint] + labels: dict[str, str] + values: list[MetricDataPoint] -@json_schema_type class GetMetricsResponse(BaseModel): - data: List[MetricSeries] + data: list[MetricSeries] @runtime_checkable @@ -292,8 +288,8 @@ class Telemetry(Protocol): self, metric_name: str, start_time: int, - end_time: Optional[int] = None, - step: Optional[str] = "1d", + end_time: int | None = None, + step: str | None = "1d", query_type: MetricQueryType = MetricQueryType.RANGE, - label_matchers: Optional[List[MetricLabelMatcher]] = None, + label_matchers: list[MetricLabelMatcher] | None = None, ) -> GetMetricsResponse: ...