feat: implement semantic search, knowledge unit extraction, and visualization components
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
@using NexusReader.Application.DTOs.AI
|
||||
@using NexusReader.UI.Shared.Components.Atoms
|
||||
@namespace NexusReader.UI.Shared.Components.Organisms
|
||||
|
||||
<div class="global-intelligence-panel">
|
||||
<div class="panel-header">
|
||||
<h3><i class="bi bi-cpu"></i> Global Intelligence</h3>
|
||||
<p>Semantic search across your library</p>
|
||||
</div>
|
||||
|
||||
<NexusSearchBox Placeholder="Ask a question about your books..." OnSearch="HandleSearch" />
|
||||
|
||||
<div class="results-container">
|
||||
@if (IsLoading)
|
||||
{
|
||||
<div class="loading-state">
|
||||
<div class="nexus-spinner"></div>
|
||||
<span>Analyzing your library...</span>
|
||||
</div>
|
||||
}
|
||||
else if (Results != null && Results.Any())
|
||||
{
|
||||
@foreach (var result in Results)
|
||||
{
|
||||
<div class="search-result-item">
|
||||
<div class="result-meta">
|
||||
<span class="relevance">@(Math.Round(result.RelevanceScore * 100))% Relevant</span>
|
||||
@if (!string.IsNullOrEmpty(result.SourceBookTitle))
|
||||
{
|
||||
<span class="source">in <strong>@result.SourceBookTitle</strong></span>
|
||||
}
|
||||
</div>
|
||||
<div class="result-snippet">
|
||||
@result.Snippet
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
}
|
||||
else if (HasSearched)
|
||||
{
|
||||
<div class="empty-state">
|
||||
<i class="bi bi-search"></i>
|
||||
<p>No semantic matches found.</p>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@code {
|
||||
[Parameter] public List<SemanticSearchResultDto>? Results { get; set; }
|
||||
[Parameter] public bool IsLoading { get; set; }
|
||||
[Parameter] public EventCallback<string> OnPerformSearch { get; set; }
|
||||
|
||||
private bool HasSearched { get; set; }
|
||||
|
||||
private async Task HandleSearch(string query)
|
||||
{
|
||||
HasSearched = true;
|
||||
await OnPerformSearch.InvokeAsync(query);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user