dotnet / dotnet/skills

[dotnet-ai] MEAI chat integration

Open
#227 0 comments 0 reactions 0 assignees View on GitHub
area-ai skill
Dominant language
C#
Stars
5.4k
Forks
415
Avg merge
1d 4h
Merged PRs (30d)
84

Description

## Parent Issue

Part of the `dotnet-ai` plugin proposal: #225

## Summary

Add the `meai-chat-integration` skill to the `dotnet-ai` plugin.

This skill guides developers through integrating LLM chat capabilities into .NET applications using `Microsoft.Extensions.AI` (MEAI) and the `IChatClient` abstraction. It is the foundation layer that most other AI skills build upon.

## What This Skill Covers

- **IChatClient setup** with any provider (OpenAI, Azure OpenAI, Ollama, etc.)
- **ChatClientBuilder middleware pipeline** — `UseFunctionInvocation()`, `UseOpenTelemetry()`, `UseDistributedCache()`
- **Streaming** via `GetStreamingChatCompletionAsync()`
- **Structured output** with `GetResponseAsync()` for typed JSON responses
- **Retry/resilience** via `Microsoft.Extensions.Http.Resilience` and `StandardResilienceHandler`
- **Model pinning** with `ChatOptions.ModelId`
- **Token cost awareness** — extracting `Usage` from `ChatResponse`
- **Token counting and tokenizer selection** — using `Microsoft.ML.Tokenizers` for context window management and text truncation (detailed API in `references/tokenizers.md`)
- **Output validation** — checking `FinishReason` for truncation

## What This Skill Does NOT Cover

- Embeddings (use `meai-embeddings`)
- Agent workflows / tool calling (use `agentic-workflow`)
- ML.NET classical ML (use `mlnet`)
- Running pre-trained ONNX models (use `onnx-runtime-inference`)

## Reference Files

| File | Purpose |
|---|---|
| `references/tokenizers.md` | Microsoft.ML.Tokenizers API — all 8 tokenizer types (Tiktoken, BPE, SentencePiece, Llama, BERT, WordPiece, CodeGen, Phi2), token counting, truncation, encoding/decoding. Used by this skill for context window management and also referenced by data-ingestion-pipeline, onnx-runtime-inference, and rag-pipeline for their tokenization needs. |

## Files

```
plugins/dotnet-ai/skills/meai-chat-integration/
SKILL.md
references/
tokenizers.md
tests/dotnet-ai/meai-chat-integration/eval.yaml
```

## Eval Scenarios

1. **ASP.NET Core chat endpoint** — prompt asks to add chat to an API; expects IChatClient with DI registration, streaming, and middleware pipeline

## Key Packages

- `Microsoft.Extensions.AI` (core)
- `Microsoft.ML.Tokenizers` (token counting and context window management)
- Provider: `OpenAI`, `Azure.AI.OpenAI`, or `OllamaSharp`

## Dependencies

Requires the plugin scaffold (sub-issue #1) to be merged first.

## Acceptance Criteria

- [ ] SKILL.md has valid YAML frontmatter with `name` and `description`
- [ ] Covers IChatClient setup, streaming, structured output, middleware, resilience
- [ ] `references/tokenizers.md` covers all 8 tokenizer types, CountTokens, EncodeToIds, Decode, GetIndexByTokenCount
- [ ] eval.yaml has at least one scenario that validates the skill
- [ ] Does not duplicate content from other skills

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.