66
77 "github.com/docker/model-runner/pkg/distribution/types"
88 "github.com/docker/model-runner/pkg/inference"
9+ "github.com/docker/model-runner/pkg/inference/backends/diffusers"
910 "github.com/docker/model-runner/pkg/inference/backends/mlx"
1011 "github.com/docker/model-runner/pkg/inference/backends/sglang"
1112 "github.com/docker/model-runner/pkg/inference/backends/vllm"
@@ -17,12 +18,14 @@ type mockPlatformSupport struct {
1718 vllm bool
1819 vllmMetal bool
1920 sglang bool
21+ diffusers bool
2022}
2123
2224func (m mockPlatformSupport ) SupportsMLX () bool { return m .mlx }
2325func (m mockPlatformSupport ) SupportsVLLM () bool { return m .vllm }
2426func (m mockPlatformSupport ) SupportsVLLMMetal () bool { return m .vllmMetal }
2527func (m mockPlatformSupport ) SupportsSGLang () bool { return m .sglang }
28+ func (m mockPlatformSupport ) SupportsDiffusers () bool { return m .diffusers }
2629
2730// mockModel is a minimal Model implementation for testing.
2831type mockModel struct {
@@ -55,9 +58,12 @@ func TestSelectBackendForModel(t *testing.T) {
5558 mlxBackend := & mockBackend {name : mlx .Name }
5659 vllmBackend := & mockBackend {name : vllm .Name }
5760 sglangBackend := & mockBackend {name : sglang .Name }
61+ diffusersBackend := & mockBackend {name : diffusers .Name }
5862
5963 safetensorsModel := & mockModel {config : & types.Config {Format : types .FormatSafetensors }}
6064 ggufModel := & mockModel {config : & types.Config {Format : types .FormatGGUF }}
65+ ddufModel := & mockModel {config : & types.Config {Format : types .FormatDDUF }}
66+ legacyDiffusersModel := & mockModel {config : & types.Config {Format : types .FormatDiffusers }} //nolint:staticcheck // testing backward compatibility
6167
6268 tests := []struct {
6369 name string
@@ -153,6 +159,49 @@ func TestSelectBackendForModel(t *testing.T) {
153159 model : safetensorsModel ,
154160 expectedBackend : vllm .Name ,
155161 },
162+ {
163+ name : "DDUF model selects diffusers backend when platform supports it" ,
164+ backends : map [string ]inference.Backend {
165+ "llamacpp" : llamacppBackend ,
166+ diffusers .Name : diffusersBackend ,
167+ },
168+ defaultBackend : llamacppBackend ,
169+ platform : mockPlatformSupport {diffusers : true },
170+ model : ddufModel ,
171+ expectedBackend : diffusers .Name ,
172+ },
173+ {
174+ name : "DDUF model falls back to default when platform does not support diffusers" ,
175+ backends : map [string ]inference.Backend {
176+ "llamacpp" : llamacppBackend ,
177+ diffusers .Name : diffusersBackend ,
178+ },
179+ defaultBackend : llamacppBackend ,
180+ platform : mockPlatformSupport {diffusers : false },
181+ model : ddufModel ,
182+ expectedBackend : "llamacpp" ,
183+ },
184+ {
185+ name : "DDUF model falls back to default when diffusers backend not registered" ,
186+ backends : map [string ]inference.Backend {
187+ "llamacpp" : llamacppBackend ,
188+ },
189+ defaultBackend : llamacppBackend ,
190+ platform : mockPlatformSupport {diffusers : true },
191+ model : ddufModel ,
192+ expectedBackend : "llamacpp" ,
193+ },
194+ {
195+ name : "legacy diffusers format model selects diffusers backend" ,
196+ backends : map [string ]inference.Backend {
197+ "llamacpp" : llamacppBackend ,
198+ diffusers .Name : diffusersBackend ,
199+ },
200+ defaultBackend : llamacppBackend ,
201+ platform : mockPlatformSupport {diffusers : true },
202+ model : legacyDiffusersModel ,
203+ expectedBackend : diffusers .Name ,
204+ },
156205 }
157206
158207 for _ , tt := range tests {
0 commit comments