Skip to content

Commit 9c4cd57

Browse files
committed
feat: show prompt variant customization state in agent configuration
- Add an `[edited]` prefix to the prompt variant id if it has been customized - Only show the reset button for a prompt variant if it has been customized
1 parent eeca2e3 commit 9c4cd57

File tree

1 file changed

+30
-13
lines changed

1 file changed

+30
-13
lines changed

packages/ai-ide/src/browser/ai-configuration/template-settings-renderer.tsx

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
//
1414
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
1515
// *****************************************************************************
16-
import { PromptService, PromptVariantSet } from '@theia/ai-core/lib/common';
16+
import { isCustomizedPromptFragment, PromptService, PromptVariantSet } from '@theia/ai-core/lib/common';
1717
import * as React from '@theia/core/shared/react';
1818
import { nls } from '@theia/core/lib/common/nls';
1919

@@ -32,6 +32,11 @@ export const PromptVariantRenderer: React.FC<PromptVariantRendererProps> = ({
3232
const defaultVariantId = promptService.getDefaultVariantId(promptVariantSet.id);
3333
const [selectedVariant, setSelectedVariant] = React.useState<string>(defaultVariantId!);
3434

35+
const isVariantCustomized = (variantId: string): boolean => {
36+
const fragment = promptService.getRawPromptFragment(variantId);
37+
return fragment ? isCustomizedPromptFragment(fragment) : false;
38+
};
39+
3540
React.useEffect(() => {
3641
const currentVariant = promptService.getSelectedVariantId(promptVariantSet.id);
3742
setSelectedVariant(currentVariant ?? defaultVariantId!);
@@ -79,14 +84,25 @@ export const PromptVariantRenderer: React.FC<PromptVariantRendererProps> = ({
7984
{nls.localize('theia/ai/core/templateSettings/unavailableVariant', 'Unavailable')}
8085
</option>
8186
)}
82-
{variantIds.map(variantId => (
83-
<option key={variantId} value={variantId}>
84-
{variantId === defaultVariantId ? variantId + ' ' + nls.localizeByDefault('(default)') : variantId}
85-
</option>
86-
))}
87+
{variantIds.map(variantId => {
88+
const isEdited = isVariantCustomized(variantId);
89+
const editedPrefix = isEdited ? `[${nls.localize('theia/ai/core/templateSettings/edited', 'edited')}] ` : '';
90+
const defaultSuffix = variantId === defaultVariantId ? ' ' + nls.localizeByDefault('(default)') : '';
91+
return (
92+
<option key={variantId} value={variantId}>
93+
{editedPrefix}{variantId}{defaultSuffix}
94+
</option>
95+
);
96+
})}
8797
</select>
8898
)}
89-
{variantIds.length === 1 && !isInvalidVariant && <span>{selectedVariant}</span>}
99+
{variantIds.length === 1 && !isInvalidVariant && (
100+
<span>
101+
{isVariantCustomized(selectedVariant)
102+
? `[${nls.localize('theia/ai/core/templateSettings/edited', 'edited')}] ${selectedVariant}`
103+
: selectedVariant}
104+
</span>
105+
)}
90106
</td>
91107
<td className="template-actions-cell">
92108
<button
@@ -95,12 +111,13 @@ export const PromptVariantRenderer: React.FC<PromptVariantRendererProps> = ({
95111
disabled={isInvalidVariant}
96112
title={nls.localizeByDefault('Edit')}
97113
/>
98-
<button
99-
className="template-action-icon-button codicon codicon-discard"
100-
onClick={resetTemplate}
101-
disabled={isInvalidVariant}
102-
title={nls.localizeByDefault('Reset')}
103-
/>
114+
{isVariantCustomized(selectedVariant) &&
115+
(<button
116+
className="template-action-icon-button codicon codicon-discard"
117+
onClick={resetTemplate}
118+
disabled={isInvalidVariant || !isVariantCustomized(selectedVariant)}
119+
title={nls.localizeByDefault('Reset')}
120+
/>)}
104121
</td>
105122
</tr>
106123
</>

0 commit comments

Comments
 (0)