Guard conversation updates with a revision check

Reject stale chat-history writes when another turn changes the conversation during generation.

October 26, 2026 · 3 min · Lukas Walter

Composing IChatClient Middleware: Why Order Matters

Compare cache, retry, and telemetry order around IChatClient with a fake provider, exact event traces, cancellation, and a streaming failure.

October 25, 2026 · 13 min · Lukas Walter

Evaluating Retrieval Quality in .NET

Evaluate real Qdrant results in .NET with a custom IEvaluator, labeled chunks, Precision@K, Recall@K, MRR, nDCG, and persisted HTML reports.

October 22, 2026 · 17 min · Lukas Walter

Assembling Context for the Model

Assemble model context from Qdrant results in .NET: deduplicate exact text, check a local token allowance, and trace citations to admitted evidence.

October 17, 2026 · 18 min · Lukas Walter

Payload Modeling and Metadata Filters in Qdrant with .NET

Extend the .NET Qdrant chunking sample with payload metadata, keyword indexes, and filters that restrict retrieval to published runbooks.

October 13, 2026 · 12 min · Lukas Walter

Chunking for Qdrant in .NET Before It Becomes a Quality Problem

Extend .NET and Qdrant indexing with section boundaries, paragraph overlap, deterministic chunk IDs, and queries that expose incomplete evidence.

October 7, 2026 · 14 min · Lukas Walter

Bound in-process queues with Channel<T>

Limit buffered work with a bounded channel, then decide whether producers should wait, reject, or drop work when it fills.

October 6, 2026 · 3 min · Lukas Walter

Decorating IChatClient Without Tangling the Application

Compose shared chat-client behavior in .NET without moving feature policy into middleware or hiding streaming, caching, and retry costs.

September 30, 2026 · 7 min · Lukas Walter

A Span<T> cannot cross an await boundary

Keep span work between awaits. Carry memory or its backing buffer through asynchronous I/O.

September 29, 2026 · 2 min · Lukas Walter

Querying Qdrant from .NET

Turn a question into an embedding, apply payload filters, query Qdrant from .NET, and inspect the ranked results without treating a similarity score as proof of relevance.

September 23, 2026 · 9 min · Lukas Walter