mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-18 20:51:10 +00:00
fix(telegram): compare full provider/model in models picker
This commit is contained in:
@@ -205,6 +205,11 @@ describe("buildModelsKeyboard", () => {
|
||||
currentModel: "anthropic/claude-sonnet-4",
|
||||
firstText: "claude-sonnet-4 ✓",
|
||||
},
|
||||
{
|
||||
name: "legacy bare model id fallback still marks current model",
|
||||
currentModel: "claude-sonnet-4",
|
||||
firstText: "claude-sonnet-4 ✓",
|
||||
},
|
||||
] as const;
|
||||
for (const testCase of cases) {
|
||||
const result = buildModelsKeyboard({
|
||||
@@ -283,6 +288,20 @@ describe("buildModelsKeyboard", () => {
|
||||
expect(anthropicResult[0]?.[0]?.text).toBe("Anthropic Shared");
|
||||
});
|
||||
|
||||
it("does not mark same-id models from other providers as current", () => {
|
||||
const result = buildModelsKeyboard({
|
||||
provider: "openai-codex",
|
||||
models: ["gpt-5.4", "gpt-5.3-codex-spark"],
|
||||
currentModel: "github-copilot/gpt-5.4",
|
||||
currentPage: 1,
|
||||
totalPages: 1,
|
||||
});
|
||||
|
||||
const texts = result.flat().map((button) => button.text);
|
||||
expect(texts).toContain("gpt-5.4");
|
||||
expect(texts).not.toContain("gpt-5.4 ✓");
|
||||
});
|
||||
|
||||
it("renders pagination controls for first, middle, and last pages", () => {
|
||||
const cases = [
|
||||
{
|
||||
|
||||
@@ -144,6 +144,20 @@ export function resolveModelSelection(params: {
|
||||
};
|
||||
}
|
||||
|
||||
function isCurrentModelSelection(params: {
|
||||
currentModel?: string;
|
||||
provider: string;
|
||||
model: string;
|
||||
}): boolean {
|
||||
const currentModel = params.currentModel?.trim();
|
||||
if (!currentModel) {
|
||||
return false;
|
||||
}
|
||||
return currentModel.includes("/")
|
||||
? currentModel === `${params.provider}/${params.model}`
|
||||
: currentModel === params.model;
|
||||
}
|
||||
|
||||
/**
|
||||
* Build provider selection keyboard with 2 providers per row.
|
||||
*/
|
||||
@@ -195,11 +209,6 @@ export function buildModelsKeyboard(params: ModelsKeyboardParams): ButtonRow[] {
|
||||
const endIndex = Math.min(startIndex + pageSize, models.length);
|
||||
const pageModels = models.slice(startIndex, endIndex);
|
||||
|
||||
// Model buttons - one per row
|
||||
const currentModelId = currentModel?.includes("/")
|
||||
? currentModel.split("/").slice(1).join("/")
|
||||
: currentModel;
|
||||
|
||||
for (const model of pageModels) {
|
||||
const callbackData = buildModelSelectionCallbackData({ provider, model });
|
||||
// Skip models that still exceed Telegram's callback_data limit.
|
||||
@@ -207,7 +216,7 @@ export function buildModelsKeyboard(params: ModelsKeyboardParams): ButtonRow[] {
|
||||
continue;
|
||||
}
|
||||
|
||||
const isCurrentModel = model === currentModelId;
|
||||
const isCurrentModel = isCurrentModelSelection({ currentModel, provider, model });
|
||||
const displayLabel = modelNames?.get(`${provider}/${model}`) ?? model;
|
||||
const displayText = truncateModelId(displayLabel, 38);
|
||||
const text = isCurrentModel ? `${displayText} ✓` : displayText;
|
||||
|
||||
Reference in New Issue
Block a user