Skip to content

Commit d8343b1

Browse files
committed
Refactor message handling and UI in Ask.razor
- Introduced a new `MessageStatus` enum to replace the `IsCompleted` boolean in the `Message` class, allowing for better tracking of message states (New, Streaming, Completed). - Updated UI rendering to enhance message display with new div elements and conditional spinner for streaming messages. - Modified the `AskQuestion` method to set the status of user and assistant messages appropriately. - Added new CSS styles for improved layout and alignment of message components. - Overall improvements enhance functionality and user experience in the messaging system.
1 parent 505ccff commit d8343b1

2 files changed

Lines changed: 47 additions & 8 deletions

File tree

SqlDatabaseVectorSearch/Components/Pages/Ask.razor

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,20 @@
4747
else
4848
{
4949
<div class="card card-text d-inline-block p-2 px-3 m-1">
50-
<div>
51-
<Markdown style="overflow-y:auto;">@message.Text</Markdown>
50+
<div class="message-content">
51+
<div class="streaming-content">
52+
<div class="streaming-text">
53+
<Markdown style="overflow-y:auto;">@message.Text</Markdown>
54+
</div>
55+
@if (message.Status == MessageStatus.Streaming)
56+
{
57+
<div class="streaming-spinner-bottom-right">
58+
<Spinner Size="SpinnerSize.Small" Color="SpinnerColor.Primary" />
59+
</div>
60+
}
61+
</div>
5262
</div>
53-
@if (message.IsCompleted)
63+
@if (message.Status == MessageStatus.Completed)
5464
{
5565
<div class="d-flex justify-content-between">
5666
<div class="text-start bg-transparent mt-3">
@@ -170,10 +180,10 @@
170180
isAsking = true;
171181

172182
var userQuestion = new Question(conversationId, question!);
173-
var userMessage = new Message { Text = userQuestion.Text, Role = "user" };
183+
var userMessage = new Message { Text = userQuestion.Text, Role = "user", Status = MessageStatus.Completed };
174184
messages.Add(userMessage);
175185

176-
var assistantMessage = new Message { Role = "assistant" };
186+
var assistantMessage = new Message { Role = "assistant", Status = MessageStatus.New };
177187
messages.Add(assistantMessage);
178188

179189
question = null;
@@ -193,6 +203,7 @@
193203
{
194204
userMessage.Text = delta.ReformulatedQuestion;
195205
assistantMessage.TokenUsage = FormatTokenUsage(delta.TokenUsage);
206+
assistantMessage.Status = MessageStatus.Streaming;
196207
}
197208
else if (delta.StreamState == StreamState.Append)
198209
{
@@ -212,7 +223,7 @@
212223
IndexOnPage = c.IndexOnPage
213224
});
214225

215-
assistantMessage.IsCompleted = true;
226+
assistantMessage.Status = MessageStatus.Completed;
216227
assistantMessage.TokenUsage += FormatTokenUsage(delta.TokenUsage);
217228
}
218229

@@ -225,7 +236,7 @@
225236
catch (Exception ex)
226237
{
227238
assistantMessage.Text = $"There was an error while processing the question: {ex.Message}";
228-
assistantMessage.IsCompleted = true;
239+
assistantMessage.Status = MessageStatus.Completed;
229240
}
230241
finally
231242
{
@@ -299,13 +310,20 @@
299310
await JSRuntime.InvokeVoidAsync("scrollTo", chat);
300311
}
301312

313+
public enum MessageStatus
314+
{
315+
New,
316+
Streaming,
317+
Completed
318+
}
319+
302320
public class Message
303321
{
304322
public string? Text { get; set; }
305323

306324
public required string Role { get; set; }
307325

308-
public bool IsCompleted { get; set; }
326+
public MessageStatus Status { get; set; } = MessageStatus.New;
309327

310328
public string? TokenUsage { get; set; }
311329

SqlDatabaseVectorSearch/Components/Pages/Ask.razor.css

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,27 @@ input[type="checkbox"] + label {
7777
}
7878
}
7979

80+
.message-content {
81+
position: relative;
82+
}
83+
84+
.streaming-content {
85+
display: flex;
86+
align-items: flex-end;
87+
gap: 8px;
88+
min-height: 1.5em;
89+
}
90+
91+
.streaming-text {
92+
flex: 1;
93+
min-width: 0;
94+
}
95+
96+
.streaming-spinner-bottom-right {
97+
flex-shrink: 0;
98+
align-self: flex-end;
99+
}
100+
80101
.btn-clipboard {
81102
line-height: 1;
82103
color: var(--bs-body-color);

0 commit comments

Comments
 (0)