< Summary

Information
Class: UIBlazor.Components.AiChatMessage
Assembly: UIBlazor
File(s): /home/runner/work/InvAit/InvAit/UIBlazor/Components/AiChatMessage.razor
Tag: 14_22728831704
Line coverage
0%
Covered lines: 0
Uncovered lines: 20
Coverable lines: 20
Total lines: 71
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 16
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
BuildRenderTree(...)0%210140%
get_Message()100%210%
get_OnToolApproval()100%210%
get_ToolManager()100%210%
.ctor()100%210%
OnParametersSet()0%620%
OnToolApprovalHandler()100%210%

File(s)

/home/runner/work/InvAit/InvAit/UIBlazor/Components/AiChatMessage.razor

#LineLine coverage
 1@using System.Text.RegularExpressions
 2@using UIBlazor.Components.Chat
 3@using UIBlazor.Constants
 4@using UIBlazor.Models
 5
 6<div class="ai-chat-message">
 07    @if (Message.Role != ChatMessageRole.Assistant)
 8    {
 9        <MarkdownBlock Content="@Message.Content" />
 10    }
 11    else
 12    {
 013        @if (!string.IsNullOrEmpty(Message.ReasoningContent))
 14        {
 15            <details class="reasoning-details">
 016                <summary>@SharedResource.Thinking</summary>
 17                <MarkdownBlock Content="@Message.ReasoningContent" />
 18            </details>
 19        }
 20
 021        @foreach (var segment in Message.Segments)
 22        {
 023            if (segment.Type == SegmentType.Tool)
 24            {
 25                <ToolCallBlock @key="segment.Id"
 26                    Segment="@segment"
 27                    OnApproval="@OnToolApprovalHandler" />
 28            }
 029            else if (segment.Type is SegmentType.Markdown)
 30            {
 31                <MarkdownBlock @key="segment.Id" Content="@segment.CurrentLine.ToString()" />
 32            }
 33        }
 34
 035        @if (Message.ToolMessages.Any())
 36        {
 37            <div class="message-tool-results rz-mt-2">
 038                @foreach (var toolMsg in Message.ToolMessages)
 39                {
 40                    <details class="tool-details" @key="toolMsg.Id">
 041                        <summary>@toolMsg.ToolDisplayName</summary>
 042                        <pre class="rz-p-2 rz-background-color-base-900 rz-color-white" style="font-size: 0.8rem; border
 43                    </details>
 44                }
 45            </div>
 46        }
 47    }
 48</div>
 49
 50@code {
 051    [Parameter] public VisualChatMessage Message { get; set; } = new();
 052    [Parameter] public EventCallback<(string MessageId, string SegmentId, bool Approved)> OnToolApproval { get; set; }
 053    [Inject] private IToolManager ToolManager { get; set; } = null!;
 54
 055    private string _lastContent = string.Empty;
 56    private bool isAssistant = false;
 57
 58    protected override void OnParametersSet()
 59    {
 060        if (Message.Content != _lastContent)
 61        {
 062            isAssistant = Message.Role == ChatMessageRole.Assistant;
 063            _lastContent = Message.Content;
 64        }
 065    }
 66
 67    private async Task OnToolApprovalHandler((string SegmentId, bool Approved) args)
 68    {
 069        await OnToolApproval.InvokeAsync((Message.Id, args.SegmentId, args.Approved));
 070    }
 71}