Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit b9b7c13

Browse files
Update report to display context bubbles under the conversation details for selected metrics
1 parent 19a3dd8 commit b9b7c13

File tree

3 files changed

+46
-3
lines changed

3 files changed

+46
-3
lines changed

src/Libraries/Microsoft.Extensions.AI.Evaluation.Reporting/TypeScript/components/ConversationDetails.tsx

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,13 @@ import ReactMarkdown from "react-markdown";
88
import { useReportContext } from "./ReportContext";
99
import { useStyles } from "./Styles";
1010
import { ChatMessageDisplay, isTextContent, isImageContent } from "./Summary";
11+
import type { MetricType } from "./MetricCard";
1112

12-
export const ConversationDetails = ({ messages, model, usage }: {
13+
export const ConversationDetails = ({ messages, model, usage, selectedMetric }: {
1314
messages: ChatMessageDisplay[];
1415
model?: string;
1516
usage?: UsageDetails;
17+
selectedMetric?: MetricType | null;
1618
}) => {
1719
const classes = useStyles();
1820
const [isExpanded, setIsExpanded] = useState(true);
@@ -59,7 +61,27 @@ export const ConversationDetails = ({ messages, model, usage }: {
5961
return result;
6062
};
6163

64+
const getContextGroups = () => {
65+
if (!selectedMetric || !selectedMetric.context) {
66+
return [];
67+
}
68+
69+
const contextGroups: { key: string, contents: AIContent[] }[] = [];
70+
71+
for (const [key, contents] of Object.entries(selectedMetric.context)) {
72+
if (contents && contents.length > 0) {
73+
contextGroups.push({
74+
key: key.toLowerCase(),
75+
contents: contents
76+
});
77+
}
78+
}
79+
80+
return contextGroups;
81+
};
82+
6283
const messageGroups = groupMessages();
84+
const contextGroups = getContextGroups();
6385

6486
return (
6587
<div className={classes.section}>
@@ -79,7 +101,7 @@ export const ConversationDetails = ({ messages, model, usage }: {
79101
);
80102

81103
return (
82-
<div key={index} className={messageRowClass}>
104+
<div key={`msg-${index}`} className={messageRowClass}>
83105
<div className={classes.messageParticipantName}>{group.participantName}</div>
84106
<div className={classes.messageBubble}>
85107
{group.contents.map((content, contentIndex) => (
@@ -91,6 +113,19 @@ export const ConversationDetails = ({ messages, model, usage }: {
91113
</div>
92114
);
93115
})}
116+
117+
{contextGroups.map((group, index) => (
118+
<div key={`context-${index}`} className={mergeClasses(classes.messageRow, classes.userMessageRow)}>
119+
<div className={classes.messageParticipantName}>{`supplied evaluation context (${group.key})`}</div>
120+
<div className={classes.contextBubble}>
121+
{group.contents.map((content, contentIndex) => (
122+
<div key={contentIndex}>
123+
{renderContent(content)}
124+
</div>
125+
))}
126+
</div>
127+
</div>
128+
))}
94129
</div>
95130
)}
96131
</div>

src/Libraries/Microsoft.Extensions.AI.Evaluation.Reporting/TypeScript/components/ScoreDetail.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ export const ScoreDetail = ({ scenario, scoreSummary }: { scenario: ScenarioRunR
3232
onMetricSelect={setSelectedMetric}
3333
selectedMetric={selectedMetric} />
3434
{selectedMetric && <MetricDetailsSection metric={selectedMetric} />}
35-
<ConversationDetails messages={messages} model={model} usage={usage} />
35+
<ConversationDetails messages={messages} model={model} usage={usage} selectedMetric={selectedMetric} />
3636
{scenario.chatDetails && scenario.chatDetails.turnDetails.length > 0 && <ChatDetailsSection chatDetails={scenario.chatDetails} />}
3737
</div>);
3838
};

src/Libraries/Microsoft.Extensions.AI.Evaluation.Reporting/TypeScript/components/Styles.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,14 @@ export const useStyles = makeStyles({
127127
backgroundColor: tokens.colorNeutralBackground3,
128128
border: '1px solid ' + tokens.colorNeutralStroke2,
129129
},
130+
contextBubble: {
131+
padding: '0.75rem 1rem',
132+
borderRadius: '12px',
133+
overflow: 'hidden',
134+
wordBreak: 'break-word',
135+
backgroundColor: tokens.colorBrandBackground2,
136+
border: '1px solid ' + tokens.colorNeutralStroke2,
137+
},
130138
cacheHitIcon: {
131139
color: tokens.colorPaletteGreenForeground1,
132140
},

0 commit comments

Comments
 (0)