Skip to main content

AI Providers and Profiles

Reveal SDK AI separates provider connections from profiles. A provider holds credentials and endpoint details for an LLM service. A profile is the configuration clients select: it references a provider and specifies a model plus generation settings. This lets several profiles share one provider connection without exposing credentials or model identifiers to clients.

Providers

Register each LLM connection under a unique name. Built-in extensions register common connections; custom connections use AddProvider.

ProviderASP.NET NuGetRegistration nameExtension method
OpenAIReveal.Sdk.AI.OpenAIopenai.AddOpenAI()
Azure OpenAIReveal.Sdk.AI.AzureOpenAIazure-openai.AddAzureOpenAI()
AnthropicReveal.Sdk.AI.Anthropicanthropic.AddAnthropic()
Google GeminiReveal.Sdk.AI.Googlegoogle.AddGoogle()
Program.cs
builder.Services.AddRevealAI()
.AddOpenAI()
.AddAnthropic();

Use configuration or a secrets manager for connection settings:

appsettings.json
{
"RevealAI": {
"Providers": {
"openai": { "ApiKey": "<openai-api-key>" },
"anthropic": { "ApiKey": "<anthropic-api-key>" }
}
}
}

Profiles

Profiles name the models and settings available to clients. Define them in RevealAI:Profiles or with AddProfile; a profile defined in code overrides a configuration profile with the same name.

appsettings.json
{
"RevealAI": {
"DefaultProfile": "fast",
"Profiles": {
"fast": {
"Provider": "openai",
"Model": "gpt-4.1-mini",
"DisplayName": "Fast",
"Description": "Fast answers for everyday analysis",
"Temperature": 0.2,
"MaxOutputTokens": 2048
},
"premium": {
"Provider": "anthropic",
"Model": "claude-sonnet-4-5",
"DisplayName": "Premium"
}
}
}
}
Program.cs
builder.Services.AddRevealAI()
.AddOpenAI()
.AddAnthropic()
.AddProfile("fast", p =>
{
p.Provider = "openai";
p.Model = "gpt-4.1-mini";
p.DisplayName = "Fast";
p.Temperature = 0.2;
})
.AddProfile("premium", p =>
{
p.Provider = "anthropic";
p.Model = "claude-sonnet-4-5";
p.DisplayName = "Premium";
})
.SetDefaultProfile("fast");
PropertyRequiredDescription
ProviderYesRegistered provider connection name.
ModelYesModel ID or Azure OpenAI deployment name.
DisplayName, DescriptionNoClient-facing text for a model picker.
Temperature, MaxOutputTokens, TopP, ReasoningEffort, SeedNoGeneration settings.
AdditionalPropertiesNoProvider-specific call settings.

Default profile and intent routing

DefaultProfile is used when no profile is requested and the intent is unmapped. If exactly one profile exists, Reveal uses it by default. Pin a workflow to a profile with MapIntent; intent mappings take precedence over a client-requested profile.

builder.Services.AddRevealAI()
.AddOpenAI()
.AddAnthropic()
.AddProfile("default", p => { p.Provider = "openai"; p.Model = "gpt-4.1-mini"; })
.AddProfile("dashboard-generation", p => { p.Provider = "anthropic"; p.Model = "claude-sonnet-4-5"; })
.SetDefaultProfile("default")
.MapIntent(AIIntents.GenerationBuildReport, "dashboard-generation");

The server exposes profiles allowed for the current user at GET /api/reveal/ai/profiles. The response includes profile names, display information, and default status—not the provider connection or model ID.

Compatibility

DefaultProvider and provider-level model settings are retained for compatibility but are deprecated. Existing applications that register only a built-in provider keep working: Reveal creates a profile named after that provider registration (for example, openai). For new applications, use DefaultProfile and explicit profiles.

Custom providers

To integrate with an unsupported service, build a custom provider, register the connection, then add a profile that references it.