|
115 | 115 | } |
116 | 116 | </div> |
117 | 117 | } |
| 118 | + |
| 119 | + @if (_selectedBackend?.BackendType == BackendType.Self && !_isRegisteredModel && _manualVision) |
| 120 | + { |
| 121 | + <div class="settings-field"> |
| 122 | + <label class="settings-label">MMProj File</label> |
| 123 | + <FluentTextField @bind-Value="_mmProjName" |
| 124 | + Placeholder="e.g., mmproj-model-f16.gguf" |
| 125 | + Style="width: 100%;" /> |
| 126 | + <span class="api-key-hint">Multimodal projector file (must be in the models folder)</span> |
| 127 | + </div> |
| 128 | + } |
118 | 129 | </div> |
119 | 130 |
|
120 | 131 | <div class="settings-footer"> |
|
194 | 205 | private bool _manualVision; |
195 | 206 | private bool _manualReasoning; |
196 | 207 | private bool _manualImageGen; |
| 208 | + private string? _mmProjName; |
197 | 209 |
|
198 | 210 | private bool RequiresApiKey => _selectedBackend?.RequiresApiKey == true; |
199 | 211 | private bool CanSave => !string.IsNullOrWhiteSpace(_modelName) |
|
251 | 263 | _manualVision = settings.HasVision; |
252 | 264 | _manualReasoning = settings.HasReasoning; |
253 | 265 | _manualImageGen = settings.HasImageGen; |
| 266 | + _mmProjName = settings.MmProjName; |
254 | 267 |
|
255 | 268 | OnModelNameChanged(); |
256 | 269 | } |
|
288 | 301 | _manualVision = profile.Vision; |
289 | 302 | _manualReasoning = profile.Reasoning; |
290 | 303 | _manualImageGen = profile.ImageGen; |
| 304 | + _mmProjName = profile.MmProjName; |
291 | 305 | } |
292 | 306 | } |
293 | 307 | else |
|
382 | 396 | HasVision = hasVision, |
383 | 397 | HasReasoning = hasReasoning, |
384 | 398 | HasImageGen = hasImageGen, |
385 | | - ModelPath = _modelPath |
| 399 | + ModelPath = _modelPath, |
| 400 | + MmProjName = _mmProjName |
386 | 401 | }; |
387 | 402 | await SettingsStorage.SaveSettingsAsync(settings); |
388 | 403 |
|
389 | 404 | await SettingsStorage.SaveProfileForBackendAsync( |
390 | | - backendKey, _modelName, hasVision, hasReasoning, hasImageGen); |
| 405 | + backendKey, _modelName, hasVision, hasReasoning, hasImageGen, _mmProjName); |
391 | 406 |
|
392 | 407 | // Resolve API key: use new input, or fall back to saved key |
393 | 408 | string? apiKey = null; |
|
411 | 426 | hasVision, |
412 | 427 | hasReasoning, |
413 | 428 | hasImageGen, |
| 429 | + _mmProjName, |
414 | 430 | MaINSettings, |
415 | 431 | apiKey); |
416 | 432 |
|
|
0 commit comments