# `Nous.StreamNormalizer.OpenAI`
[🔗](https://github.com/nyo16/nous/blob/v0.17.1/lib/nous/stream_normalizer/openai.ex#L1)

Default stream normalizer for OpenAI-compatible providers.

Handles:
- OpenAI, Groq, OpenRouter (via OpenaiEx structs with atom keys)
- LM Studio, vLLM, SGLang, Ollama (string-keyed maps)
- Non-streaming fallback (message instead of delta)
- Thinking/reasoning tokens (vLLM: reasoning, DeepSeek/SGLang: reasoning_content)

## Supported Providers

| Provider | Format | Notes |
|----------|--------|-------|
| OpenAI | Atom keys | Via OpenaiEx structs |
| Groq | Atom keys | Via OpenaiEx structs |
| OpenRouter | Atom keys | Via OpenaiEx structs |
| LM Studio | String keys | May return message instead of delta |
| vLLM | String keys | SSE format, reasoning field |
| SGLang | String keys | SSE format, reasoning_content field |
| Ollama | String keys | OpenAI-compatible endpoint |
| DeepSeek | String keys | reasoning_content field |

---

*Consult [api-reference.md](api-reference.md) for complete listing*
