feat: implement provider updating

add `v1/providers/` which uses PUT to allow users to change their provider configuration

this is a follow up to #1429 and related to #1359

a user can call something like:

`llama_stack_client.providers.update(api="inference", provider_id="ollama", provider_type="remote::ollama", config={'url': 'http:/localhost:12345'})`

or

`llama-stack-client providers update inference ollama remote::ollama "{'url': 'http://localhost:12345'}"`

this API works by adding a `RequestMiddleware` to the server which checks requests, and if the user is using PUT /v1/providers, the routes are re-registered with the re-initialized provider configurations/methods

for the client, `self.impls` is updated to hold the proper methods+configurations

this depends on a client PR, the CI will fail until then but succeeded locally

Signed-off-by: Charlie Doern <cdoern@redhat.com>
This commit is contained in:
Charlie Doern 2025-04-04 15:53:21 -04:00
parent d165000bbc
commit 436f8ade9e
8 changed files with 449 additions and 56 deletions

View file

@ -21,3 +21,20 @@ class TestProviders:
pid = provider.provider_id
provider = llama_stack_client.providers.retrieve(pid)
assert provider is not None
@pytest.mark.asyncio
def test_providers_update(self, llama_stack_client: LlamaStackAsLibraryClient | LlamaStackClient):
new_cfg = {"url": "http://localhost:12345"}
_ = llama_stack_client.providers.retrieve("ollama")
llama_stack_client.providers.update(
api="inference",
provider_id="ollama",
provider_type="remote::ollama",
config=new_cfg,
)
new_provider = llama_stack_client.providers.retrieve("ollama")
assert new_provider.config == new_cfg