Table of Contents

Class RagDiagnostics

Namespace
Mythosia.AI.Rag.Diagnostics
Assembly
Mythosia.AI.Rag.dll

Diagnostic tool for debugging RAG pipeline quality issues. Provides visibility into each pipeline stage: chunking โ†’ embedding โ†’ search โ†’ context.

public class RagDiagnostics
Inheritance
RagDiagnostics
Inherited Members

Examples

var diag = new RagDiagnostics(ragPipeline);

// 1. Inspect how a document is chunked
var chunks = diag.PreviewChunks(document);
foreach (var c in chunks.Chunks)
    Console.WriteLine($"[{c.Index}] ({c.Content.Length} chars) {c.Content.Substring(0, 80)}...");

// 2. Find which chunk contains specific text
var matches = await diag.FindChunksContainingAsync("6,300๋งŒ์›");

// 3. Full diagnostic: see ALL scores, not just TopK
var result = await diag.DiagnoseQueryAsync("์ตœ๊ทผ ์—ฐ๋ด‰์ด ์–ผ๋งˆ์•ผ?");
foreach (var r in result.AllScoredResults)
    Console.WriteLine($"  [{r.Rank}] score={r.Score:F4} contains_target={r.ContainsText} | {r.Preview}");

Constructors

RagDiagnostics(RagPipeline)

Creates diagnostics from a RagPipeline instance.

public RagDiagnostics(RagPipeline pipeline)

Parameters

pipeline RagPipeline

RagDiagnostics(RagStore)

Creates diagnostics from a RagStore instance.

public RagDiagnostics(RagStore store)

Parameters

store RagStore

Methods

DiagnoseQueryAsync(string, string?, CancellationToken)

Runs the full RAG query pipeline with diagnostics enabled. Returns ALL chunk scores (not just TopK) so you can see exactly why a chunk was missed.

public Task<QueryDiagnosticResult> DiagnoseQueryAsync(string query, string? targetText = null, CancellationToken cancellationToken = default)

Parameters

query string

The user query to diagnose.

targetText string

Optional: text you expect to find in results (e.g., "6,300๋งŒ์›"). When provided, results are annotated with whether they contain this text.

cancellationToken CancellationToken

Cancellation token.

Returns

Task<QueryDiagnosticResult>

FindChunksContainingAsync(string, CancellationToken)

Searches all stored chunks for a specific text substring. Use this to verify that the target information (e.g., "6,300๋งŒ์›") was actually indexed.

public Task<IReadOnlyList<ChunkSearchMatch>> FindChunksContainingAsync(string text, CancellationToken cancellationToken = default)

Parameters

text string
cancellationToken CancellationToken

Returns

Task<IReadOnlyList<ChunkSearchMatch>>

PreviewChunks(RagDocument, ITextSplitter?)

Preview how a document would be split into chunks WITHOUT indexing. Use this to verify chunk boundaries and overlap quality.

public ChunkPreviewResult PreviewChunks(RagDocument document, ITextSplitter? splitter = null)

Parameters

document RagDocument
splitter ITextSplitter

Returns

ChunkPreviewResult