You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Applying a sampling profile that sets a non-zero presence_penalty to a model whose base settings have vlm_mtp_enabled: true returns an unhandled HTTP 500 from the admin API.
The incompatibility itself appears intentional because the VLM MTP decode path cannot apply the per-request logits processor. The problem is that the profile UI/API allows the conflicting effective configuration to reach ModelSettings construction and exposes the validation ValueError as an internal server error.
Environment
oMLX: 0.6.1
Installation: macOS App
macOS: 26.6.1
Architecture: Apple Silicon (arm64)
Model: Qwen3.8-27B-8bit
Reproduction
Enable vlm_mtp_enabled in the model's base settings.
Create or select a profile with presence_penalty: 1.5.
POST /admin/api/models/Qwen3.8-27B-8bit/profiles/qwen3-r-general/apply -> 500
ValueError: vlm_mtp_enabled cannot be combined with presence_penalty; these
settings require per-request logits processors, which the vlm_mtp decode path
does not apply
The failure occurs while constructing the merged ModelSettings, before the new settings are assigned or persisted, so the profile is not partially activated.
Expected behavior
One of the following would make the failure actionable:
Prevent the incompatible combination in the UI and explain the tradeoff.
Return HTTP 400/422 with the validation message instead of HTTP 500.
Resolve the merge consistently with the existing conflict-resolution paths, for example by disabling the speed-only vlm_mtp_enabled setting when an output-shaping penalty is applied.
The report is about profile validation and API/UI error handling, not about removing the VLM MTP restriction.
Source observation
The current implementation has resolve_vlm_mtp_conflicts() for some saved-settings and runtime-profile merge paths. ModelSettingsManager.apply_profile() appears to pass its merged dictionary directly to ModelSettings.from_dict(), allowing this expected validation error to propagate through the admin route as HTTP 500.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
Summary
Applying a sampling profile that sets a non-zero
presence_penaltyto a model whose base settings havevlm_mtp_enabled: truereturns an unhandled HTTP 500 from the admin API.The incompatibility itself appears intentional because the VLM MTP decode path cannot apply the per-request logits processor. The problem is that the profile UI/API allows the conflicting effective configuration to reach
ModelSettingsconstruction and exposes the validationValueErroras an internal server error.Environment
0.6.126.6.1arm64)Qwen3.8-27B-8bitReproduction
vlm_mtp_enabledin the model's base settings.presence_penalty: 1.5.Relevant effective settings:
{ "base_model_settings": { "vlm_mtp_enabled": true }, "profile_settings": { "presence_penalty": 1.5, "repetition_penalty": 1.0 } }Actual behavior
The request fails:
The failure occurs while constructing the merged
ModelSettings, before the new settings are assigned or persisted, so the profile is not partially activated.Expected behavior
One of the following would make the failure actionable:
vlm_mtp_enabledsetting when an output-shaping penalty is applied.The report is about profile validation and API/UI error handling, not about removing the VLM MTP restriction.
Source observation
The current implementation has
resolve_vlm_mtp_conflicts()for some saved-settings and runtime-profile merge paths.ModelSettingsManager.apply_profile()appears to pass its merged dictionary directly toModelSettings.from_dict(), allowing this expected validation error to propagate through the admin route as HTTP 500.All reactions