104 lines
2.7 KiB
Plaintext
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";
|
|
}
|
|
}
|