diff --git a/com.microsoft.copilot.eclipse.ui.test/src/com/microsoft/copilot/eclipse/ui/utils/ModelUtilsTests.java b/com.microsoft.copilot.eclipse.ui.test/src/com/microsoft/copilot/eclipse/ui/utils/ModelUtilsTests.java index 4955f271..48d3588d 100644 --- a/com.microsoft.copilot.eclipse.ui.test/src/com/microsoft/copilot/eclipse/ui/utils/ModelUtilsTests.java +++ b/com.microsoft.copilot.eclipse.ui.test/src/com/microsoft/copilot/eclipse/ui/utils/ModelUtilsTests.java @@ -8,9 +8,14 @@ import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; +import java.util.List; + import org.junit.jupiter.api.Test; import com.microsoft.copilot.eclipse.core.lsp.protocol.CopilotModel; +import com.microsoft.copilot.eclipse.core.lsp.protocol.CopilotModel.CopilotModelCapabilities; +import com.microsoft.copilot.eclipse.core.lsp.protocol.CopilotModel.CopilotModelCapabilitiesLimits; +import com.microsoft.copilot.eclipse.core.lsp.protocol.CopilotModel.CopilotModelCapabilitiesSupports; import com.microsoft.copilot.eclipse.core.lsp.protocol.CopilotScope; import com.microsoft.copilot.eclipse.core.lsp.protocol.byok.ByokModel; import com.microsoft.copilot.eclipse.core.lsp.protocol.byok.ByokModelCapabilities; @@ -76,4 +81,15 @@ void testConvertByokModelToCopilotModel_preservesTokenLimits() { assertEquals(128000, result.getCapabilities().limits().maxInputTokens()); assertEquals(16000, result.getCapabilities().limits().maxOutputTokens()); } + + @Test + void testResolveDefaultReasoningEffort_prefersMediumForClaudeModels() { + CopilotModel model = new CopilotModel(); + model.setModelFamily("claude-3.7-sonnet"); + model.setCapabilities(new CopilotModelCapabilities( + new CopilotModelCapabilitiesSupports(false, List.of("low", "medium", "high"), true), + new CopilotModelCapabilitiesLimits(null, null, null, null))); + + assertEquals("medium", ModelUtils.resolveDefaultReasoningEffort(model)); + } } diff --git a/com.microsoft.copilot.eclipse.ui/src/com/microsoft/copilot/eclipse/ui/utils/ModelUtils.java b/com.microsoft.copilot.eclipse.ui/src/com/microsoft/copilot/eclipse/ui/utils/ModelUtils.java index cec4a159..3533e651 100644 --- a/com.microsoft.copilot.eclipse.ui/src/com/microsoft/copilot/eclipse/ui/utils/ModelUtils.java +++ b/com.microsoft.copilot.eclipse.ui/src/com/microsoft/copilot/eclipse/ui/utils/ModelUtils.java @@ -78,9 +78,9 @@ public static String formatBillingMultiplier(double multiplier) { } /** - * Separator used between parts of the model picker suffix (e.g. "1M | High | $$$"). + * Separator used between parts of the model picker suffix (e.g. "1M - High - $$$"). */ - private static final String SUFFIX_PART_SEPARATOR = " | "; + private static final String SUFFIX_PART_SEPARATOR = " - "; /** * Returns the display suffix for a model in the model picker. @@ -196,8 +196,8 @@ public static String formatTokenCount(int tokens) { } /** - * Returns the default reasoning effort to use when the user has not made a selection. Prefers {@code high} for - * Claude models and {@code medium} for all others, falling back to the first entry in the supported list. + * Returns the default reasoning effort to use when the user has not made a selection. Prefers {@code medium} when + * it is supported, falling back to the first entry in the supported list. * * @param model the model * @return the default effort identifier, or {@code null} when none can be determined @@ -207,11 +207,8 @@ public static String resolveDefaultReasoningEffort(CopilotModel model) { if (efforts.isEmpty()) { return null; } - String modelFamily = model.getModelFamily(); - String preferred = modelFamily != null && modelFamily.toLowerCase(Locale.ROOT).startsWith("claude") ? "high" - : "medium"; for (String effort : efforts) { - if (preferred.equalsIgnoreCase(effort)) { + if ("medium".equalsIgnoreCase(effort)) { return effort; } }