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: ...