Files
Nexus.Reader/src/NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor
T

104 lines
2.7 KiB
Plaintext

@using MediatR
@using NexusReader.Application.Commands.AI
@using NexusReader.Application.Abstractions.Services
@using NexusReader.UI.Shared.Components.Atoms
@using Microsoft.AspNetCore.Components.Authorization
@inject IMediator Mediator
@inject AuthenticationStateProvider AuthProvider
<div class="groundedness-badge @GetStatusClass()" title="@_result?.Rationale">
@if (_isChecking)
{
<span class="shimmer">Weryfikacja...</span>
}
else if (_result != null)
{
<NexusIcon Name="@(GetIcon())" Size="14" />
<span>@((_result.Score * 100).ToString("0"))% Grounded</span>
}
</div>
<style>
.groundedness-badge {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 4px 8px;
border-radius: 12px;
font-size: 0.75rem;
font-weight: 600;
background: rgba(255, 255, 255, 0.05);
border: 1px solid rgba(255, 255, 255, 0.1);
transition: all 0.3s ease;
}
.groundedness-badge.status-high {
color: var(--nexus-neon);
border-color: var(--nexus-neon);
}
.groundedness-badge.status-medium {
color: #ffaa00;
border-color: #ffaa00;
}
.groundedness-badge.status-low {
color: #ff4444;
border-color: #ff4444;
}
.shimmer {
opacity: 0.6;
}
</style>
@code {
[Parameter] public string Answer { get; set; } = string.Empty;
[Parameter] public string Context { get; set; } = string.Empty;
private GroundednessResult? _result;
private bool _isChecking;
protected override async Task OnParametersSetAsync()
{
if (!string.IsNullOrEmpty(Answer) && !string.IsNullOrEmpty(Context) && _result == null)
{
await RunCheck();
}
}
private async Task RunCheck()
{
_isChecking = true;
StateHasChanged();
var authState = await AuthProvider.GetAuthenticationStateAsync();
var tenantId = authState.User.FindFirst("TenantId")?.Value ?? "global";
var res = await Mediator.Send(new VerifyGroundednessCommand(Answer, Context, tenantId));
if (res.IsSuccess)
{
_result = res.Value;
}
_isChecking = false;
StateHasChanged();
}
private string GetStatusClass()
{
if (_result == null) return "";
if (_result.Score >= 0.8) return "status-high";
if (_result.Score >= 0.5) return "status-medium";
return "status-low";
}
private string GetIcon()
{
if (_result == null) return "help";
if (_result.Score >= 0.8) return "check-circle";
if (_result.Score >= 0.5) return "info-circle";
return "alert-triangle";
}
}