diff --git a/docs/_static/llama-stack-spec.html b/docs/_static/llama-stack-spec.html
index 1a8169090..b0febbbef 100644
--- a/docs/_static/llama-stack-spec.html
+++ b/docs/_static/llama-stack-spec.html
@@ -363,6 +363,37 @@
}
},
"/v1/agents": {
+ "get": {
+ "responses": {
+ "200": {
+ "description": "A ListAgentsResponse.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ListAgentsResponse"
+ }
+ }
+ }
+ },
+ "400": {
+ "$ref": "#/components/responses/BadRequest400"
+ },
+ "429": {
+ "$ref": "#/components/responses/TooManyRequests429"
+ },
+ "500": {
+ "$ref": "#/components/responses/InternalServerError500"
+ },
+ "default": {
+ "$ref": "#/components/responses/DefaultError"
+ }
+ },
+ "tags": [
+ "Agents"
+ ],
+ "description": "List all agents.",
+ "parameters": []
+ },
"post": {
"responses": {
"200": {
@@ -609,6 +640,47 @@
}
},
"/v1/agents/{agent_id}": {
+ "get": {
+ "responses": {
+ "200": {
+ "description": "An Agent of the agent.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Agent"
+ }
+ }
+ }
+ },
+ "400": {
+ "$ref": "#/components/responses/BadRequest400"
+ },
+ "429": {
+ "$ref": "#/components/responses/TooManyRequests429"
+ },
+ "500": {
+ "$ref": "#/components/responses/InternalServerError500"
+ },
+ "default": {
+ "$ref": "#/components/responses/DefaultError"
+ }
+ },
+ "tags": [
+ "Agents"
+ ],
+ "description": "Describe an agent by its ID.",
+ "parameters": [
+ {
+ "name": "agent_id",
+ "in": "path",
+ "description": "ID of the agent.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ]
+ },
"delete": {
"responses": {
"200": {
@@ -2276,6 +2348,49 @@
]
}
},
+ "/v1/agents/{agent_id}/sessions": {
+ "get": {
+ "responses": {
+ "200": {
+ "description": "A ListAgentSessionsResponse.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ListAgentSessionsResponse"
+ }
+ }
+ }
+ },
+ "400": {
+ "$ref": "#/components/responses/BadRequest400"
+ },
+ "429": {
+ "$ref": "#/components/responses/TooManyRequests429"
+ },
+ "500": {
+ "$ref": "#/components/responses/InternalServerError500"
+ },
+ "default": {
+ "$ref": "#/components/responses/DefaultError"
+ }
+ },
+ "tags": [
+ "Agents"
+ ],
+ "description": "List all session(s) of a given agent.",
+ "parameters": [
+ {
+ "name": "agent_id",
+ "in": "path",
+ "description": "The ID of the agent to list sessions for.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ]
+ }
+ },
"/v1/eval/benchmarks": {
"get": {
"responses": {
@@ -6565,6 +6680,28 @@
"title": "ScoringResult",
"description": "A scoring result for a single row."
},
+ "Agent": {
+ "type": "object",
+ "properties": {
+ "agent_id": {
+ "type": "string"
+ },
+ "agent_config": {
+ "$ref": "#/components/schemas/AgentConfig"
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "agent_id",
+ "agent_config",
+ "created_at"
+ ],
+ "title": "Agent"
+ },
"Session": {
"type": "object",
"properties": {
@@ -7907,6 +8044,38 @@
],
"title": "ToolInvocationResult"
},
+ "ListAgentSessionsResponse": {
+ "type": "object",
+ "properties": {
+ "data": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/Session"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "data"
+ ],
+ "title": "ListAgentSessionsResponse"
+ },
+ "ListAgentsResponse": {
+ "type": "object",
+ "properties": {
+ "data": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/Agent"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "data"
+ ],
+ "title": "ListAgentsResponse"
+ },
"BucketResponse": {
"type": "object",
"properties": {
diff --git a/docs/_static/llama-stack-spec.yaml b/docs/_static/llama-stack-spec.yaml
index d6001c00d..2985e6222 100644
--- a/docs/_static/llama-stack-spec.yaml
+++ b/docs/_static/llama-stack-spec.yaml
@@ -238,6 +238,28 @@ paths:
$ref: '#/components/schemas/CompletionRequest'
required: true
/v1/agents:
+ get:
+ responses:
+ '200':
+ description: A ListAgentsResponse.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ListAgentsResponse'
+ '400':
+ $ref: '#/components/responses/BadRequest400'
+ '429':
+ $ref: >-
+ #/components/responses/TooManyRequests429
+ '500':
+ $ref: >-
+ #/components/responses/InternalServerError500
+ default:
+ $ref: '#/components/responses/DefaultError'
+ tags:
+ - Agents
+ description: List all agents.
+ parameters: []
post:
responses:
'200':
@@ -410,6 +432,34 @@ paths:
$ref: '#/components/schemas/CreateUploadSessionRequest'
required: true
/v1/agents/{agent_id}:
+ get:
+ responses:
+ '200':
+ description: An Agent of the agent.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Agent'
+ '400':
+ $ref: '#/components/responses/BadRequest400'
+ '429':
+ $ref: >-
+ #/components/responses/TooManyRequests429
+ '500':
+ $ref: >-
+ #/components/responses/InternalServerError500
+ default:
+ $ref: '#/components/responses/DefaultError'
+ tags:
+ - Agents
+ description: Describe an agent by its ID.
+ parameters:
+ - name: agent_id
+ in: path
+ description: ID of the agent.
+ required: true
+ schema:
+ type: string
delete:
responses:
'200':
@@ -1528,6 +1578,36 @@ paths:
required: true
schema:
type: string
+ /v1/agents/{agent_id}/sessions:
+ get:
+ responses:
+ '200':
+ description: A ListAgentSessionsResponse.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ListAgentSessionsResponse'
+ '400':
+ $ref: '#/components/responses/BadRequest400'
+ '429':
+ $ref: >-
+ #/components/responses/TooManyRequests429
+ '500':
+ $ref: >-
+ #/components/responses/InternalServerError500
+ default:
+ $ref: '#/components/responses/DefaultError'
+ tags:
+ - Agents
+ description: List all session(s) of a given agent.
+ parameters:
+ - name: agent_id
+ in: path
+ description: >-
+ The ID of the agent to list sessions for.
+ required: true
+ schema:
+ type: string
/v1/eval/benchmarks:
get:
responses:
@@ -4549,6 +4629,22 @@ components:
- aggregated_results
title: ScoringResult
description: A scoring result for a single row.
+ Agent:
+ type: object
+ properties:
+ agent_id:
+ type: string
+ agent_config:
+ $ref: '#/components/schemas/AgentConfig'
+ created_at:
+ type: string
+ format: date-time
+ additionalProperties: false
+ required:
+ - agent_id
+ - agent_config
+ - created_at
+ title: Agent
Session:
type: object
properties:
@@ -5385,6 +5481,28 @@ components:
required:
- content
title: ToolInvocationResult
+ ListAgentSessionsResponse:
+ type: object
+ properties:
+ data:
+ type: array
+ items:
+ $ref: '#/components/schemas/Session'
+ additionalProperties: false
+ required:
+ - data
+ title: ListAgentSessionsResponse
+ ListAgentsResponse:
+ type: object
+ properties:
+ data:
+ type: array
+ items:
+ $ref: '#/components/schemas/Agent'
+ additionalProperties: false
+ required:
+ - data
+ title: ListAgentsResponse
BucketResponse:
type: object
properties:
diff --git a/llama_stack/apis/agents/agents.py b/llama_stack/apis/agents/agents.py
index af4b0ba77..1170a56d5 100644
--- a/llama_stack/apis/agents/agents.py
+++ b/llama_stack/apis/agents/agents.py
@@ -234,6 +234,23 @@ class AgentConfig(AgentConfigCommon):
response_format: Optional[ResponseFormat] = None
+@json_schema_type
+class Agent(BaseModel):
+ agent_id: str
+ agent_config: AgentConfig
+ created_at: datetime
+
+
+@json_schema_type
+class ListAgentsResponse(BaseModel):
+ data: List[Agent]
+
+
+@json_schema_type
+class ListAgentSessionsResponse(BaseModel):
+ data: List[Session]
+
+
class AgentConfigOverridablePerTurn(AgentConfigCommon):
instructions: Optional[str] = None
@@ -541,3 +558,32 @@ class Agents(Protocol):
:param agent_id: The ID of the agent to delete.
"""
...
+
+ @webmethod(route="/agents", method="GET")
+ async def list_agents(self) -> ListAgentsResponse:
+ """List all agents.
+
+ :returns: A ListAgentsResponse.
+ """
+ ...
+
+ @webmethod(route="/agents/{agent_id}", method="GET")
+ async def get_agent(self, agent_id: str) -> Agent:
+ """Describe an agent by its ID.
+
+ :param agent_id: ID of the agent.
+ :returns: An Agent of the agent.
+ """
+ ...
+
+ @webmethod(route="/agents/{agent_id}/sessions", method="GET")
+ async def list_agent_sessions(
+ self,
+ agent_id: str,
+ ) -> ListAgentSessionsResponse:
+ """List all session(s) of a given agent.
+
+ :param agent_id: The ID of the agent to list sessions for.
+ :returns: A ListAgentSessionsResponse.
+ """
+ ...