OpenAI Provider
Connect to the OpenAI API (
api.openai.com) for chat completions, embeddings, image generation, and speech.
Quick Start
builder.Services
.AddCoreAIServices()
.AddCoreAIOrchestration()
.AddCoreAIOpenAI();
Services Registered
| Service | Implementation | Lifetime |
|---|---|---|
IAIClientProvider | OpenAIClientProvider | Scoped |
IAICompletionClient | OpenAICompletionClient | Scoped |
| Connection source | — | Scoped |
Configuration
Connection Setup
Provide an API key through your connection source:
builder.Services.AddCoreAIConnectionSource("OpenAI", options =>
{
options.Connections.Add(new AIProviderConnectionEntry
{
Name = "my-openai",
ClientName = "OpenAI",
// Set API key and optional endpoint
});
});
Constants
| Constant | Value |
|---|---|
OpenAIConstants.ClientName | "OpenAI" |
Capabilities
| Capability | Supported |
|---|---|
| Chat completions | ✅ |
| Streaming | ✅ |
| Embeddings | ✅ |
| Image generation | ✅ |
| Speech-to-text | ✅ |
| Text-to-speech | ✅ |
Configuration Example
A full appsettings.json configuration for OpenAI:
{
"CrestApps": {
"AI": {
"Connections": [
{
"Name": "openai-primary",
"ClientName": "OpenAI",
"ApiKey": "sk-..."
}
]
}
}
}
Or register connections programmatically:
builder.Services.AddCoreAIConnectionSource("OpenAI", options =>
{
options.Connections.Add(new AIProviderConnectionEntry
{
Name = "my-openai",
ClientName = "OpenAI",
// API key is read from configuration or set directly
});
});
OpenAI-compatible endpoints
The OpenAI client is often useful beyond api.openai.com. It can also connect to providers that expose OpenAI-compatible chat and embedding endpoints.
Common examples include:
| Provider | Notes |
|---|---|
| OpenAI | Native target for this client |
| Azure OpenAI | OpenAI-compatible request shape with Azure-specific endpoint and deployment conventions |
| Anthropic | Provides OpenAI-compatible endpoints in addition to its native Claude API |
| Google Gemini | Offers an OpenAI-compatibility layer for supported Gemini models |
| Groq | OpenAI-compatible chat/completions API |
| Mistral | OpenAI-compatible API surface for supported models |
| xAI | OpenAI-compatible API for Grok models |
| Together AI | OpenAI-compatible endpoints for hosted open-weight models |
| Fireworks AI | OpenAI-compatible endpoints for hosted open-weight models |
| OpenRouter | OpenAI-compatible multi-provider routing layer |
| DeepSeek | OpenAI-compatible chat and embedding-style endpoints |
| Perplexity | OpenAI-compatible chat/completions endpoint |
| Ollama / vLLM / LocalAI | Common self-hosted OpenAI-compatible endpoints |
Some providers expose both OpenAI-compatible and native APIs. Anthropic is one example: you can use its OpenAI-compatible endpoint through this client, or use the dedicated Claude Orchestrator when you want the native Claude-oriented integration path.
Never commit API keys to source control. Use environment variables, user secrets, or a vault provider for the values you map into your CrestApps:AI:Connections configuration.
Available Models
| Model | Type | Context Window | Best For |
|---|---|---|---|
gpt-4.1 | Chat | 1M tokens | Complex reasoning, coding, instruction following |
gpt-4.1-mini | Chat | 1M tokens | Balanced performance and cost |
gpt-4.1-nano | Chat | 1M tokens | Fast, cost-effective for simple tasks |
o4-mini | Reasoning | 200K tokens | STEM, math, coding with chain-of-thought |
gpt-4o | Chat | 128K tokens | Multimodal (text + vision), general purpose |
gpt-4o-mini | Chat | 128K tokens | Budget-friendly multimodal |
text-embedding-3-small | Embedding | 8K tokens | Cost-effective embeddings |
text-embedding-3-large | Embedding | 8K tokens | Higher-quality embeddings |
dall-e-3 | Image | — | Image generation |
whisper-1 | Speech-to-text | — | Audio transcription |
tts-1 / tts-1-hd | Text-to-speech | — | Voice synthesis |
Model availability and capabilities change frequently. Check the OpenAI models documentation for the latest information.
Streaming
The OpenAI provider fully supports streaming responses. When streaming is enabled, tokens are sent to the client as they are generated rather than waiting for the complete response:
// Streaming is handled automatically by the orchestrator when the
// chat interaction is configured for streaming (the default for real-time chat).
// No additional configuration is needed.
Streaming is the default behavior for the chat interactions module. The OpenAICompletionClient uses the IChatClient.GetStreamingResponseAsync() method from the Microsoft.Extensions.AI abstraction.
Function Calling
OpenAI models support function calling (tool use), which is the foundation for the Custom AI Tools system. When tools are registered and assigned to a profile, the OpenAI provider automatically:
- Serializes tool definitions as JSON Schema in the request
- Parses tool call responses from the model
- Invokes the matching
AIToolvia the orchestrator - Sends tool results back to the model for the final response
All GPT-4 and newer models support parallel function calling (multiple tools invoked in a single turn).