diff --git a/app/src/main/java/com/dark/tool_neuron/engine/GGUFEngine.kt b/app/src/main/java/com/dark/tool_neuron/engine/GGUFEngine.kt index fb0e05ac..c333d465 100644 --- a/app/src/main/java/com/dark/tool_neuron/engine/GGUFEngine.kt +++ b/app/src/main/java/com/dark/tool_neuron/engine/GGUFEngine.kt @@ -64,7 +64,12 @@ class GGUFEngine { nativeLib.nativeSetSystemPrompt(inference.systemPrompt) } if (inference.chatTemplate.isNotEmpty()) { - nativeLib.nativeSetChatTemplate(inference.chatTemplate) + val template = if (!inference.enableThinking) { + "{% set enable_thinking = false %}\n" + inference.chatTemplate + } else { + inference.chatTemplate + } + nativeLib.nativeSetChatTemplate(template) } } @@ -115,7 +120,12 @@ class GGUFEngine { nativeLib.nativeSetSystemPrompt(inference.systemPrompt) } if (inference.chatTemplate.isNotEmpty()) { - nativeLib.nativeSetChatTemplate(inference.chatTemplate) + val template = if (!inference.enableThinking) { + "{% set enable_thinking = false %}\n" + inference.chatTemplate + } else { + inference.chatTemplate + } + nativeLib.nativeSetChatTemplate(template) } } diff --git a/app/src/main/java/com/dark/tool_neuron/models/engine_schema/GgufEngineSchema.kt b/app/src/main/java/com/dark/tool_neuron/models/engine_schema/GgufEngineSchema.kt index d59d1c97..84450129 100644 --- a/app/src/main/java/com/dark/tool_neuron/models/engine_schema/GgufEngineSchema.kt +++ b/app/src/main/java/com/dark/tool_neuron/models/engine_schema/GgufEngineSchema.kt @@ -72,7 +72,8 @@ data class GgufInferenceParams( val maxTokens: Int = 4096, val systemPrompt: String = "", val chatTemplate: String = "", - val toolsJson: String = "" // JSON array of tool definitions + val toolsJson: String = "", // JSON array of tool definitions + val enableThinking: Boolean = true // Enable/Disable Qwen3.5 thinking tokens ) @Serializable diff --git a/app/src/main/java/com/dark/tool_neuron/ui/screen/ModelConfigEditorScreen.kt b/app/src/main/java/com/dark/tool_neuron/ui/screen/ModelConfigEditorScreen.kt index f611853d..50d8f090 100644 --- a/app/src/main/java/com/dark/tool_neuron/ui/screen/ModelConfigEditorScreen.kt +++ b/app/src/main/java/com/dark/tool_neuron/ui/screen/ModelConfigEditorScreen.kt @@ -463,6 +463,13 @@ private fun GgufConfigEditor(viewModel: ModelConfigEditorViewModel) { multiline = true, minLines = 3 ) + + SwitchField( + label = "Enable Thinking", + description = "Enable reasoning tokens for supported models (e.g., Qwen3.5)", + checked = ggufConfig.inferenceParams.enableThinking, + onCheckedChange = { viewModel.updateGgufEnableThinking(it) } + ) } } } diff --git a/app/src/main/java/com/dark/tool_neuron/viewmodel/ModelConfigEditorViewModel.kt b/app/src/main/java/com/dark/tool_neuron/viewmodel/ModelConfigEditorViewModel.kt index 59fb9f6f..257aa689 100644 --- a/app/src/main/java/com/dark/tool_neuron/viewmodel/ModelConfigEditorViewModel.kt +++ b/app/src/main/java/com/dark/tool_neuron/viewmodel/ModelConfigEditorViewModel.kt @@ -247,6 +247,12 @@ class ModelConfigEditorViewModel @Inject constructor( } } + fun updateGgufEnableThinking(value: Boolean) { + _ggufConfig.update { + it.copy(inferenceParams = it.inferenceParams.copy(enableThinking = value)) + } + } + // ==================== Diffusion Config Updates ==================== fun updateDiffusionEmbeddingSize(value: Int) {