Skip to content

Commit 84ebd9c

Browse files
committed
feat: improve chat rendering
1 parent 4fea821 commit 84ebd9c

File tree

3 files changed

+18
-16
lines changed

3 files changed

+18
-16
lines changed

packages/agent-webapp/src/components/chat.ts

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -146,19 +146,21 @@ export class ChatComponent extends LitElement {
146146
},
147147
};
148148
for await (const chunk of chunks) {
149+
this.isStreaming = true;
150+
149151
if (chunk.delta.content) {
150-
this.isStreaming = true;
151152
message.content += chunk.delta.content;
152-
this.messages = [...messages, message];
153-
}
154-
155-
if (chunk.delta.context?.['intermediateSteps']) {
153+
} else if (chunk.delta.context?.['intermediateSteps']) {
154+
// Only add intermediate steps when there is no content,
155+
// otherwise they will be duplicated
156156
message.context!['intermediateSteps'] = [
157-
...(message.context?.['intermediateSteps'] ?? []),
158-
...(chunk.delta.context?.['intermediateSteps'] ?? []),
157+
...message.context!['intermediateSteps'],
158+
...chunk.delta.context?.['intermediateSteps']
159159
];
160160
}
161161

162+
this.messages = [...messages, message];
163+
162164
const sessionId = (chunk.context as any)?.sessionId;
163165
if (!this.sessionId && sessionId) {
164166
this.sessionId = sessionId;
@@ -254,6 +256,7 @@ export class ChatComponent extends LitElement {
254256
${message.role === 'assistant'
255257
? html`<azc-debug .message=${message}></azc-debug>`
256258
: nothing}
259+
${!message.content ? html`<slot name="loader"><div class="loader-animation"></div></slot>` : nothing}
257260
<div class="content">${message.html}</div>
258261
</div>
259262
<div class="message-role">
@@ -545,17 +548,21 @@ export class ChatComponent extends LitElement {
545548
}
546549
img {
547550
max-width: 100%;
551+
max-height: 300px;
548552
border-radius: calc(var(--border-radius) / 2);
549553
}
550554
table {
551555
width: 100%;
552556
border-collapse: collapse;
553557
margin-bottom: var(--space-md);
558+
table-layout: fixed;
554559
th,
555560
td {
556561
border: 1px solid var(--border-color);
557562
padding: var(--space-xs);
558563
text-align: left;
564+
text-overflow: ellipsis;
565+
overflow: hidden;
559566
}
560567
th {
561568
background: color-mix(in srgb, var(--bot-message-bg), #000 5%);

packages/agent-webapp/src/components/debug.ts

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -93,9 +93,6 @@ export class DebugComponent extends LitElement {
9393
</div>
9494
<div class="step-summary">
9595
<span class="step-title">${summary}</span>
96-
${step.action?.toolInput && Object.keys(step.action.toolInput).length > 0
97-
? html`<span class="step-subtitle">with inputs</span>`
98-
: nothing}
9996
</div>
10097
<div class="step-toggle ${isExpanded ? 'expanded' : ''}">▼</div>
10198
</button>
@@ -130,7 +127,7 @@ export class DebugComponent extends LitElement {
130127
<span class="toggle-icon">
131128
${unsafeSVG(aiSvg)}
132129
</span>
133-
${this.isExpanded ? 'Hide thinking steps' : 'Show thinking steps'}
130+
${this.isExpanded ? 'Hide intermediate steps' : 'Show intermediate steps'} (${intermediateSteps.length})
134131
</button>
135132
136133
${this.isExpanded ? html`
@@ -307,11 +304,6 @@ export class DebugComponent extends LitElement {
307304
color: var(--text-color);
308305
}
309306
310-
.step-subtitle {
311-
font-size: 0.8rem;
312-
color: color-mix(in srgb, var(--text-color), transparent 40%);
313-
}
314-
315307
.step-toggle {
316308
transition: transform 0.2s ease;
317309
opacity: 0.6;

packages/agent-webapp/src/message-parser.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import DOMPurify from 'dompurify';
55
import { type AIChatMessage } from '@microsoft/ai-chat-protocol';
66

77
export type ParsedMessage = {
8+
content: string;
89
html: HTMLTemplateResult;
910
followupQuestions: string[];
1011
role: string;
@@ -14,6 +15,7 @@ export type ParsedMessage = {
1415
export function parseMessageIntoHtml(message: AIChatMessage, enableMarkdown = true): ParsedMessage {
1516
if (message.role === 'user') {
1617
return {
18+
content: message.content,
1719
html: html`${message.content}`,
1820
followupQuestions: [],
1921
role: message.role,
@@ -43,6 +45,7 @@ export function parseMessageIntoHtml(message: AIChatMessage, enableMarkdown = tr
4345
}
4446

4547
return {
48+
content: text,
4649
html: result,
4750
followupQuestions,
4851
role: message.role,

0 commit comments

Comments
 (0)