From d479bc5fdc0c2954ae5ba527e8b2d74e06e9d845 Mon Sep 17 00:00:00 2001 From: Xi Yan Date: Thu, 13 Mar 2025 17:11:49 -0700 Subject: [PATCH 1/8] fix --- llama_stack/apis/providers/providers.py | 8 ++------ llama_stack/distribution/providers.py | 18 +++++++++++++----- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/llama_stack/apis/providers/providers.py b/llama_stack/apis/providers/providers.py index fd37bd5007..3879c7fc4f 100644 --- a/llama_stack/apis/providers/providers.py +++ b/llama_stack/apis/providers/providers.py @@ -4,7 +4,7 @@ # This source code is licensed under the terms described in the LICENSE file in # the root directory of this source tree. -from typing import List, Protocol, runtime_checkable +from typing import List, Optional, Protocol, runtime_checkable from pydantic import BaseModel @@ -19,10 +19,6 @@ class ProviderInfo(BaseModel): provider_type: str -class GetProviderResponse(BaseModel): - data: Provider | None - - class ListProvidersResponse(BaseModel): data: List[ProviderInfo] @@ -37,4 +33,4 @@ class Providers(Protocol): async def list_providers(self) -> ListProvidersResponse: ... @webmethod(route="/providers/{provider_id}", method="GET") - async def inspect_provider(self, provider_id: str) -> GetProviderResponse: ... + async def inspect_provider(self, provider_id: str) -> Optional[ProviderInfo]: ... diff --git a/llama_stack/distribution/providers.py b/llama_stack/distribution/providers.py index 219384900e..82b86be1d7 100644 --- a/llama_stack/distribution/providers.py +++ b/llama_stack/distribution/providers.py @@ -6,7 +6,12 @@ from pydantic import BaseModel -from llama_stack.apis.providers import GetProviderResponse, ListProvidersResponse, ProviderInfo, Providers +from llama_stack.apis.providers import ( + GetProviderResponse, + ListProvidersResponse, + ProviderInfo, + Providers, +) from .datatypes import StackRunConfig from .stack import redact_sensitive_fields @@ -50,10 +55,13 @@ async def list_providers(self) -> ListProvidersResponse: async def inspect_provider(self, provider_id: str) -> GetProviderResponse: run_config = self.config.run_config safe_config = StackRunConfig(**redact_sensitive_fields(run_config.model_dump())) - ret = None - for _, providers in safe_config.providers.items(): + for api, providers in safe_config.providers.items(): for p in providers: if p.provider_id == provider_id: - ret = p + return ProviderInfo( + api=api, + provider_id=p.provider_id, + provider_type=p.provider_type, + ) - return GetProviderResponse(data=ret) + return None From 9347a646db5c4a6fe926e37b4795332ac173d390 Mon Sep 17 00:00:00 2001 From: Xi Yan Date: Thu, 13 Mar 2025 17:12:11 -0700 Subject: [PATCH 2/8] fix --- docs/_static/llama-stack-spec.html | 170 +++++++++++++---------------- docs/_static/llama-stack-spec.yaml | 115 +++++++++---------- 2 files changed, 124 insertions(+), 161 deletions(-) diff --git a/docs/_static/llama-stack-spec.html b/docs/_static/llama-stack-spec.html index e62f66bd61..71a80ff81a 100644 --- a/docs/_static/llama-stack-spec.html +++ b/docs/_static/llama-stack-spec.html @@ -2151,6 +2151,55 @@ } } }, + "/v1/providers/{provider_id}": { + "get": { + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/ProviderInfo" + }, + { + "type": "null" + } + ] + } + } + } + }, + "400": { + "$ref": "#/components/responses/BadRequest400" + }, + "429": { + "$ref": "#/components/responses/TooManyRequests429" + }, + "500": { + "$ref": "#/components/responses/InternalServerError500" + }, + "default": { + "$ref": "#/components/responses/DefaultError" + } + }, + "tags": [ + "Providers" + ], + "description": "", + "parameters": [ + { + "name": "provider_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ] + } + }, "/v1/tool-runtime/invoke": { "post": { "responses": { @@ -2643,80 +2692,6 @@ } }, "/v1/providers": { - "get": { - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ListProvidersResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest400" - }, - "429": { - "$ref": "#/components/responses/TooManyRequests429" - }, - "500": { - "$ref": "#/components/responses/InternalServerError500" - }, - "default": { - "$ref": "#/components/responses/DefaultError" - } - }, - "tags": [ - "Providers" - ], - "description": "", - "parameters": [] - } - }, - "/v1/providers/{provider_id}": { - "get": { - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GetProviderResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest400" - }, - "429": { - "$ref": "#/components/responses/TooManyRequests429" - }, - "500": { - "$ref": "#/components/responses/InternalServerError500" - }, - "default": { - "$ref": "#/components/responses/DefaultError" - } - }, - "tags": [ - "Providers" - ], - "description": "", - "parameters": [ - { - "name": "provider_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ] - }, - "/v1/inspect/providers": { "get": { "responses": { "200": { @@ -7986,6 +7961,27 @@ ], "title": "InsertChunksRequest" }, + "ProviderInfo": { + "type": "object", + "properties": { + "api": { + "type": "string" + }, + "provider_id": { + "type": "string" + }, + "provider_type": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "api", + "provider_id", + "provider_type" + ], + "title": "ProviderInfo" + }, "InvokeToolRequest": { "type": "object", "properties": { @@ -8198,27 +8194,6 @@ ], "title": "ListModelsResponse" }, - "ProviderInfo": { - "type": "object", - "properties": { - "api": { - "type": "string" - }, - "provider_id": { - "type": "string" - }, - "provider_type": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "api", - "provider_id", - "provider_type" - ], - "title": "ProviderInfo" - }, "ListProvidersResponse": { "type": "object", "properties": { @@ -10219,6 +10194,10 @@ { "name": "PostTraining (Coming Soon)" }, + { + "name": "Providers", + "x-displayName": "Providers API for inspecting, listing, and modifying providers and their configurations." + }, { "name": "Safety" }, @@ -10265,6 +10244,7 @@ "Inspect", "Models", "PostTraining (Coming Soon)", + "Providers", "Safety", "Scoring", "ScoringFunctions", diff --git a/docs/_static/llama-stack-spec.yaml b/docs/_static/llama-stack-spec.yaml index cb31848eeb..436beaad41 100644 --- a/docs/_static/llama-stack-spec.yaml +++ b/docs/_static/llama-stack-spec.yaml @@ -1444,6 +1444,36 @@ paths: schema: $ref: '#/components/schemas/InsertChunksRequest' required: true + /v1/providers/{provider_id}: + get: + responses: + '200': + description: OK + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ProviderInfo' + - type: 'null' + '400': + $ref: '#/components/responses/BadRequest400' + '429': + $ref: >- + #/components/responses/TooManyRequests429 + '500': + $ref: >- + #/components/responses/InternalServerError500 + default: + $ref: '#/components/responses/DefaultError' + tags: + - Providers + description: '' + parameters: + - name: provider_id + in: path + required: true + schema: + type: string /v1/tool-runtime/invoke: post: responses: @@ -1783,57 +1813,6 @@ paths: $ref: '#/components/schemas/RegisterModelRequest' required: true /v1/providers: - get: - responses: - '200': - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/ListProvidersResponse' - '400': - $ref: '#/components/responses/BadRequest400' - '429': - $ref: >- - #/components/responses/TooManyRequests429 - '500': - $ref: >- - #/components/responses/InternalServerError500 - default: - $ref: '#/components/responses/DefaultError' - tags: - - Providers - description: '' - parameters: [] - /v1/providers/{provider_id}: - get: - responses: - '200': - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/GetProviderResponse' - '400': - $ref: '#/components/responses/BadRequest400' - '429': - $ref: >- - #/components/responses/TooManyRequests429 - '500': - $ref: >- - #/components/responses/InternalServerError500 - default: - $ref: '#/components/responses/DefaultError' - tags: - - Providers - description: '' - parameters: - - name: provider_id - in: path - required: true - schema: - type: string - /v1/inspect/providers: get: responses: '200': @@ -5460,6 +5439,21 @@ components: - vector_db_id - chunks title: InsertChunksRequest + ProviderInfo: + type: object + properties: + api: + type: string + provider_id: + type: string + provider_type: + type: string + additionalProperties: false + required: + - api + - provider_id + - provider_type + title: ProviderInfo InvokeToolRequest: type: object properties: @@ -5595,21 +5589,6 @@ components: required: - data title: ListModelsResponse - ProviderInfo: - type: object - properties: - api: - type: string - provider_id: - type: string - provider_type: - type: string - additionalProperties: false - required: - - api - - provider_id - - provider_type - title: ProviderInfo ListProvidersResponse: type: object properties: @@ -6883,6 +6862,9 @@ tags: - name: Inspect - name: Models - name: PostTraining (Coming Soon) + - name: Providers + x-displayName: >- + Providers API for inspecting, listing, and modifying providers and their configurations. - name: Safety - name: Scoring - name: ScoringFunctions @@ -6907,6 +6889,7 @@ x-tagGroups: - Inspect - Models - PostTraining (Coming Soon) + - Providers - Safety - Scoring - ScoringFunctions From 2d1cebad88a95e7bc1576779ef1f7da4a078ca8e Mon Sep 17 00:00:00 2001 From: Xi Yan Date: Thu, 13 Mar 2025 17:14:45 -0700 Subject: [PATCH 3/8] fix --- llama_stack/distribution/providers.py | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/llama_stack/distribution/providers.py b/llama_stack/distribution/providers.py index 82b86be1d7..ecfc3184a2 100644 --- a/llama_stack/distribution/providers.py +++ b/llama_stack/distribution/providers.py @@ -4,14 +4,11 @@ # This source code is licensed under the terms described in the LICENSE file in # the root directory of this source tree. +from typing import Optional + from pydantic import BaseModel -from llama_stack.apis.providers import ( - GetProviderResponse, - ListProvidersResponse, - ProviderInfo, - Providers, -) +from llama_stack.apis.providers import ListProvidersResponse, ProviderInfo, Providers from .datatypes import StackRunConfig from .stack import redact_sensitive_fields @@ -52,7 +49,7 @@ async def list_providers(self) -> ListProvidersResponse: return ListProvidersResponse(data=ret) - async def inspect_provider(self, provider_id: str) -> GetProviderResponse: + async def inspect_provider(self, provider_id: str) -> Optional[ProviderInfo]: run_config = self.config.run_config safe_config = StackRunConfig(**redact_sensitive_fields(run_config.model_dump())) for api, providers in safe_config.providers.items(): From 9e7c2a16e14c25ed957dd04c6994336a7b2ad3e5 Mon Sep 17 00:00:00 2001 From: Xi Yan Date: Thu, 13 Mar 2025 17:16:41 -0700 Subject: [PATCH 4/8] precommit --- llama_stack/apis/providers/providers.py | 1 - 1 file changed, 1 deletion(-) diff --git a/llama_stack/apis/providers/providers.py b/llama_stack/apis/providers/providers.py index 3879c7fc4f..51526c1c96 100644 --- a/llama_stack/apis/providers/providers.py +++ b/llama_stack/apis/providers/providers.py @@ -8,7 +8,6 @@ from pydantic import BaseModel -from llama_stack.distribution.datatypes import Provider from llama_stack.schema_utils import json_schema_type, webmethod From a91771f03466939ba18811680a4833dfecb666a0 Mon Sep 17 00:00:00 2001 From: Xi Yan Date: Thu, 13 Mar 2025 17:36:21 -0700 Subject: [PATCH 5/8] fix --- docs/_static/llama-stack-spec.html | 28 ++++++++++++++++++++++++- docs/_static/llama-stack-spec.yaml | 11 ++++++++++ llama_stack/apis/providers/providers.py | 3 ++- 3 files changed, 40 insertions(+), 2 deletions(-) diff --git a/docs/_static/llama-stack-spec.html b/docs/_static/llama-stack-spec.html index 71a80ff81a..4a0d7aef4e 100644 --- a/docs/_static/llama-stack-spec.html +++ b/docs/_static/llama-stack-spec.html @@ -7972,13 +7972,39 @@ }, "provider_type": { "type": "string" + }, + "config": { + "type": "object", + "additionalProperties": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "boolean" + }, + { + "type": "number" + }, + { + "type": "string" + }, + { + "type": "array" + }, + { + "type": "object" + } + ] + } } }, "additionalProperties": false, "required": [ "api", "provider_id", - "provider_type" + "provider_type", + "config" ], "title": "ProviderInfo" }, diff --git a/docs/_static/llama-stack-spec.yaml b/docs/_static/llama-stack-spec.yaml index 436beaad41..73ca34763c 100644 --- a/docs/_static/llama-stack-spec.yaml +++ b/docs/_static/llama-stack-spec.yaml @@ -5448,11 +5448,22 @@ components: type: string provider_type: type: string + config: + type: object + additionalProperties: + oneOf: + - type: 'null' + - type: boolean + - type: number + - type: string + - type: array + - type: object additionalProperties: false required: - api - provider_id - provider_type + - config title: ProviderInfo InvokeToolRequest: type: object diff --git a/llama_stack/apis/providers/providers.py b/llama_stack/apis/providers/providers.py index 51526c1c96..de947d4ba0 100644 --- a/llama_stack/apis/providers/providers.py +++ b/llama_stack/apis/providers/providers.py @@ -4,7 +4,7 @@ # This source code is licensed under the terms described in the LICENSE file in # the root directory of this source tree. -from typing import List, Optional, Protocol, runtime_checkable +from typing import Any, Dict, List, Optional, Protocol, runtime_checkable from pydantic import BaseModel @@ -16,6 +16,7 @@ class ProviderInfo(BaseModel): api: str provider_id: str provider_type: str + config: Dict[str, Any] class ListProvidersResponse(BaseModel): From 194d86a232f32aa1281bb7b6729822b30aa9add8 Mon Sep 17 00:00:00 2001 From: Xi Yan Date: Thu, 13 Mar 2025 17:39:06 -0700 Subject: [PATCH 6/8] config --- llama_stack/distribution/providers.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/llama_stack/distribution/providers.py b/llama_stack/distribution/providers.py index ecfc3184a2..8253c421b4 100644 --- a/llama_stack/distribution/providers.py +++ b/llama_stack/distribution/providers.py @@ -34,14 +34,16 @@ async def initialize(self) -> None: async def list_providers(self) -> ListProvidersResponse: run_config = self.config.run_config + safe_config = StackRunConfig(**redact_sensitive_fields(run_config.model_dump())) ret = [] - for api, providers in run_config.providers.items(): + for api, providers in safe_config.providers.items(): ret.extend( [ ProviderInfo( api=api, provider_id=p.provider_id, provider_type=p.provider_type, + config=p.config, ) for p in providers ] @@ -59,6 +61,7 @@ async def inspect_provider(self, provider_id: str) -> Optional[ProviderInfo]: api=api, provider_id=p.provider_id, provider_type=p.provider_type, + config=p.config, ) return None From a715debcb876908dea93f147d7cdf9a5a5cf88f2 Mon Sep 17 00:00:00 2001 From: Xi Yan Date: Thu, 13 Mar 2025 19:30:47 -0700 Subject: [PATCH 7/8] update --- docs/_static/llama-stack-spec.html | 9 +-------- docs/_static/llama-stack-spec.yaml | 4 +--- llama_stack/apis/providers/providers.py | 2 +- llama_stack/distribution/providers.py | 19 ++++++------------- 4 files changed, 9 insertions(+), 25 deletions(-) diff --git a/docs/_static/llama-stack-spec.html b/docs/_static/llama-stack-spec.html index 4a0d7aef4e..b5e4097d9e 100644 --- a/docs/_static/llama-stack-spec.html +++ b/docs/_static/llama-stack-spec.html @@ -2159,14 +2159,7 @@ "content": { "application/json": { "schema": { - "oneOf": [ - { - "$ref": "#/components/schemas/ProviderInfo" - }, - { - "type": "null" - } - ] + "$ref": "#/components/schemas/ProviderInfo" } } } diff --git a/docs/_static/llama-stack-spec.yaml b/docs/_static/llama-stack-spec.yaml index 73ca34763c..bf2343ede0 100644 --- a/docs/_static/llama-stack-spec.yaml +++ b/docs/_static/llama-stack-spec.yaml @@ -1452,9 +1452,7 @@ paths: content: application/json: schema: - oneOf: - - $ref: '#/components/schemas/ProviderInfo' - - type: 'null' + $ref: '#/components/schemas/ProviderInfo' '400': $ref: '#/components/responses/BadRequest400' '429': diff --git a/llama_stack/apis/providers/providers.py b/llama_stack/apis/providers/providers.py index de947d4ba0..4c4034cd5f 100644 --- a/llama_stack/apis/providers/providers.py +++ b/llama_stack/apis/providers/providers.py @@ -33,4 +33,4 @@ class Providers(Protocol): async def list_providers(self) -> ListProvidersResponse: ... @webmethod(route="/providers/{provider_id}", method="GET") - async def inspect_provider(self, provider_id: str) -> Optional[ProviderInfo]: ... + async def inspect_provider(self, provider_id: str) -> ProviderInfo: ... diff --git a/llama_stack/distribution/providers.py b/llama_stack/distribution/providers.py index 8253c421b4..ae4c9f7c34 100644 --- a/llama_stack/distribution/providers.py +++ b/llama_stack/distribution/providers.py @@ -51,17 +51,10 @@ async def list_providers(self) -> ListProvidersResponse: return ListProvidersResponse(data=ret) - async def inspect_provider(self, provider_id: str) -> Optional[ProviderInfo]: - run_config = self.config.run_config - safe_config = StackRunConfig(**redact_sensitive_fields(run_config.model_dump())) - for api, providers in safe_config.providers.items(): - for p in providers: - if p.provider_id == provider_id: - return ProviderInfo( - api=api, - provider_id=p.provider_id, - provider_type=p.provider_type, - config=p.config, - ) + async def inspect_provider(self, provider_id: str) -> ProviderInfo: + all_providers = await self.list_providers() + for p in all_providers.data: + if p.provider_id == provider_id: + return p - return None + raise ValueError(f"Provider {provider_id} not found") From 2e9e831fce8a61dc97867949a0257742581b842c Mon Sep 17 00:00:00 2001 From: Xi Yan Date: Thu, 13 Mar 2025 19:33:01 -0700 Subject: [PATCH 8/8] pre --- llama_stack/apis/providers/providers.py | 2 +- llama_stack/distribution/providers.py | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/llama_stack/apis/providers/providers.py b/llama_stack/apis/providers/providers.py index 4c4034cd5f..83d03d7c1f 100644 --- a/llama_stack/apis/providers/providers.py +++ b/llama_stack/apis/providers/providers.py @@ -4,7 +4,7 @@ # 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, Dict, List, Optional, Protocol, runtime_checkable +from typing import Any, Dict, List, Protocol, runtime_checkable from pydantic import BaseModel diff --git a/llama_stack/distribution/providers.py b/llama_stack/distribution/providers.py index ae4c9f7c34..fb24767671 100644 --- a/llama_stack/distribution/providers.py +++ b/llama_stack/distribution/providers.py @@ -4,7 +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 Optional from pydantic import BaseModel