Skip to content

Commit 6d18aae

Browse files
authored
feat: llama-stack-client providers inspect PROVIDER_ID (#181)
# What does this PR do? allow a user to see certain parts of the provider configuration for a specified provider. This is the cli code corresponding to llamastack/llama-stack#1429 This PR introduces: - `llama-stack-client providers inspect` - amends `llama-stack-client providers list` to use `/v1/providers` - `GetProviderResponse` to handle the response from these new API calls Signed-off-by: Charlie Doern <[email protected]>
1 parent 43ea2f6 commit 6d18aae

File tree

5 files changed

+112
-2
lines changed

5 files changed

+112
-2
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import click
2+
import yaml
3+
from rich.console import Console
4+
5+
from ..common.utils import handle_client_errors
6+
7+
8+
@click.command(name="inspect")
9+
@click.argument("provider_id")
10+
@click.pass_context
11+
@handle_client_errors("inspect providers")
12+
def inspect_provider(ctx, provider_id):
13+
"""Show available providers on distribution endpoint"""
14+
client = ctx.obj["client"]
15+
console = Console()
16+
17+
providers_response = client.providers.inspect(provider_id=provider_id)
18+
19+
if providers_response is None:
20+
click.secho("Provider not found", fg="red")
21+
raise click.exceptions.Exit(1)
22+
23+
console.print(f"provider_id={providers_response.provider_id}")
24+
console.print(f"provider_type={providers_response.provider_type}")
25+
console.print("config:")
26+
for line in yaml.dump(providers_response.config, indent=2).split("\n"):
27+
console.print(line)

src/llama_stack_client/lib/cli/providers/providers.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import click
22

33
from .list import list_providers
4+
from .inspect import inspect_provider
45

56

67
@click.group()
@@ -11,3 +12,4 @@ def providers():
1112

1213
# Register subcommands
1314
providers.add_command(list_providers)
15+
providers.add_command(inspect_provider)

src/llama_stack_client/resources/providers.py

Lines changed: 64 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
from .._wrappers import DataWrapper
1919
from .._base_client import make_request_options
2020
from ..types.provider_list_response import ProviderListResponse
21+
from ..types.provider_get_response import GetProviderResponse
2122

2223
__all__ = ["ProvidersResource", "AsyncProvidersResource"]
2324

@@ -53,7 +54,7 @@ def list(
5354
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
5455
) -> ProviderListResponse:
5556
return self._get(
56-
"/v1/inspect/providers",
57+
"/v1/providers",
5758
options=make_request_options(
5859
extra_headers=extra_headers,
5960
extra_query=extra_query,
@@ -64,6 +65,29 @@ def list(
6465
cast_to=cast(Type[ProviderListResponse], DataWrapper[ProviderListResponse]),
6566
)
6667

68+
def inspect(
69+
self,
70+
provider_id,
71+
*,
72+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
73+
# The extra values given here take precedence over values defined on the client or passed to this method.
74+
extra_headers: Headers | None = None,
75+
extra_query: Query | None = None,
76+
extra_body: Body | None = None,
77+
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
78+
) -> GetProviderResponse:
79+
return self._get(
80+
f"/v1/providers/{provider_id}",
81+
options=make_request_options(
82+
extra_headers=extra_headers,
83+
extra_query=extra_query,
84+
extra_body=extra_body,
85+
timeout=timeout,
86+
post_parser=DataWrapper[GetProviderResponse]._unwrapper,
87+
),
88+
cast_to=cast(Type[GetProviderResponse], DataWrapper[GetProviderResponse]),
89+
)
90+
6791

6892
class AsyncProvidersResource(AsyncAPIResource):
6993
@cached_property
@@ -96,7 +120,7 @@ async def list(
96120
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
97121
) -> ProviderListResponse:
98122
return await self._get(
99-
"/v1/inspect/providers",
123+
"/v1/providers",
100124
options=make_request_options(
101125
extra_headers=extra_headers,
102126
extra_query=extra_query,
@@ -106,6 +130,29 @@ async def list(
106130
),
107131
cast_to=cast(Type[ProviderListResponse], DataWrapper[ProviderListResponse]),
108132
)
133+
134+
async def inspect(
135+
self,
136+
provider_id,
137+
*,
138+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
139+
# The extra values given here take precedence over values defined on the client or passed to this method.
140+
extra_headers: Headers | None = None,
141+
extra_query: Query | None = None,
142+
extra_body: Body | None = None,
143+
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
144+
) -> GetProviderResponse:
145+
return await self._get(
146+
f"/v1/providers/{provider_id}",
147+
options=make_request_options(
148+
extra_headers=extra_headers,
149+
extra_query=extra_query,
150+
extra_body=extra_body,
151+
timeout=timeout,
152+
post_parser=DataWrapper[GetProviderResponse]._unwrapper,
153+
),
154+
cast_to=cast(Type[GetProviderResponse], DataWrapper[GetProviderResponse]),
155+
)
109156

110157

111158
class ProvidersResourceWithRawResponse:
@@ -116,6 +163,9 @@ def __init__(self, providers: ProvidersResource) -> None:
116163
providers.list,
117164
)
118165

166+
self.inspect = to_raw_response_wrapper(
167+
providers.inspect,
168+
)
119169

120170
class AsyncProvidersResourceWithRawResponse:
121171
def __init__(self, providers: AsyncProvidersResource) -> None:
@@ -125,6 +175,11 @@ def __init__(self, providers: AsyncProvidersResource) -> None:
125175
providers.list,
126176
)
127177

178+
self.inspect = async_to_raw_response_wrapper(
179+
providers.inspect,
180+
)
181+
182+
128183

129184
class ProvidersResourceWithStreamingResponse:
130185
def __init__(self, providers: ProvidersResource) -> None:
@@ -134,6 +189,10 @@ def __init__(self, providers: ProvidersResource) -> None:
134189
providers.list,
135190
)
136191

192+
self.inspect = to_streamed_response_wrapper(
193+
providers.inspect,
194+
)
195+
137196

138197
class AsyncProvidersResourceWithStreamingResponse:
139198
def __init__(self, providers: AsyncProvidersResource) -> None:
@@ -142,3 +201,6 @@ def __init__(self, providers: AsyncProvidersResource) -> None:
142201
self.list = async_to_streamed_response_wrapper(
143202
providers.list,
144203
)
204+
self.inspect = async_to_streamed_response_wrapper(
205+
providers.inspect,
206+
)
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2+
3+
from typing_extensions import TypeAlias
4+
5+
from .provider_info import ProviderInfoWithConfig
6+
7+
__all__ = ["GetProviderResponse"]
8+
9+
GetProviderResponse: TypeAlias = ProviderInfoWithConfig

src/llama_stack_client/types/provider_info.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33

44
from .._models import BaseModel
5+
from typing import Dict, Any
56

67
__all__ = ["ProviderInfo"]
78

@@ -12,3 +13,12 @@ class ProviderInfo(BaseModel):
1213
provider_id: str
1314

1415
provider_type: str
16+
17+
class ProviderInfoWithConfig(BaseModel):
18+
api: str
19+
20+
provider_id: str
21+
22+
provider_type: str
23+
24+
config: Dict[str, Any]

0 commit comments

Comments
 (0)