diff --git a/docs/_static/llama-stack-spec.html b/docs/_static/llama-stack-spec.html
index 09c241b2c..8e586c573 100644
--- a/docs/_static/llama-stack-spec.html
+++ b/docs/_static/llama-stack-spec.html
@@ -1251,58 +1251,6 @@
]
}
},
- "/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": {
@@ -3490,6 +3438,58 @@
}
}
},
+ "/v1/telemetry/metrics/{metric_name}": {
+ "post": {
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/QueryMetricsResponse"
+ }
+ }
+ }
+ },
+ "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/QueryMetricsRequest"
+ }
+ }
+ },
+ "required": true
+ }
+ }
+ },
"/v1/telemetry/spans": {
"post": {
"responses": {
@@ -7611,143 +7611,6 @@
"title": "FileResponse",
"description": "Response representing a file entry."
},
- "GetMetricsRequest": {
- "type": "object",
- "properties": {
- "start_time": {
- "type": "integer"
- },
- "end_time": {
- "type": "integer"
- },
- "granularity": {
- "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": "integer"
- },
- "value": {
- "type": "number"
- }
- },
- "additionalProperties": false,
- "required": [
- "timestamp",
- "value"
- ],
- "title": "MetricDataPoint"
- },
- "MetricLabel": {
- "type": "object",
- "properties": {
- "name": {
- "type": "string"
- },
- "value": {
- "type": "string"
- }
- },
- "additionalProperties": false,
- "required": [
- "name",
- "value"
- ],
- "title": "MetricLabel"
- },
- "MetricSeries": {
- "type": "object",
- "properties": {
- "metric": {
- "type": "string"
- },
- "labels": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/MetricLabel"
- }
- },
- "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": {
@@ -11249,6 +11112,143 @@
],
"title": "QueryChunksResponse"
},
+ "QueryMetricsRequest": {
+ "type": "object",
+ "properties": {
+ "start_time": {
+ "type": "integer"
+ },
+ "end_time": {
+ "type": "integer"
+ },
+ "granularity": {
+ "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": "QueryMetricsRequest"
+ },
+ "MetricDataPoint": {
+ "type": "object",
+ "properties": {
+ "timestamp": {
+ "type": "integer"
+ },
+ "value": {
+ "type": "number"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "timestamp",
+ "value"
+ ],
+ "title": "MetricDataPoint"
+ },
+ "MetricLabel": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "value": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "name",
+ "value"
+ ],
+ "title": "MetricLabel"
+ },
+ "MetricSeries": {
+ "type": "object",
+ "properties": {
+ "metric": {
+ "type": "string"
+ },
+ "labels": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/MetricLabel"
+ }
+ },
+ "values": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/MetricDataPoint"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "metric",
+ "labels",
+ "values"
+ ],
+ "title": "MetricSeries"
+ },
+ "QueryMetricsResponse": {
+ "type": "object",
+ "properties": {
+ "data": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/MetricSeries"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "data"
+ ],
+ "title": "QueryMetricsResponse"
+ },
"QueryCondition": {
"type": "object",
"properties": {
diff --git a/docs/_static/llama-stack-spec.yaml b/docs/_static/llama-stack-spec.yaml
index ad51dc40a..6900316e2 100644
--- a/docs/_static/llama-stack-spec.yaml
+++ b/docs/_static/llama-stack-spec.yaml
@@ -857,40 +857,6 @@ 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:
@@ -2405,6 +2371,40 @@ paths:
schema:
$ref: '#/components/schemas/QueryChunksRequest'
required: true
+ /v1/telemetry/metrics/{metric_name}:
+ post:
+ responses:
+ '200':
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/QueryMetricsResponse'
+ '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/QueryMetricsRequest'
+ required: true
/v1/telemetry/spans:
post:
responses:
@@ -5307,104 +5307,6 @@ components:
- created_at
title: FileResponse
description: Response representing a file entry.
- GetMetricsRequest:
- type: object
- properties:
- start_time:
- type: integer
- end_time:
- type: integer
- granularity:
- 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: integer
- value:
- type: number
- additionalProperties: false
- required:
- - timestamp
- - value
- title: MetricDataPoint
- MetricLabel:
- type: object
- properties:
- name:
- type: string
- value:
- type: string
- additionalProperties: false
- required:
- - name
- - value
- title: MetricLabel
- MetricSeries:
- type: object
- properties:
- metric:
- type: string
- labels:
- type: array
- items:
- $ref: '#/components/schemas/MetricLabel'
- 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:
@@ -7711,6 +7613,104 @@ components:
- chunks
- scores
title: QueryChunksResponse
+ QueryMetricsRequest:
+ type: object
+ properties:
+ start_time:
+ type: integer
+ end_time:
+ type: integer
+ granularity:
+ 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: QueryMetricsRequest
+ MetricDataPoint:
+ type: object
+ properties:
+ timestamp:
+ type: integer
+ value:
+ type: number
+ additionalProperties: false
+ required:
+ - timestamp
+ - value
+ title: MetricDataPoint
+ MetricLabel:
+ type: object
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ additionalProperties: false
+ required:
+ - name
+ - value
+ title: MetricLabel
+ MetricSeries:
+ type: object
+ properties:
+ metric:
+ type: string
+ labels:
+ type: array
+ items:
+ $ref: '#/components/schemas/MetricLabel'
+ values:
+ type: array
+ items:
+ $ref: '#/components/schemas/MetricDataPoint'
+ additionalProperties: false
+ required:
+ - metric
+ - labels
+ - values
+ title: MetricSeries
+ QueryMetricsResponse:
+ type: object
+ properties:
+ data:
+ type: array
+ items:
+ $ref: '#/components/schemas/MetricSeries'
+ additionalProperties: false
+ required:
+ - data
+ title: QueryMetricsResponse
QueryCondition:
type: object
properties:
diff --git a/llama_stack/apis/telemetry/telemetry.py b/llama_stack/apis/telemetry/telemetry.py
index 35cb4875b..337609b6e 100644
--- a/llama_stack/apis/telemetry/telemetry.py
+++ b/llama_stack/apis/telemetry/telemetry.py
@@ -240,7 +240,7 @@ class MetricSeries(BaseModel):
values: list[MetricDataPoint]
-class GetMetricsResponse(BaseModel):
+class QueryMetricsResponse(BaseModel):
data: list[MetricSeries]
@@ -290,7 +290,7 @@ class Telemetry(Protocol):
) -> None: ...
@webmethod(route="/telemetry/metrics/{metric_name}", method="POST")
- async def get_metrics(
+ async def query_metrics(
self,
metric_name: str,
start_time: int,
@@ -298,4 +298,4 @@ class Telemetry(Protocol):
granularity: str | None = "1d",
query_type: MetricQueryType = MetricQueryType.RANGE,
label_matchers: list[MetricLabelMatcher] | None = None,
- ) -> GetMetricsResponse: ...
+ ) -> QueryMetricsResponse: ...
diff --git a/llama_stack/providers/inline/telemetry/meta_reference/telemetry.py b/llama_stack/providers/inline/telemetry/meta_reference/telemetry.py
index 1e7f9a40e..1b660e3fb 100644
--- a/llama_stack/providers/inline/telemetry/meta_reference/telemetry.py
+++ b/llama_stack/providers/inline/telemetry/meta_reference/telemetry.py
@@ -19,11 +19,11 @@ from opentelemetry.semconv.resource import ResourceAttributes
from llama_stack.apis.telemetry import (
Event,
- GetMetricsResponse,
MetricEvent,
MetricLabelMatcher,
MetricQueryType,
QueryCondition,
+ QueryMetricsResponse,
QuerySpanTreeResponse,
QueryTracesResponse,
Span,
@@ -126,16 +126,16 @@ class TelemetryAdapter(TelemetryDatasetMixin, Telemetry):
else:
raise ValueError(f"Unknown event type: {event}")
- async def get_metrics(
+ async def query_metrics(
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,
- ) -> GetMetricsResponse:
- pass
+ label_matchers: list[MetricLabelMatcher] | None = None,
+ ) -> QueryMetricsResponse:
+ raise NotImplementedError("Querying metrics is not implemented")
def _log_unstructured(self, event: UnstructuredLogEvent, ttl_seconds: int) -> None:
with self._lock: