Skip to content

Commit 8bba34e

Browse files
committed
fix: resolve model displayName from providers for playground history
Map model IDs to display names using loaded provider data so both old and new history records show friendly names (e.g. GLM 5.1 not glm-5.1).
1 parent 78ba245 commit 8bba34e

2 files changed

Lines changed: 30 additions & 8 deletions

File tree

frontend/src/components/PlaygroundHistorySidebar.test.tsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ describe('PlaygroundHistorySidebar', () => {
6363
it('displays model name and prompt snippet', () => {
6464
const items = [makeItem({ modelName: 'claude-3', promptSnippet: 'Test prompt' })];
6565
render(<PlaygroundHistorySidebar {...defaultProps} items={items} />);
66-
expect(screen.getByText('claude-3')).toBeInTheDocument();
66+
expect(screen.getByText('OpenAI/claude-3')).toBeInTheDocument();
6767
expect(screen.getByText('Test prompt')).toBeInTheDocument();
6868
});
6969

@@ -99,7 +99,7 @@ describe('PlaygroundHistorySidebar', () => {
9999
const items = [makeItem({ id: 'click-test' })];
100100
render(<PlaygroundHistorySidebar {...defaultProps} items={items} onSelect={onSelect} />);
101101

102-
const item = screen.getByText('gpt-4').closest('[role="button"]')!;
102+
const item = screen.getByText('OpenAI/gpt-4').closest('[role="button"]')!;
103103
fireEvent.click(item);
104104
expect(onSelect).toHaveBeenCalledWith('click-test');
105105
});
@@ -109,7 +109,7 @@ describe('PlaygroundHistorySidebar', () => {
109109
const items = [makeItem({ id: 'key-test' })];
110110
render(<PlaygroundHistorySidebar {...defaultProps} items={items} onSelect={onSelect} />);
111111

112-
const item = screen.getByText('gpt-4').closest('[role="button"]')!;
112+
const item = screen.getByText('OpenAI/gpt-4').closest('[role="button"]')!;
113113
fireEvent.keyDown(item, { key: 'Enter' });
114114
expect(onSelect).toHaveBeenCalledWith('key-test');
115115
});
@@ -119,7 +119,7 @@ describe('PlaygroundHistorySidebar', () => {
119119
const items = [makeItem({ id: 'space-test' })];
120120
render(<PlaygroundHistorySidebar {...defaultProps} items={items} onSelect={onSelect} />);
121121

122-
const item = screen.getByText('gpt-4').closest('[role="button"]')!;
122+
const item = screen.getByText('OpenAI/gpt-4').closest('[role="button"]')!;
123123
fireEvent.keyDown(item, { key: ' ' });
124124
expect(onSelect).toHaveBeenCalledWith('space-test');
125125
});
@@ -152,7 +152,7 @@ describe('PlaygroundHistorySidebar', () => {
152152
const items = [makeItem({ id: 'sel-1' }), makeItem({ id: 'sel-2', modelName: 'gpt-3.5' })];
153153
render(<PlaygroundHistorySidebar {...defaultProps} items={items} selectedId="sel-1" />);
154154

155-
const selectedItem = screen.getByText('gpt-4').closest('[role="button"]')!;
155+
const selectedItem = screen.getByText('OpenAI/gpt-4').closest('[role="button"]')!;
156156
expect(selectedItem.className).toContain('border-accent-blue');
157157
});
158158
});
@@ -164,7 +164,7 @@ describe('PlaygroundHistorySidebar', () => {
164164
const items = [makeItem()];
165165
render(<PlaygroundHistorySidebar {...defaultProps} items={items} />);
166166

167-
const itemContainer = screen.getByText('gpt-4').closest('[role="button"]')!;
167+
const itemContainer = screen.getByText('OpenAI/gpt-4').closest('[role="button"]')!;
168168
expect(itemContainer.tagName).not.toBe('BUTTON');
169169
// Should be a div with role="button"
170170
expect(itemContainer.tagName).toBe('DIV');
@@ -198,7 +198,7 @@ describe('PlaygroundHistorySidebar', () => {
198198
const items = [makeItem()];
199199
render(<PlaygroundHistorySidebar {...defaultProps} items={items} />);
200200

201-
const itemContainer = screen.getByText('gpt-4').closest('[role="button"]')!;
201+
const itemContainer = screen.getByText('OpenAI/gpt-4').closest('[role="button"]')!;
202202
expect(itemContainer.getAttribute('tabindex')).toBe('0');
203203
});
204204
});

frontend/src/components/PlaygroundPage.tsx

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,28 @@ export function PlaygroundPage() {
9696
clearAll,
9797
} = usePlaygroundHistory();
9898

99+
// Build model ID → displayName lookup from loaded providers
100+
const modelDisplayNames = useMemo(() => {
101+
const map: Record<string, string> = {};
102+
for (const p of providers) {
103+
for (const m of p.models ?? []) {
104+
if (m.displayName) map[m.name] = m.displayName;
105+
}
106+
}
107+
return map;
108+
}, [providers]);
109+
110+
// Enrich history items with display names
111+
const enrichedHistoryItems = useMemo(
112+
() =>
113+
historyItems.map((it) => {
114+
const raw = it.modelName.includes('/') ? it.modelName.split('/').pop()! : it.modelName;
115+
const display = modelDisplayNames[raw] || it.modelName;
116+
return display !== it.modelName ? { ...it, modelName: display } : it;
117+
}),
118+
[historyItems, modelDisplayNames],
119+
);
120+
99121
const [providerId, setProviderIdRaw] = useState<string | null>(
100122
() => searchParams.get('provider') || getStoredProvider(),
101123
);
@@ -816,7 +838,7 @@ export function PlaygroundPage() {
816838
{/* History Sidebar */}
817839
{historyOpen && (
818840
<PlaygroundHistorySidebar
819-
items={historyItems}
841+
items={enrichedHistoryItems}
820842
loading={historyLoading}
821843
onSelect={handleSelectHistory}
822844
onDelete={deleteEntry}

0 commit comments

Comments
 (0)