diff --git a/docs/_static/llama-stack-spec.html b/docs/_static/llama-stack-spec.html
index 4020dc4cd..44c7a4cf5 100644
--- a/docs/_static/llama-stack-spec.html
+++ b/docs/_static/llama-stack-spec.html
@@ -171,6 +171,42 @@
}
}
},
+ "/v1/artifacts/bulk": {
+ "post": {
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "400": {
+ "$ref": "#/components/responses/BadRequest400"
+ },
+ "429": {
+ "$ref": "#/components/responses/TooManyRequests429"
+ },
+ "500": {
+ "$ref": "#/components/responses/InternalServerError500"
+ },
+ "default": {
+ "$ref": "#/components/responses/DefaultError"
+ }
+ },
+ "tags": [
+ "Artifacts"
+ ],
+ "description": "Delete multiple artifacts in a single request.",
+ "parameters": [],
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BulkDeleteArtifactsRequest"
+ }
+ }
+ },
+ "required": true
+ }
+ }
+ },
"/v1/post-training/job/cancel": {
"post": {
"responses": {
@@ -564,7 +600,7 @@
}
}
},
- "/v1/files": {
+ "/v1/artifacts": {
"get": {
"responses": {
"200": {
@@ -572,7 +608,7 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/ListBucketResponse"
+ "$ref": "#/components/schemas/PaginatedResponse"
}
}
}
@@ -591,16 +627,26 @@
}
},
"tags": [
- "Files"
+ "Artifacts"
],
- "description": "List all buckets.",
+ "description": "List all artifacts with pagination.",
"parameters": [
{
- "name": "bucket",
+ "name": "start_index",
"in": "query",
- "required": true,
+ "description": "Start index of the artifacts to list",
+ "required": false,
"schema": {
- "type": "string"
+ "type": "integer"
+ }
+ },
+ {
+ "name": "limit",
+ "in": "query",
+ "description": "Number of artifacts to list",
+ "required": false,
+ "schema": {
+ "type": "integer"
}
}
]
@@ -612,7 +658,7 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/FileUploadResponse"
+ "$ref": "#/components/schemas/ArtifactUploadResponse"
}
}
}
@@ -631,9 +677,9 @@
}
},
"tags": [
- "Files"
+ "Artifacts"
],
- "description": "Create a new upload session for a file identified by a bucket and key.",
+ "description": "Create a new upload session for an artifact identified by a key.",
"parameters": [],
"requestBody": {
"content": {
@@ -831,7 +877,7 @@
]
}
},
- "/v1/files/{bucket}/{key}": {
+ "/v1/artifacts/{key}": {
"get": {
"responses": {
"200": {
@@ -839,7 +885,7 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/FileResponse"
+ "$ref": "#/components/schemas/ArtifactResponse"
}
}
}
@@ -858,23 +904,14 @@
}
},
"tags": [
- "Files"
+ "Artifacts"
],
- "description": "Get a file info identified by a bucket and key.",
+ "description": "Get an artifact info identified by a key.",
"parameters": [
- {
- "name": "bucket",
- "in": "path",
- "description": "Bucket name (valid chars: a-zA-Z0-9_-)",
- "required": true,
- "schema": {
- "type": "string"
- }
- },
{
"name": "key",
"in": "path",
- "description": "Key under which the file is stored (valid chars: a-zA-Z0-9_-/.)",
+ "description": "Key under which the artifact is stored (valid chars: a-zA-Z0-9_-/.)",
"required": true,
"schema": {
"type": "string"
@@ -901,23 +938,14 @@
}
},
"tags": [
- "Files"
+ "Artifacts"
],
- "description": "Delete a file identified by a bucket and key.",
+ "description": "Delete an artifact identified by a key.",
"parameters": [
- {
- "name": "bucket",
- "in": "path",
- "description": "Bucket name (valid chars: a-zA-Z0-9_-)",
- "required": true,
- "schema": {
- "type": "string"
- }
- },
{
"name": "key",
"in": "path",
- "description": "Key under which the file is stored (valid chars: a-zA-Z0-9_-/.)",
+ "description": "Key under which the artifact is stored (valid chars: a-zA-Z0-9_-/.)",
"required": true,
"schema": {
"type": "string"
@@ -1850,7 +1878,7 @@
"parameters": []
}
},
- "/v1/files/session:{upload_id}": {
+ "/v1/artifacts/sessions/{upload_id}": {
"get": {
"responses": {
"200": {
@@ -1858,7 +1886,7 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/FileUploadResponse"
+ "$ref": "#/components/schemas/ArtifactUploadResponse"
}
}
}
@@ -1877,9 +1905,9 @@
}
},
"tags": [
- "Files"
+ "Artifacts"
],
- "description": "Returns information about an existsing upload session",
+ "description": "Returns information about an existing upload session",
"parameters": [
{
"name": "upload_id",
@@ -1901,7 +1929,7 @@
"schema": {
"oneOf": [
{
- "$ref": "#/components/schemas/FileResponse"
+ "$ref": "#/components/schemas/ArtifactResponse"
},
{
"type": "null"
@@ -1925,9 +1953,9 @@
}
},
"tags": [
- "Files"
+ "Artifacts"
],
- "description": "Upload file content to an existing upload session. On the server, request body will have the raw bytes that are uploaded.",
+ "description": "Upload artifact content to an existing upload session. On the server, request body will have the raw bytes that are uploaded.",
"parameters": [
{
"name": "upload_id",
@@ -2627,49 +2655,6 @@
}
}
},
- "/v1/files/{bucket}": {
- "get": {
- "responses": {
- "200": {
- "description": "OK",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ListFileResponse"
- }
- }
- }
- },
- "400": {
- "$ref": "#/components/responses/BadRequest400"
- },
- "429": {
- "$ref": "#/components/responses/TooManyRequests429"
- },
- "500": {
- "$ref": "#/components/responses/InternalServerError500"
- },
- "default": {
- "$ref": "#/components/responses/DefaultError"
- }
- },
- "tags": [
- "Files"
- ],
- "description": "List all files in a bucket.",
- "parameters": [
- {
- "name": "bucket",
- "in": "path",
- "description": "Bucket name (valid chars: a-zA-Z0-9_-)",
- "required": true,
- "schema": {
- "type": "string"
- }
- }
- ]
- }
- },
"/v1/models": {
"get": {
"responses": {
@@ -5022,6 +5007,53 @@
"title": "CompletionResponse",
"description": "Response from a completion request."
},
+ "ArtifactDeleteRequest": {
+ "type": "object",
+ "properties": {
+ "key": {
+ "type": "string",
+ "description": "Key under which the artifact is stored (valid chars: a-zA-Z0-9_-/.)"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "key"
+ ],
+ "title": "ArtifactDeleteRequest",
+ "description": "Request model for deleting a single artifact."
+ },
+ "BulkDeleteRequest": {
+ "type": "object",
+ "properties": {
+ "artifacts": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/ArtifactDeleteRequest"
+ },
+ "description": "List of artifacts to delete"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "artifacts"
+ ],
+ "title": "BulkDeleteRequest",
+ "description": "Request model for bulk deletion of artifacts."
+ },
+ "BulkDeleteArtifactsRequest": {
+ "type": "object",
+ "properties": {
+ "request": {
+ "$ref": "#/components/schemas/BulkDeleteRequest",
+ "description": "Bulk delete request containing list of artifacts to delete"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "request"
+ ],
+ "title": "BulkDeleteArtifactsRequest"
+ },
"CancelTrainingJobRequest": {
"type": "object",
"properties": {
@@ -6893,42 +6925,37 @@
"CreateUploadSessionRequest": {
"type": "object",
"properties": {
- "bucket": {
- "type": "string",
- "description": "Bucket under which the file is stored (valid chars: a-zA-Z0-9_-)"
- },
"key": {
"type": "string",
- "description": "Key under which the file is stored (valid chars: a-zA-Z0-9_-/.)"
+ "description": "Key under which the artifact is stored (valid chars: a-zA-Z0-9_-/.)"
},
"mime_type": {
"type": "string",
- "description": "MIME type of the file"
+ "description": "MIME type of the artifact"
},
"size": {
"type": "integer",
- "description": "File size in bytes"
+ "description": "Artifact size in bytes"
}
},
"additionalProperties": false,
"required": [
- "bucket",
"key",
"mime_type",
"size"
],
"title": "CreateUploadSessionRequest"
},
- "FileUploadResponse": {
+ "ArtifactUploadResponse": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "ID of the upload session"
},
- "url": {
+ "uri": {
"type": "string",
- "description": "Upload URL for the file or file parts"
+ "description": "Upload URI for the artifact or artifact parts"
},
"offset": {
"type": "integer",
@@ -6942,12 +6969,12 @@
"additionalProperties": false,
"required": [
"id",
- "url",
+ "uri",
"offset",
"size"
],
- "title": "FileUploadResponse",
- "description": "Response after initiating a file upload session."
+ "title": "ArtifactUploadResponse",
+ "description": "Response after initiating an artifact upload session."
},
"EmbeddingsRequest": {
"type": "object",
@@ -7500,6 +7527,41 @@
],
"title": "AgentStepResponse"
},
+ "ArtifactResponse": {
+ "type": "object",
+ "properties": {
+ "key": {
+ "type": "string",
+ "description": "Key under which the artifact is stored (valid chars: a-zA-Z0-9_-/.)"
+ },
+ "mime_type": {
+ "type": "string",
+ "description": "MIME type of the artifact"
+ },
+ "uri": {
+ "type": "string",
+ "description": "Upload URI for the artifact contents"
+ },
+ "size": {
+ "type": "integer",
+ "description": "Size of the artifact in bytes"
+ },
+ "created_at": {
+ "type": "integer",
+ "description": "Timestamp of when the artifact was created"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "key",
+ "mime_type",
+ "uri",
+ "size",
+ "created_at"
+ ],
+ "title": "ArtifactResponse",
+ "description": "Response representing an artifact entry."
+ },
"Benchmark": {
"type": "object",
"properties": {
@@ -7736,46 +7798,6 @@
"title": "URIDataSource",
"description": "A dataset that can be obtained from a URI."
},
- "FileResponse": {
- "type": "object",
- "properties": {
- "bucket": {
- "type": "string",
- "description": "Bucket under which the file is stored (valid chars: a-zA-Z0-9_-)"
- },
- "key": {
- "type": "string",
- "description": "Key under which the file is stored (valid chars: a-zA-Z0-9_-/.)"
- },
- "mime_type": {
- "type": "string",
- "description": "MIME type of the file"
- },
- "url": {
- "type": "string",
- "description": "Upload URL for the file contents"
- },
- "bytes": {
- "type": "integer",
- "description": "Size of the file in bytes"
- },
- "created_at": {
- "type": "integer",
- "description": "Timestamp of when the file was created"
- }
- },
- "additionalProperties": false,
- "required": [
- "bucket",
- "key",
- "mime_type",
- "url",
- "bytes",
- "created_at"
- ],
- "title": "FileResponse",
- "description": "Response representing a file entry."
- },
"Model": {
"type": "object",
"properties": {
@@ -9019,32 +9041,7 @@
"type": "object",
"properties": {
"data": {
- "type": "array",
- "items": {
- "type": "object",
- "additionalProperties": {
- "oneOf": [
- {
- "type": "null"
- },
- {
- "type": "boolean"
- },
- {
- "type": "number"
- },
- {
- "type": "string"
- },
- {
- "type": "array"
- },
- {
- "type": "object"
- }
- ]
- }
- },
+ "type": "object",
"description": "The list of items for the current page"
},
"has_more": {
@@ -9085,37 +9082,6 @@
],
"title": "Job"
},
- "BucketResponse": {
- "type": "object",
- "properties": {
- "name": {
- "type": "string"
- }
- },
- "additionalProperties": false,
- "required": [
- "name"
- ],
- "title": "BucketResponse"
- },
- "ListBucketResponse": {
- "type": "object",
- "properties": {
- "data": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/BucketResponse"
- },
- "description": "List of FileResponse entries"
- }
- },
- "additionalProperties": false,
- "required": [
- "data"
- ],
- "title": "ListBucketResponse",
- "description": "Response representing a list of file entries."
- },
"ListBenchmarksResponse": {
"type": "object",
"properties": {
@@ -9148,24 +9114,6 @@
],
"title": "ListDatasetsResponse"
},
- "ListFileResponse": {
- "type": "object",
- "properties": {
- "data": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/FileResponse"
- },
- "description": "List of FileResponse entries"
- }
- },
- "additionalProperties": false,
- "required": [
- "data"
- ],
- "title": "ListFileResponse",
- "description": "Response representing a list of file entries."
- },
"ListModelsResponse": {
"type": "object",
"properties": {
@@ -12485,6 +12433,9 @@
"description": "Main functionalities provided by this API:\n- Create agents with specific instructions and ability to use tools.\n- Interactions with agents are grouped into sessions (\"threads\"), and each interaction is called a \"turn\".\n- Agents can be provided with various tools (see the ToolGroups and ToolRuntime APIs for more details).\n- Agents can be provided with various shields (see the Safety API for more details).\n- Agents can also use Memory to retrieve information from knowledge bases. See the RAG Tool and Vector IO APIs for more details.",
"x-displayName": "Agents API for creating and interacting with agentic systems."
},
+ {
+ "name": "Artifacts"
+ },
{
"name": "BatchInference (Coming Soon)",
"description": "This is an asynchronous API. If the request is successful, the response will be a job which can be polled for completion.\n\nNOTE: This API is not yet implemented and is subject to change in concert with other asynchronous APIs\nincluding (post-training, evals, etc).",
@@ -12503,9 +12454,6 @@
"name": "Eval",
"x-displayName": "Llama Stack Evaluation API for running evaluations on model and agent candidates."
},
- {
- "name": "Files"
- },
{
"name": "Inference",
"description": "This API provides the raw interface to the underlying models. Two kinds of models are supported:\n- LLM models: these models generate \"raw\" and \"chat\" (conversational) completions.\n- Embedding models: these models generate embeddings to be used for semantic search.",
@@ -12560,12 +12508,12 @@
"name": "Operations",
"tags": [
"Agents",
+ "Artifacts",
"BatchInference (Coming Soon)",
"Benchmarks",
"DatasetIO",
"Datasets",
"Eval",
- "Files",
"Inference",
"Inspect",
"Models",
diff --git a/docs/_static/llama-stack-spec.yaml b/docs/_static/llama-stack-spec.yaml
index 62e3ca85c..301cf430a 100644
--- a/docs/_static/llama-stack-spec.yaml
+++ b/docs/_static/llama-stack-spec.yaml
@@ -98,6 +98,32 @@ paths:
schema:
$ref: '#/components/schemas/BatchCompletionRequest'
required: true
+ /v1/artifacts/bulk:
+ post:
+ responses:
+ '200':
+ description: OK
+ '400':
+ $ref: '#/components/responses/BadRequest400'
+ '429':
+ $ref: >-
+ #/components/responses/TooManyRequests429
+ '500':
+ $ref: >-
+ #/components/responses/InternalServerError500
+ default:
+ $ref: '#/components/responses/DefaultError'
+ tags:
+ - Artifacts
+ description: >-
+ Delete multiple artifacts in a single request.
+ parameters: []
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/BulkDeleteArtifactsRequest'
+ required: true
/v1/post-training/job/cancel:
post:
responses:
@@ -375,7 +401,7 @@ paths:
schema:
$ref: '#/components/schemas/CreateOpenaiResponseRequest'
required: true
- /v1/files:
+ /v1/artifacts:
get:
responses:
'200':
@@ -383,7 +409,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/ListBucketResponse'
+ $ref: '#/components/schemas/PaginatedResponse'
'400':
$ref: '#/components/responses/BadRequest400'
'429':
@@ -395,14 +421,21 @@ paths:
default:
$ref: '#/components/responses/DefaultError'
tags:
- - Files
- description: List all buckets.
+ - Artifacts
+ description: List all artifacts with pagination.
parameters:
- - name: bucket
+ - name: start_index
in: query
- required: true
+ description: Start index of the artifacts to list
+ required: false
schema:
- type: string
+ type: integer
+ - name: limit
+ in: query
+ description: Number of artifacts to list
+ required: false
+ schema:
+ type: integer
post:
responses:
'200':
@@ -410,7 +443,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/FileUploadResponse'
+ $ref: '#/components/schemas/ArtifactUploadResponse'
'400':
$ref: '#/components/responses/BadRequest400'
'429':
@@ -422,9 +455,9 @@ paths:
default:
$ref: '#/components/responses/DefaultError'
tags:
- - Files
+ - Artifacts
description: >-
- Create a new upload session for a file identified by a bucket and key.
+ Create a new upload session for an artifact identified by a key.
parameters: []
requestBody:
content:
@@ -563,7 +596,7 @@ paths:
required: true
schema:
type: string
- /v1/files/{bucket}/{key}:
+ /v1/artifacts/{key}:
get:
responses:
'200':
@@ -571,7 +604,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/FileResponse'
+ $ref: '#/components/schemas/ArtifactResponse'
'400':
$ref: '#/components/responses/BadRequest400'
'429':
@@ -583,20 +616,14 @@ paths:
default:
$ref: '#/components/responses/DefaultError'
tags:
- - Files
+ - Artifacts
description: >-
- Get a file info identified by a bucket and key.
+ Get an artifact info identified by a key.
parameters:
- - name: bucket
- in: path
- description: 'Bucket name (valid chars: a-zA-Z0-9_-)'
- required: true
- schema:
- type: string
- name: key
in: path
description: >-
- Key under which the file is stored (valid chars: a-zA-Z0-9_-/.)
+ Key under which the artifact is stored (valid chars: a-zA-Z0-9_-/.)
required: true
schema:
type: string
@@ -615,20 +642,13 @@ paths:
default:
$ref: '#/components/responses/DefaultError'
tags:
- - Files
- description: >-
- Delete a file identified by a bucket and key.
+ - Artifacts
+ description: Delete an artifact identified by a key.
parameters:
- - name: bucket
- in: path
- description: 'Bucket name (valid chars: a-zA-Z0-9_-)'
- required: true
- schema:
- type: string
- name: key
in: path
description: >-
- Key under which the file is stored (valid chars: a-zA-Z0-9_-/.)
+ Key under which the artifact is stored (valid chars: a-zA-Z0-9_-/.)
required: true
schema:
type: string
@@ -1261,7 +1281,7 @@ paths:
- PostTraining (Coming Soon)
description: ''
parameters: []
- /v1/files/session:{upload_id}:
+ /v1/artifacts/sessions/{upload_id}:
get:
responses:
'200':
@@ -1269,7 +1289,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/FileUploadResponse'
+ $ref: '#/components/schemas/ArtifactUploadResponse'
'400':
$ref: '#/components/responses/BadRequest400'
'429':
@@ -1281,9 +1301,9 @@ paths:
default:
$ref: '#/components/responses/DefaultError'
tags:
- - Files
+ - Artifacts
description: >-
- Returns information about an existsing upload session
+ Returns information about an existing upload session
parameters:
- name: upload_id
in: path
@@ -1299,7 +1319,7 @@ paths:
application/json:
schema:
oneOf:
- - $ref: '#/components/schemas/FileResponse'
+ - $ref: '#/components/schemas/ArtifactResponse'
- type: 'null'
'400':
$ref: '#/components/responses/BadRequest400'
@@ -1312,9 +1332,9 @@ paths:
default:
$ref: '#/components/responses/DefaultError'
tags:
- - Files
+ - Artifacts
description: >-
- Upload file content to an existing upload session. On the server, request
+ Upload artifact content to an existing upload session. On the server, request
body will have the raw bytes that are uploaded.
parameters:
- name: upload_id
@@ -1812,35 +1832,6 @@ paths:
schema:
$ref: '#/components/schemas/RegisterDatasetRequest'
required: true
- /v1/files/{bucket}:
- get:
- responses:
- '200':
- description: OK
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/ListFileResponse'
- '400':
- $ref: '#/components/responses/BadRequest400'
- '429':
- $ref: >-
- #/components/responses/TooManyRequests429
- '500':
- $ref: >-
- #/components/responses/InternalServerError500
- default:
- $ref: '#/components/responses/DefaultError'
- tags:
- - Files
- description: List all files in a bucket.
- parameters:
- - name: bucket
- in: path
- description: 'Bucket name (valid chars: a-zA-Z0-9_-)'
- required: true
- schema:
- type: string
/v1/models:
get:
responses:
@@ -3489,6 +3480,44 @@ components:
- stop_reason
title: CompletionResponse
description: Response from a completion request.
+ ArtifactDeleteRequest:
+ type: object
+ properties:
+ key:
+ type: string
+ description: >-
+ Key under which the artifact is stored (valid chars: a-zA-Z0-9_-/.)
+ additionalProperties: false
+ required:
+ - key
+ title: ArtifactDeleteRequest
+ description: >-
+ Request model for deleting a single artifact.
+ BulkDeleteRequest:
+ type: object
+ properties:
+ artifacts:
+ type: array
+ items:
+ $ref: '#/components/schemas/ArtifactDeleteRequest'
+ description: List of artifacts to delete
+ additionalProperties: false
+ required:
+ - artifacts
+ title: BulkDeleteRequest
+ description: >-
+ Request model for bulk deletion of artifacts.
+ BulkDeleteArtifactsRequest:
+ type: object
+ properties:
+ request:
+ $ref: '#/components/schemas/BulkDeleteRequest'
+ description: >-
+ Bulk delete request containing list of artifacts to delete
+ additionalProperties: false
+ required:
+ - request
+ title: BulkDeleteArtifactsRequest
CancelTrainingJobRequest:
type: object
properties:
@@ -4826,36 +4855,32 @@ components:
CreateUploadSessionRequest:
type: object
properties:
- bucket:
- type: string
- description: >-
- Bucket under which the file is stored (valid chars: a-zA-Z0-9_-)
key:
type: string
description: >-
- Key under which the file is stored (valid chars: a-zA-Z0-9_-/.)
+ Key under which the artifact is stored (valid chars: a-zA-Z0-9_-/.)
mime_type:
type: string
- description: MIME type of the file
+ description: MIME type of the artifact
size:
type: integer
- description: File size in bytes
+ description: Artifact size in bytes
additionalProperties: false
required:
- - bucket
- key
- mime_type
- size
title: CreateUploadSessionRequest
- FileUploadResponse:
+ ArtifactUploadResponse:
type: object
properties:
id:
type: string
description: ID of the upload session
- url:
+ uri:
type: string
- description: Upload URL for the file or file parts
+ description: >-
+ Upload URI for the artifact or artifact parts
offset:
type: integer
description: Upload content offset
@@ -4865,12 +4890,12 @@ components:
additionalProperties: false
required:
- id
- - url
+ - uri
- offset
- size
- title: FileUploadResponse
+ title: ArtifactUploadResponse
description: >-
- Response after initiating a file upload session.
+ Response after initiating an artifact upload session.
EmbeddingsRequest:
type: object
properties:
@@ -5254,6 +5279,35 @@ components:
required:
- step
title: AgentStepResponse
+ ArtifactResponse:
+ type: object
+ properties:
+ key:
+ type: string
+ description: >-
+ Key under which the artifact is stored (valid chars: a-zA-Z0-9_-/.)
+ mime_type:
+ type: string
+ description: MIME type of the artifact
+ uri:
+ type: string
+ description: Upload URI for the artifact contents
+ size:
+ type: integer
+ description: Size of the artifact in bytes
+ created_at:
+ type: integer
+ description: >-
+ Timestamp of when the artifact was created
+ additionalProperties: false
+ required:
+ - key
+ - mime_type
+ - uri
+ - size
+ - created_at
+ title: ArtifactResponse
+ description: Response representing an artifact entry.
Benchmark:
type: object
properties:
@@ -5412,39 +5466,6 @@ components:
title: URIDataSource
description: >-
A dataset that can be obtained from a URI.
- FileResponse:
- type: object
- properties:
- bucket:
- type: string
- description: >-
- Bucket under which the file is stored (valid chars: a-zA-Z0-9_-)
- key:
- type: string
- description: >-
- Key under which the file is stored (valid chars: a-zA-Z0-9_-/.)
- mime_type:
- type: string
- description: MIME type of the file
- url:
- type: string
- description: Upload URL for the file contents
- bytes:
- type: integer
- description: Size of the file in bytes
- created_at:
- type: integer
- description: Timestamp of when the file was created
- additionalProperties: false
- required:
- - bucket
- - key
- - mime_type
- - url
- - bytes
- - created_at
- title: FileResponse
- description: Response representing a file entry.
Model:
type: object
properties:
@@ -6235,17 +6256,7 @@ components:
type: object
properties:
data:
- type: array
- items:
- type: object
- additionalProperties:
- oneOf:
- - type: 'null'
- - type: boolean
- - type: number
- - type: string
- - type: array
- - type: object
+ type: object
description: The list of items for the current page
has_more:
type: boolean
@@ -6277,29 +6288,6 @@ components:
- job_id
- status
title: Job
- BucketResponse:
- type: object
- properties:
- name:
- type: string
- additionalProperties: false
- required:
- - name
- title: BucketResponse
- ListBucketResponse:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/BucketResponse'
- description: List of FileResponse entries
- additionalProperties: false
- required:
- - data
- title: ListBucketResponse
- description: >-
- Response representing a list of file entries.
ListBenchmarksResponse:
type: object
properties:
@@ -6322,20 +6310,6 @@ components:
required:
- data
title: ListDatasetsResponse
- ListFileResponse:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/FileResponse'
- description: List of FileResponse entries
- additionalProperties: false
- required:
- - data
- title: ListFileResponse
- description: >-
- Response representing a list of file entries.
ListModelsResponse:
type: object
properties:
@@ -8561,6 +8535,7 @@ tags:
the RAG Tool and Vector IO APIs for more details.
x-displayName: >-
Agents API for creating and interacting with agentic systems.
+ - name: Artifacts
- name: BatchInference (Coming Soon)
description: >-
This is an asynchronous API. If the request is successful, the response will
@@ -8579,7 +8554,6 @@ tags:
- name: Eval
x-displayName: >-
Llama Stack Evaluation API for running evaluations on model and agent candidates.
- - name: Files
- name: Inference
description: >-
This API provides the raw interface to the underlying models. Two kinds of models
@@ -8612,12 +8586,12 @@ x-tagGroups:
- name: Operations
tags:
- Agents
+ - Artifacts
- BatchInference (Coming Soon)
- Benchmarks
- DatasetIO
- Datasets
- Eval
- - Files
- Inference
- Inspect
- Models
diff --git a/llama_stack/apis/files/__init__.py b/llama_stack/apis/artifacts/__init__.py
similarity index 82%
rename from llama_stack/apis/files/__init__.py
rename to llama_stack/apis/artifacts/__init__.py
index 269baf177..0eda1e7de 100644
--- a/llama_stack/apis/files/__init__.py
+++ b/llama_stack/apis/artifacts/__init__.py
@@ -4,4 +4,4 @@
# This source code is licensed under the terms described in the LICENSE file in
# the root directory of this source tree.
-from .files import * # noqa: F401 F403
+from .artifacts import * # noqa: F401 F403
diff --git a/llama_stack/apis/artifacts/artifacts.py b/llama_stack/apis/artifacts/artifacts.py
new file mode 100644
index 000000000..111fdf7f9
--- /dev/null
+++ b/llama_stack/apis/artifacts/artifacts.py
@@ -0,0 +1,166 @@
+# Copyright (c) Meta Platforms, Inc. and affiliates.
+# All rights reserved.
+#
+# This source code is licensed under the terms described in the LICENSE file in
+# the root directory of this source tree.
+
+from typing import Protocol, runtime_checkable
+
+from pydantic import BaseModel
+
+from llama_stack.apis.common.responses import PaginatedResponse
+from llama_stack.providers.utils.telemetry.trace_protocol import trace_protocol
+from llama_stack.schema_utils import json_schema_type, webmethod
+
+
+@json_schema_type
+class ArtifactUploadResponse(BaseModel):
+ """
+ Response after initiating an artifact upload session.
+
+ :param id: ID of the upload session
+ :param uri: Upload URI for the artifact or artifact parts
+ :param offset: Upload content offset
+ :param size: Upload content size
+ """
+
+ id: str
+ uri: str
+ offset: int
+ size: int
+
+
+@json_schema_type
+class ArtifactResponse(BaseModel):
+ """
+ Response representing an artifact entry.
+
+ :param key: Key under which the artifact is stored (valid chars: a-zA-Z0-9_-/.)
+ :param mime_type: MIME type of the artifact
+ :param uri: Upload URI for the artifact contents
+ :param size: Size of the artifact in bytes
+ :param created_at: Timestamp of when the artifact was created
+ """
+
+ key: str
+ mime_type: str
+ uri: str
+ size: int
+ created_at: int
+
+
+@json_schema_type
+class ArtifactDeleteRequest(BaseModel):
+ """
+ Request model for deleting a single artifact.
+
+ :param key: Key under which the artifact is stored (valid chars: a-zA-Z0-9_-/.)
+ """
+
+ key: str
+
+
+@json_schema_type
+class BulkDeleteRequest(BaseModel):
+ """
+ Request model for bulk deletion of artifacts.
+
+ :param artifacts: List of artifacts to delete
+ """
+
+ artifacts: list[ArtifactDeleteRequest]
+
+
+@runtime_checkable
+@trace_protocol
+class Artifacts(Protocol):
+ @webmethod(route="/artifacts", method="POST")
+ async def create_upload_session(
+ self,
+ key: str,
+ mime_type: str,
+ size: int,
+ ) -> ArtifactUploadResponse:
+ """
+ Create a new upload session for an artifact identified by a key.
+
+ :param key: Key under which the artifact is stored (valid chars: a-zA-Z0-9_-/.)
+ :param mime_type: MIME type of the artifact
+ :param size: Artifact size in bytes
+ """
+ ...
+
+ @webmethod(route="/artifacts/sessions/{upload_id}", method="POST", raw_bytes_request_body=True)
+ async def upload_content_to_session(
+ self,
+ upload_id: str,
+ ) -> ArtifactResponse | None:
+ """
+ Upload artifact content to an existing upload session.
+ On the server, request body will have the raw bytes that are uploaded.
+
+ :param upload_id: ID of the upload session
+ """
+ ...
+
+ @webmethod(route="/artifacts/sessions/{upload_id}", method="GET")
+ async def get_upload_session_info(
+ self,
+ upload_id: str,
+ ) -> ArtifactUploadResponse:
+ """
+ Returns information about an existing upload session
+
+ :param upload_id: ID of the upload session
+ """
+ ...
+
+ @webmethod(route="/artifacts", method="GET")
+ async def list_artifacts(
+ self,
+ start_index: int | None = None,
+ limit: int | None = None,
+ ) -> PaginatedResponse:
+ """
+ List all artifacts with pagination.
+
+ :param start_index: Start index of the artifacts to list
+ :param limit: Number of artifacts to list
+ """
+ ...
+
+ @webmethod(route="/artifacts/{key:path}", method="GET")
+ async def get_artifact(
+ self,
+ key: str,
+ ) -> ArtifactResponse:
+ """
+ Get an artifact info identified by a key.
+
+ :param key: Key under which the artifact is stored (valid chars: a-zA-Z0-9_-/.)
+ """
+ ...
+
+ @webmethod(route="/artifacts/{key:path}", method="DELETE")
+ async def delete_artifact(
+ self,
+ key: str,
+ ) -> None:
+ """
+ Delete an artifact identified by a key.
+
+ :param key: Key under which the artifact is stored (valid chars: a-zA-Z0-9_-/.)
+ """
+ ...
+
+ @webmethod(route="/artifacts/bulk", method="POST")
+ async def bulk_delete_artifacts(
+ self,
+ request: BulkDeleteRequest,
+ ) -> None:
+ """
+ Delete multiple artifacts in a single request.
+
+ :param request: Bulk delete request containing list of artifacts to delete
+ """
+ ...
diff --git a/llama_stack/apis/common/responses.py b/llama_stack/apis/common/responses.py
index b3bb5cb6b..c7c40c87d 100644
--- a/llama_stack/apis/common/responses.py
+++ b/llama_stack/apis/common/responses.py
@@ -4,8 +4,6 @@
# This source code is licensed under the terms described in the LICENSE file in
# the root directory of this source tree.
-from typing import Any
-
from pydantic import BaseModel
from llama_stack.schema_utils import json_schema_type
@@ -19,5 +17,5 @@ class PaginatedResponse(BaseModel):
:param has_more: Whether there are more items available after this set
"""
- data: list[dict[str, Any]]
+ data: list
has_more: bool
diff --git a/llama_stack/apis/datatypes.py b/llama_stack/apis/datatypes.py
index 63a764725..35844034a 100644
--- a/llama_stack/apis/datatypes.py
+++ b/llama_stack/apis/datatypes.py
@@ -33,7 +33,7 @@ class Api(Enum):
scoring_functions = "scoring_functions"
benchmarks = "benchmarks"
tool_groups = "tool_groups"
- files = "files"
+ artifacts = "artifacts"
# built-in API
inspect = "inspect"
diff --git a/llama_stack/apis/files/files.py b/llama_stack/apis/files/files.py
deleted file mode 100644
index 4a9b49978..000000000
--- a/llama_stack/apis/files/files.py
+++ /dev/null
@@ -1,174 +0,0 @@
-# Copyright (c) Meta Platforms, Inc. and affiliates.
-# All rights reserved.
-#
-# This source code is licensed under the terms described in the LICENSE file in
-# the root directory of this source tree.
-
-from typing import Protocol, runtime_checkable
-
-from pydantic import BaseModel
-
-from llama_stack.providers.utils.telemetry.trace_protocol import trace_protocol
-from llama_stack.schema_utils import json_schema_type, webmethod
-
-
-@json_schema_type
-class FileUploadResponse(BaseModel):
- """
- Response after initiating a file upload session.
-
- :param id: ID of the upload session
- :param url: Upload URL for the file or file parts
- :param offset: Upload content offset
- :param size: Upload content size
- """
-
- id: str
- url: str
- offset: int
- size: int
-
-
-@json_schema_type
-class BucketResponse(BaseModel):
- name: str
-
-
-@json_schema_type
-class ListBucketResponse(BaseModel):
- """
- Response representing a list of file entries.
-
- :param data: List of FileResponse entries
- """
-
- data: list[BucketResponse]
-
-
-@json_schema_type
-class FileResponse(BaseModel):
- """
- Response representing a file entry.
-
- :param bucket: Bucket under which the file is stored (valid chars: a-zA-Z0-9_-)
- :param key: Key under which the file is stored (valid chars: a-zA-Z0-9_-/.)
- :param mime_type: MIME type of the file
- :param url: Upload URL for the file contents
- :param bytes: Size of the file in bytes
- :param created_at: Timestamp of when the file was created
- """
-
- bucket: str
- key: str
- mime_type: str
- url: str
- bytes: int
- created_at: int
-
-
-@json_schema_type
-class ListFileResponse(BaseModel):
- """
- Response representing a list of file entries.
-
- :param data: List of FileResponse entries
- """
-
- data: list[FileResponse]
-
-
-@runtime_checkable
-@trace_protocol
-class Files(Protocol):
- @webmethod(route="/files", method="POST")
- async def create_upload_session(
- self,
- bucket: str,
- key: str,
- mime_type: str,
- size: int,
- ) -> FileUploadResponse:
- """
- Create a new upload session for a file identified by a bucket and key.
-
- :param bucket: Bucket under which the file is stored (valid chars: a-zA-Z0-9_-)
- :param key: Key under which the file is stored (valid chars: a-zA-Z0-9_-/.)
- :param mime_type: MIME type of the file
- :param size: File size in bytes
- """
- ...
-
- @webmethod(route="/files/session:{upload_id}", method="POST", raw_bytes_request_body=True)
- async def upload_content_to_session(
- self,
- upload_id: str,
- ) -> FileResponse | None:
- """
- Upload file content to an existing upload session.
- On the server, request body will have the raw bytes that are uploaded.
-
- :param upload_id: ID of the upload session
- """
- ...
-
- @webmethod(route="/files/session:{upload_id}", method="GET")
- async def get_upload_session_info(
- self,
- upload_id: str,
- ) -> FileUploadResponse:
- """
- Returns information about an existsing upload session
-
- :param upload_id: ID of the upload session
- """
- ...
-
- @webmethod(route="/files", method="GET")
- async def list_all_buckets(
- self,
- bucket: str,
- ) -> ListBucketResponse:
- """
- List all buckets.
- """
- ...
-
- @webmethod(route="/files/{bucket}", method="GET")
- async def list_files_in_bucket(
- self,
- bucket: str,
- ) -> ListFileResponse:
- """
- List all files in a bucket.
-
- :param bucket: Bucket name (valid chars: a-zA-Z0-9_-)
- """
- ...
-
- @webmethod(route="/files/{bucket}/{key:path}", method="GET")
- async def get_file(
- self,
- bucket: str,
- key: str,
- ) -> FileResponse:
- """
- Get a file info identified by a bucket and key.
-
- :param bucket: Bucket name (valid chars: a-zA-Z0-9_-)
- :param key: Key under which the file is stored (valid chars: a-zA-Z0-9_-/.)
- """
- ...
-
- @webmethod(route="/files/{bucket}/{key:path}", method="DELETE")
- async def delete_file(
- self,
- bucket: str,
- key: str,
- ) -> None:
- """
- Delete a file identified by a bucket and key.
-
- :param bucket: Bucket name (valid chars: a-zA-Z0-9_-)
- :param key: Key under which the file is stored (valid chars: a-zA-Z0-9_-/.)
- """
- ...
diff --git a/llama_stack/distribution/resolver.py b/llama_stack/distribution/resolver.py
index 37588ea64..76b0a2136 100644
--- a/llama_stack/distribution/resolver.py
+++ b/llama_stack/distribution/resolver.py
@@ -8,11 +8,11 @@ import inspect
from typing import Any
from llama_stack.apis.agents import Agents
+from llama_stack.apis.artifacts import Artifacts
from llama_stack.apis.benchmarks import Benchmarks
from llama_stack.apis.datasetio import DatasetIO
from llama_stack.apis.datasets import Datasets
from llama_stack.apis.eval import Eval
-from llama_stack.apis.files import Files
from llama_stack.apis.inference import Inference
from llama_stack.apis.inspect import Inspect
from llama_stack.apis.models import Models
@@ -79,7 +79,7 @@ def api_protocol_map() -> dict[Api, Any]:
Api.post_training: PostTraining,
Api.tool_groups: ToolGroups,
Api.tool_runtime: ToolRuntime,
- Api.files: Files,
+ Api.artifacts: Artifacts,
}
diff --git a/llama_stack/distribution/stack.py b/llama_stack/distribution/stack.py
index fc68dc016..3024a8ac3 100644
--- a/llama_stack/distribution/stack.py
+++ b/llama_stack/distribution/stack.py
@@ -13,12 +13,12 @@ from typing import Any
import yaml
from llama_stack.apis.agents import Agents
+from llama_stack.apis.artifacts import Artifacts
from llama_stack.apis.batch_inference import BatchInference
from llama_stack.apis.benchmarks import Benchmarks
from llama_stack.apis.datasetio import DatasetIO
from llama_stack.apis.datasets import Datasets
from llama_stack.apis.eval import Eval
-from llama_stack.apis.files import Files
from llama_stack.apis.inference import Inference
from llama_stack.apis.inspect import Inspect
from llama_stack.apis.models import Models
@@ -69,7 +69,7 @@ class LlamaStack(
ToolGroups,
ToolRuntime,
RAGToolRuntime,
- Files,
+ Artifacts,
):
pass
diff --git a/llama_stack/providers/utils/scheduler.py b/llama_stack/providers/utils/scheduler.py
index 845ab1f02..31a686a51 100644
--- a/llama_stack/providers/utils/scheduler.py
+++ b/llama_stack/providers/utils/scheduler.py
@@ -37,7 +37,7 @@ JobType: TypeAlias = str
class JobArtifact(BaseModel):
type: JobType
name: str
- # TODO: uri should be a reference to /files API; revisit when /files is implemented
+ # TODO: uri should be a reference to /artifacts API; revisit when /artifacts is implemented
uri: str | None = None
metadata: dict[str, Any]