diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Directory.Packages.props b/src/Templates/Boilerplate/Bit.Boilerplate/src/Directory.Packages.props index a80716b1cc..54640b774a 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Directory.Packages.props +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Directory.Packages.props @@ -94,7 +94,6 @@ - diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Boilerplate.Server.Api.csproj b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Boilerplate.Server.Api.csproj index 6806f34332..5a0b38d0c4 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Boilerplate.Server.Api.csproj +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Boilerplate.Server.Api.csproj @@ -68,7 +68,6 @@ - diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Program.Services.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Program.Services.cs index 73735fe015..4200b0e758 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Program.Services.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Program.Services.cs @@ -5,7 +5,9 @@ //#if (signalR == true || database == "PostgreSQL" || database == "SqlServer") using System.ClientModel.Primitives; using Microsoft.SemanticKernel.Embeddings; -using SmartComponents.LocalEmbeddings.SemanticKernel; +//#endif +//#if (database == "PostgreSQL") +using Npgsql; //#endif //#if (database == "Sqlite") using Microsoft.Data.Sqlite; @@ -277,6 +279,7 @@ void AddDbContext(DbContextOptionsBuilder options) }); //#elif (database == "PostgreSQL") var dataSourceBuilder = new Npgsql.NpgsqlDataSourceBuilder(configuration.GetRequiredConnectionString("postgresdb")); + dataSourceBuilder.UseVector(); dataSourceBuilder.EnableDynamicJson(); options.UseNpgsql(dataSourceBuilder.Build(), dbOptions => { @@ -498,14 +501,6 @@ void AddDbContext(DbContextOptionsBuilder options) .UseOpenTelemetry(); // .UseDistributedCache() } - else - { - services.AddEmbeddingGenerator(sp => new LocalTextEmbeddingGenerationService() - .AsEmbeddingGenerator()) - .UseLogging() - .UseOpenTelemetry(); - // .UseDistributedCache() - } //#endif builder.Services.AddHangfire(configuration => diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/appsettings.json b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/appsettings.json index e1f1e19b71..d89c14fe96 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/appsettings.json +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/appsettings.json @@ -64,7 +64,8 @@ }, "HuggingFace": { "EmbeddingApiKey": null, - "EmbeddingEndpoint": null + "EmbeddingEndpoint": "http://localhost:7000", + "EmbeddingModel__Comment": "Run locally using `docker run -d --restart unless-stopped --name tei-embedding -p 7000:80 -v tei_data:/data ghcr.io/huggingface/text-embeddings-inference:cpu-1.8 --model-id BAAI/bge-small-en-v1.5`" } }, //#endif diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.AppHost/Realms/README.md b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.AppHost/Realms/README.md new file mode 100644 index 0000000000..cdb64eb6cc --- /dev/null +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.AppHost/Realms/README.md @@ -0,0 +1,29 @@ +# Keycloak Realm Configuration + +## Overview + +This directory contains the Keycloak realm configuration file (`dev-realm.json`) used by the Boilerplate. Keycloak is an **optional** open-source identity and access management solution that provides enterprise-grade authentication and authorization features. + +## What is Keycloak? + +Keycloak is a free, open-source identity server that provides: + +- **Centralized User Management**: Manage users, credentials, roles, and groups from a single location +- **Single Sign-On (SSO)**: Allow users to authenticate once and access multiple applications +- **Identity Brokering**: Integrate with external identity providers (LDAP, Active Directory, etc.) +- **Fine-Grained Authorization**: Define and enforce complex access control policies +- **Standards-Based**: Supports OpenID Connect, OAuth 2.0, and SAML 2.0 protocols + +## Keycloak in .NET Aspire + +When you run the Boilerplate project with .NET Aspire enabled (default configuration), Keycloak is automatically started as a containerized service. This provides a complete identity server for development and testing without any manual setup. + +The Keycloak container is configured in `Program.cs`: + +```csharp +var keycloak = builder.AddKeycloak("keycloak", 8080) + .WithDataVolume() + .WithRealmImport("./Realms"); +``` + +For more information, checkout .docs/07- ASP.NET Core Identity - Authentication & Authorization.md \ No newline at end of file diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/appsettings.json b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/appsettings.json index 375bf154e0..f84cabd261 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/appsettings.json +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/appsettings.json @@ -54,7 +54,7 @@ }, "HuggingFace": { "EmbeddingApiKey": null, - "EmbeddingEndpoint": null + "EmbeddingEndpoint": "http://localhost:7000" } }, "Email": {