@@ -12,34 +12,36 @@ import (
1212)
1313
1414const (
15- DefaultCapability = "default"
16- NvidiaL4T = "nvidia-l4t"
17- DarwinX86 = "darwin-x86"
18- Metal = "metal"
19- Nvidia = "nvidia"
20-
15+ // Public constants - used by tests and external packages
16+ Nvidia = "nvidia"
2117 AMD = "amd"
2218 Intel = "intel"
23- Vulkan = "vulkan"
2419
25- NvidiaCuda13 = "nvidia-cuda-13"
26- NvidiaCuda12 = "nvidia-cuda-12"
27- NvidiaL4TCuda12 = "nvidia-l4t-cuda-12"
28- NvidiaL4TCuda13 = "nvidia-l4t-cuda-13"
20+ // Private constants - only used within this package
21+ defaultCapability = "default"
22+ nvidiaL4T = "nvidia-l4t"
23+ darwinX86 = "darwin-x86"
24+ metal = "metal"
25+ vulkan = "vulkan"
26+
27+ nvidiaCuda13 = "nvidia-cuda-13"
28+ nvidiaCuda12 = "nvidia-cuda-12"
29+ nvidiaL4TCuda12 = "nvidia-l4t-cuda-12"
30+ nvidiaL4TCuda13 = "nvidia-l4t-cuda-13"
2931
3032 capabilityEnv = "LOCALAI_FORCE_META_BACKEND_CAPABILITY"
3133 capabilityRunFileEnv = "LOCALAI_FORCE_META_BACKEND_CAPABILITY_RUN_FILE"
3234 defaultRunFile = "/run/localai/capability"
3335
34- // Backend detection tokens
35- BackendTokenDarwin = "darwin"
36- BackendTokenMLX = "mlx"
37- BackendTokenMetal = "metal"
38- BackendTokenL4T = "l4t"
39- BackendTokenCUDA = "cuda"
40- BackendTokenROCM = "rocm"
41- BackendTokenHIP = "hip"
42- BackendTokenSYCL = "sycl"
36+ // Backend detection tokens (private)
37+ backendTokenDarwin = "darwin"
38+ backendTokenMLX = "mlx"
39+ backendTokenMetal = "metal"
40+ backendTokenL4T = "l4t"
41+ backendTokenCUDA = "cuda"
42+ backendTokenROCM = "rocm"
43+ backendTokenHIP = "hip"
44+ backendTokenSYCL = "sycl"
4345)
4446
4547var (
@@ -65,7 +67,7 @@ func (s *SystemState) Capability(capMap map[string]string) string {
6567
6668 xlog .Debug ("The requested capability was not found, using default capability" , "reportedCapability" , reportedCapability , "capMap" , capMap )
6769 // Otherwise, return the default capability (catch-all)
68- return DefaultCapability
70+ return defaultCapability
6971}
7072
7173func (s * SystemState ) getSystemCapabilities () string {
@@ -95,47 +97,47 @@ func (s *SystemState) getSystemCapabilities() string {
9597 // If we are on mac and arm64, we will return metal
9698 if runtime .GOOS == "darwin" && runtime .GOARCH == "arm64" {
9799 xlog .Info ("Using metal capability (arm64 on mac)" , "env" , capabilityEnv )
98- return Metal
100+ return metal
99101 }
100102
101103 // If we are on mac and x86, we will return darwin-x86
102104 if runtime .GOOS == "darwin" && runtime .GOARCH == "amd64" {
103105 xlog .Info ("Using darwin-x86 capability (amd64 on mac)" , "env" , capabilityEnv )
104- return DarwinX86
106+ return darwinX86
105107 }
106108
107109 // If arm64 on linux and a nvidia gpu is detected, we will return nvidia-l4t
108110 if runtime .GOOS == "linux" && runtime .GOARCH == "arm64" {
109111 if s .GPUVendor == Nvidia {
110112 xlog .Info ("Using nvidia-l4t capability (arm64 on linux)" , "env" , capabilityEnv )
111113 if cuda13DirExists {
112- return NvidiaL4TCuda13
114+ return nvidiaL4TCuda13
113115 }
114116 if cuda12DirExists {
115- return NvidiaL4TCuda12
117+ return nvidiaL4TCuda12
116118 }
117- return NvidiaL4T
119+ return nvidiaL4T
118120 }
119121 }
120122
121123 if cuda13DirExists {
122- return NvidiaCuda13
124+ return nvidiaCuda13
123125 }
124126
125127 if cuda12DirExists {
126- return NvidiaCuda12
128+ return nvidiaCuda12
127129 }
128130
129131 if s .GPUVendor == "" {
130132 xlog .Info ("Default capability (no GPU detected)" , "env" , capabilityEnv )
131- return DefaultCapability
133+ return defaultCapability
132134 }
133135
134136 xlog .Info ("Capability automatically detected" , "capability" , s .GPUVendor , "env" , capabilityEnv )
135137 // If vram is less than 4GB, let's default to CPU but warn the user that they can override that via env
136138 if s .VRAM <= 4 * 1024 * 1024 * 1024 {
137139 xlog .Warn ("VRAM is less than 4GB, defaulting to CPU" , "env" , capabilityEnv )
138- return DefaultCapability
140+ return defaultCapability
139141 }
140142
141143 return s .GPUVendor
@@ -149,17 +151,17 @@ func (s *SystemState) BackendPreferenceTokens() []string {
149151 capStr := strings .ToLower (s .getSystemCapabilities ())
150152 switch {
151153 case strings .HasPrefix (capStr , Nvidia ):
152- return []string {BackendTokenCUDA , Vulkan , "cpu" }
154+ return []string {backendTokenCUDA , vulkan , "cpu" }
153155 case strings .HasPrefix (capStr , AMD ):
154- return []string {BackendTokenROCM , BackendTokenHIP , Vulkan , "cpu" }
156+ return []string {backendTokenROCM , backendTokenHIP , vulkan , "cpu" }
155157 case strings .HasPrefix (capStr , Intel ):
156- return []string {BackendTokenSYCL , Intel , "cpu" }
157- case strings .HasPrefix (capStr , Metal ):
158- return []string {BackendTokenMetal , "cpu" }
159- case strings .HasPrefix (capStr , DarwinX86 ):
158+ return []string {backendTokenSYCL , Intel , "cpu" }
159+ case strings .HasPrefix (capStr , metal ):
160+ return []string {backendTokenMetal , "cpu" }
161+ case strings .HasPrefix (capStr , darwinX86 ):
160162 return []string {"darwin-x86" , "cpu" }
161- case strings .HasPrefix (capStr , Vulkan ):
162- return []string {Vulkan , "cpu" }
163+ case strings .HasPrefix (capStr , vulkan ):
164+ return []string {vulkan , "cpu" }
163165 default :
164166 return []string {"cpu" }
165167 }
@@ -179,40 +181,40 @@ func (s *SystemState) IsBackendCompatible(name, uri string) bool {
179181 capability := s .getSystemCapabilities ()
180182
181183 // Check for darwin/macOS-specific backends (mlx, metal, darwin)
182- isDarwinBackend := strings .Contains (combined , BackendTokenDarwin ) ||
183- strings .Contains (combined , BackendTokenMLX ) ||
184- strings .Contains (combined , BackendTokenMetal )
184+ isDarwinBackend := strings .Contains (combined , backendTokenDarwin ) ||
185+ strings .Contains (combined , backendTokenMLX ) ||
186+ strings .Contains (combined , backendTokenMetal )
185187 if isDarwinBackend {
186188 // Darwin backends require the system to be running on darwin with metal or darwin-x86 capability
187- return capability == Metal || capability == DarwinX86
189+ return capability == metal || capability == darwinX86
188190 }
189191
190192 // Check for NVIDIA L4T-specific backends (arm64 Linux with NVIDIA GPU)
191193 // This must be checked before the general NVIDIA check as L4T backends
192194 // may also contain "cuda" or "nvidia" in their names
193- isL4TBackend := strings .Contains (combined , BackendTokenL4T )
195+ isL4TBackend := strings .Contains (combined , backendTokenL4T )
194196 if isL4TBackend {
195- return strings .HasPrefix (capability , NvidiaL4T )
197+ return strings .HasPrefix (capability , nvidiaL4T )
196198 }
197199
198200 // Check for NVIDIA/CUDA-specific backends (non-L4T)
199- isNvidiaBackend := strings .Contains (combined , BackendTokenCUDA ) ||
201+ isNvidiaBackend := strings .Contains (combined , backendTokenCUDA ) ||
200202 strings .Contains (combined , Nvidia )
201203 if isNvidiaBackend {
202204 // NVIDIA backends are compatible with nvidia, nvidia-cuda-12, nvidia-cuda-13, and l4t capabilities
203205 return strings .HasPrefix (capability , Nvidia )
204206 }
205207
206208 // Check for AMD/ROCm-specific backends
207- isAMDBackend := strings .Contains (combined , BackendTokenROCM ) ||
208- strings .Contains (combined , BackendTokenHIP ) ||
209+ isAMDBackend := strings .Contains (combined , backendTokenROCM ) ||
210+ strings .Contains (combined , backendTokenHIP ) ||
209211 strings .Contains (combined , AMD )
210212 if isAMDBackend {
211213 return capability == AMD
212214 }
213215
214216 // Check for Intel/SYCL-specific backends
215- isIntelBackend := strings .Contains (combined , BackendTokenSYCL ) ||
217+ isIntelBackend := strings .Contains (combined , backendTokenSYCL ) ||
216218 strings .Contains (combined , Intel )
217219 if isIntelBackend {
218220 return capability == Intel
0 commit comments