With .NET Aspire, you can orchestrate a full AI chat system — backend, model, data store, and frontend — from one place.
This sample shows how Aspire can manage a large language model (LLM), a Postgres conversation database, a Redis message broker, and a React-based chat UI, all within a single orchestration file.
Folder layout
11_AIChat/
├─ AppHost/ # Aspire orchestration
├─ ChatApi/ # .NET 9 backend API (SignalR + EF)
├─ chatui/ # React + Vite frontend
├─ ServiceDefaults/ # shared settings (logging, health, OTEL)
└─ README.md
Overview
This example demonstrates:
- AI model orchestration with local Ollama or hosted OpenAI
- Postgres database for conversation history
- Redis for live chat streaming and cancellation coordination
- Chat API using ASP.NET Core + SignalR
- React/Vite frontend for real-time conversations
- Full Docker Compose publishing via Aspire
The AppHost (orchestration)
AppHost/Program.cs
var builder = DistributedApplication.CreateBuilder(args);
// Publish this as a Docker Compose application
builder.AddDockerComposeEnvironment("env")
.WithDashboard(db => db.WithHostPort(8085))
.ConfigureComposeFile(file =>
{
file.Name = "aspire-ai-chat";
});
// The AI model definition
var model = builder.AddAIModel("llm");
if (OperatingSystem.IsMacOS())
{
model.AsOpenAI("gpt-4o-mini");
}
else
{
model.RunAsOllama("phi4", c =>
{
c.WithGPUSupport();
c.WithLifetime(ContainerLifetime.Persistent);
})
.PublishAsOpenAI("gpt-4o-mini");
}
// Postgres for conversation history
var pgPassword = builder.AddParameter("pg-password", secret: true);
var db = builder.AddPostgres("pg", password: pgPassword)
.WithDataVolume(builder.ExecutionContext.IsPublishMode ? "pgvolume" : null)
.WithPgAdmin()
.AddDatabase("conversations");
// Redis for message streams + coordination
var cache = builder.AddRedis("cache").WithRedisInsight();
// Chat API service
var chatapi = builder.AddProject<Projects.ChatApi>("chatapi")
.WithReference(model).WaitFor(model)
.WithReference(db).WaitFor(db)
.WithReference(cache).WaitFor(cache);
// Frontend served via Vite
builder.AddNpmApp("chatui", "../chatui")
.WithNpmPackageInstallation()
.WithHttpEndpoint(env: "PORT")
.WithReverseProxy(chatapi.GetEndpoint("http"))
.WithExternalHttpEndpoints()
.WithOtlpExporter()
.WithEnvironment("BROWSER", "none");
builder.Build().Run();
Continue reading “Building an AI Chat app with .NET Aspire, Ollama/OpenAI, Postgres, and Redis”
