feat: implement semantic search, knowledge unit extraction, and visualization components
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
@using MediatR
|
||||
@using NexusReader.Application.Commands.AI
|
||||
@using NexusReader.UI.Shared.Components.Atoms
|
||||
@inject IMediator Mediator
|
||||
|
||||
<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 res = await Mediator.Send(new VerifyGroundednessCommand(Answer, Context));
|
||||
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";
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user