@@ -14,10 +14,21 @@ import (
1414type cleanupOptions struct {
1515 models bool
1616 removeImages bool
17+ backend string
1718}
1819
1920// runUninstallOrStop is shared logic for uninstall-runner and stop-runner commands
2021func runUninstallOrStop (cmd * cobra.Command , opts cleanupOptions ) error {
22+ // Deferred backend uninstall is handled via the running model runner API
23+ // and works in any context (Desktop, Moby, etc.), so handle it first.
24+ if opts .backend != "" {
25+ if err := desktopClient .UninstallBackend (opts .backend ); err != nil {
26+ return fmt .Errorf ("failed to uninstall %s backend: %w" , opts .backend , err )
27+ }
28+ cmd .Printf ("Uninstalled %s backend\n " , opts .backend )
29+ return nil
30+ }
31+
2132 // Ensure that we're running in a supported model runner context.
2233 if kind := modelRunner .EngineKind (); kind == types .ModelRunnerEngineKindDesktop {
2334 if desktop .IsDesktopWSLContext (cmd .Context (), dockerCLI ) {
@@ -62,18 +73,21 @@ func runUninstallOrStop(cmd *cobra.Command, opts cleanupOptions) error {
6273
6374func newUninstallRunner () * cobra.Command {
6475 var models , images bool
76+ var backend string
6577 c := & cobra.Command {
6678 Use : "uninstall-runner" ,
6779 Short : "Uninstall Docker Model Runner (Docker Engine only)" ,
6880 RunE : func (cmd * cobra.Command , args []string ) error {
6981 return runUninstallOrStop (cmd , cleanupOptions {
7082 models : models ,
7183 removeImages : images ,
84+ backend : backend ,
7285 })
7386 },
7487 ValidArgsFunction : completion .NoComplete ,
7588 }
7689 c .Flags ().BoolVar (& models , "models" , false , "Remove model storage volume" )
7790 c .Flags ().BoolVar (& images , "images" , false , "Remove " + standalone .ControllerImage + " images" )
91+ c .Flags ().StringVar (& backend , "backend" , "" , "Uninstall a deferred backend (e.g. vllm, diffusers)" )
7892 return c
7993}
0 commit comments