Dependency Injection for AI Components

Register .NET AI clients, tools, prompts, and retrieval services with explicit lifetimes, safe request state, and clear disposal ownership.

September 9, 2026 · 10 min · Lukas Walter

Treat the model finish reason as a control signal

Check why generation stopped before accepting model output, and give incomplete responses an explicit application outcome.

September 9, 2026 · 2 min · Lukas Walter

Persist ingestion checkpoints at source boundaries

Track progress per consumer and source ordering boundary, and advance each checkpoint only after the corresponding ingestion work succeeds.

September 8, 2026 · 4 min · Lukas Walter

Treat provider throttling as a shared capacity signal

Let one throttling response reduce pressure from every caller sharing the affected capacity pool.

September 7, 2026 · 3 min · Lukas Walter

`await foreach` does not automatically use your cancellation token

A CancellationToken in scope does nothing unless the async enumeration receives and observes it.

September 6, 2026 · 2 min · Lukas Walter

Preserve the stack trace with `throw`, not `throw ex`

Rethrow the current exception with throw; so the original failure location remains visible.

September 5, 2026 · 2 min · Lukas Walter

Store a source checksum to skip unchanged documents

Compare a document’s source checksum, metadata, and ingestion profile before repeating extraction, chunking, embedding, and index writes.

September 4, 2026 · 4 min · Lukas Walter

Pin culture and time zone in tests that depend on them

Make culture and time zone explicit inputs when parsing, formatting, or local-time conversion depends on them.

September 3, 2026 · 2 min · Lukas Walter

Keep tool results inside a token budget

Bound every model-visible tool result before it enters the next prompt.

September 2, 2026 · 3 min · Lukas Walter

Your First Qdrant Collection

Run Qdrant locally, connect with the official .NET client, and create a collection whose vector size and distance match the embedding model.

September 2, 2026 · 7 min · Lukas Walter