Skip to content

Commit

Permalink
[release/8.0] Initial work for Qdrant resource and component (#3131) (#…
Browse files Browse the repository at this point in the history
…3416)

* Initial work for Qdrant resource and component (#3131)

This PR adds a Resource and initial Component (plus playground and tests)

Resource exposes two API access endpoints (REST + gRPC). The QdrantClient for .NET uses gRPC by default but Semantic Kernel does not use that client library so the other exposed endpoint is helpful.

REST endpoint by default exposes a Web UI dashboard -- this is excluded in Publish (per documentation in source, confirmed with Qdrant contributors).

Endpoints are secured non-optionally with an API Key (using ParameterResource -- will generate random if not provided).

Component used QdrantClient .NET version (recommended from Qdrant). This component uses gRPC endpoint by default. Settings will read from standard env vars for ConnectionString + API key or from config for the component itself if provided.

* Initial draft of QdrantServerResource
- exposed gRPC endpoint as primary (c# client uses that)
- exposes HTTP endpoint optionally (as dashboard is there)
- defaults to secure the access via API key (mainly due to dashboard)

* Fix-up after main rebase on removing InputAnnotation

* Remove dashboard in Publish mode
- change how dashboard is removed in Publish (per docs)
- add 'qdrant' to spelling.dic
- fix tests

* Fixup code style violations

* Change ApiKey reference
- Add WithReference overload (setting cn string + key)
- Added tests for named parameter on manifest
- Changed playground app

* Initial Qdrant component work
- adds component (using Qdrant.QdrantClient)
- Change playground to use DI component

* Changed rest endpoint name
- changed to 'rest' as named endpoint
- added to reference as a ConnectionString_{name}_rest (for support for SK)
- fixed tests

* Addressing PR feedback
- Changed parameters to component config
- change playground app to keyed services
- changed playground to use shared servicedefaults

* Fixing volume mounts to correct target location

* Add missing README to component

* Adding logo usage comment to readme after permission from Andrey V from Qdrant

* Changed playground sample
- matching sample Qdrant/.NET workbook sample

* PR Feedback: Name maps to client name used

* PR feedback on connection sring
- Moved to Endpoint/Key connection string
- Renamed to Key
- Modified schema to match/updated tests
- Changed primary endpoint to use scheme instead of hardcode
- removed env var for API key only
- fixed renamed component proj location in sln

* Updating readme/comments to match config

* Endpoint property typo fix

* PR Feedback
- No need for endpoint null check
- Fixed tests

* Cleanup of ServiceDefaults
Change to ReferenceExpression.Create

* More PR Feedback
- Rename component correctly
- Add component client tests
- Add component logging (and document)
- Add property for 2nd endpoint on resource directly

* PR feedback

* Fix up the playground to run with latest changes.

* Rename QdrantSettings to QdrantClientSettings to match the pattern in other components.

Add class level summary docs.

---------

Co-authored-by: Eric Erhardt <[email protected]>

* Addressing port/endpoint issues on Qdrant (#3422)

* Addressing port/endpoint issues on Qdrant

* PR feedback (param name)

* Fix up tests

* Respond to PR feedback.

Rename ports and endpoint names to be consistent.

* PR feedback
- moved to using grpc/http endpoint name consistent with config and prior art
- fixed wrong link in readme
- fixed/validated resource hosting test

---------

Co-authored-by: Eric Erhardt <[email protected]>

* Fix WithReference extension return type (#3449)

* Fix Qdrant WithReference to allow any IResourceWithEnvironment.

Also fix the same pattern in AWS.

---------

Co-authored-by: Tim Heuer <[email protected]>
  • Loading branch information
eerhardt and timheuer committed Apr 8, 2024
1 parent 258f072 commit e8b703f
Show file tree
Hide file tree
Showing 37 changed files with 1,297 additions and 2 deletions.
38 changes: 38 additions & 0 deletions Aspire.sln
Original file line number Diff line number Diff line change
Expand Up @@ -423,12 +423,24 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Aspire.Hosting.Azure.Sql",
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Aspire.Hosting.Azure.Storage", "src\Aspire.Hosting.Azure.Storage\Aspire.Hosting.Azure.Storage.csproj", "{89E9F2B8-662C-4FFA-8F69-360680362653}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Aspire.Hosting.Qdrant", "src\Aspire.Hosting.Qdrant\Aspire.Hosting.Qdrant.csproj", "{D3CDBA75-7707-4884-908D-1BA22B8DF8E7}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "qdrant", "qdrant", "{A4800EE3-F902-4B7B-AF53-01A85514E6B9}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Qdrant.AppHost", "playground\Qdrant\Qdrant.AppHost\Qdrant.AppHost.csproj", "{F43586B8-FE36-490D-9EFA-82CFFB83A304}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Qdrant.ApiService", "playground\Qdrant\Qdrant.ApiService\Qdrant.ApiService.csproj", "{6B6D3953-E961-4720-B27E-9466A69BED1A}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Aspire.Hosting.Azure.EventHubs", "src\Aspire.Hosting.Azure.EventHubs\Aspire.Hosting.Azure.EventHubs.csproj", "{2580B014-E7FE-48D9-BE40-E90604365F0E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aspire.Hosting.Tests.SharedShim", "tests\Aspire.Hosting.Tests.SharedShim\Aspire.Hosting.Tests.SharedShim.csproj", "{74644A4D-8F61-4314-B6E8-5CE3802CD6C2}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Aspire.Hosting.Azure.KeyVault", "src\Aspire.Hosting.Azure.KeyVault\Aspire.Hosting.Azure.KeyVault.csproj", "{427F4D7C-8969-4015-AD1A-5EFFE921A184}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Aspire.Qdrant.Client", "src\Components\Aspire.Qdrant.Client\Aspire.Qdrant.Client.csproj", "{E0E1B557-D3CF-4446-B993-E5CE719234FB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aspire.Qdrant.Client.Tests", "tests\Aspire.Qdrant.Client.Tests\Aspire.Qdrant.Client.Tests.csproj", "{A9CFA376-0C90-4231-9152-FBF14065195A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aspire.Azure.Messaging.EventHubs.Tests", "tests\Aspire.Azure.Messaging.EventHubs.Tests\Aspire.Azure.Messaging.EventHubs.Tests.csproj", "{8191109E-130C-47F3-B84E-82070A6CD269}"
EndProject
Global
Expand All @@ -437,6 +449,10 @@ Global
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{A9CFA376-0C90-4231-9152-FBF14065195A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A9CFA376-0C90-4231-9152-FBF14065195A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A9CFA376-0C90-4231-9152-FBF14065195A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A9CFA376-0C90-4231-9152-FBF14065195A}.Release|Any CPU.Build.0 = Release|Any CPU
{B52DCF1A-465D-4E92-A68A-0EE1A9ED49DF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B52DCF1A-465D-4E92-A68A-0EE1A9ED49DF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B52DCF1A-465D-4E92-A68A-0EE1A9ED49DF}.Release|Any CPU.ActiveCfg = Release|Any CPU
Expand Down Expand Up @@ -1113,6 +1129,18 @@ Global
{89E9F2B8-662C-4FFA-8F69-360680362653}.Debug|Any CPU.Build.0 = Debug|Any CPU
{89E9F2B8-662C-4FFA-8F69-360680362653}.Release|Any CPU.ActiveCfg = Release|Any CPU
{89E9F2B8-662C-4FFA-8F69-360680362653}.Release|Any CPU.Build.0 = Release|Any CPU
{D3CDBA75-7707-4884-908D-1BA22B8DF8E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D3CDBA75-7707-4884-908D-1BA22B8DF8E7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D3CDBA75-7707-4884-908D-1BA22B8DF8E7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D3CDBA75-7707-4884-908D-1BA22B8DF8E7}.Release|Any CPU.Build.0 = Release|Any CPU
{F43586B8-FE36-490D-9EFA-82CFFB83A304}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F43586B8-FE36-490D-9EFA-82CFFB83A304}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F43586B8-FE36-490D-9EFA-82CFFB83A304}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F43586B8-FE36-490D-9EFA-82CFFB83A304}.Release|Any CPU.Build.0 = Release|Any CPU
{6B6D3953-E961-4720-B27E-9466A69BED1A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6B6D3953-E961-4720-B27E-9466A69BED1A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6B6D3953-E961-4720-B27E-9466A69BED1A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6B6D3953-E961-4720-B27E-9466A69BED1A}.Release|Any CPU.Build.0 = Release|Any CPU
{2580B014-E7FE-48D9-BE40-E90604365F0E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2580B014-E7FE-48D9-BE40-E90604365F0E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2580B014-E7FE-48D9-BE40-E90604365F0E}.Release|Any CPU.ActiveCfg = Release|Any CPU
Expand All @@ -1125,6 +1153,10 @@ Global
{427F4D7C-8969-4015-AD1A-5EFFE921A184}.Debug|Any CPU.Build.0 = Debug|Any CPU
{427F4D7C-8969-4015-AD1A-5EFFE921A184}.Release|Any CPU.ActiveCfg = Release|Any CPU
{427F4D7C-8969-4015-AD1A-5EFFE921A184}.Release|Any CPU.Build.0 = Release|Any CPU
{E0E1B557-D3CF-4446-B993-E5CE719234FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E0E1B557-D3CF-4446-B993-E5CE719234FB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E0E1B557-D3CF-4446-B993-E5CE719234FB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E0E1B557-D3CF-4446-B993-E5CE719234FB}.Release|Any CPU.Build.0 = Release|Any CPU
{8191109E-130C-47F3-B84E-82070A6CD269}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8191109E-130C-47F3-B84E-82070A6CD269}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8191109E-130C-47F3-B84E-82070A6CD269}.Release|Any CPU.ActiveCfg = Release|Any CPU
Expand All @@ -1134,6 +1166,7 @@ Global
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{A9CFA376-0C90-4231-9152-FBF14065195A} = {4981B3A5-4AFD-4191-BF7D-8692D9783D60}
{B52DCF1A-465D-4E92-A68A-0EE1A9ED49DF} = {B80354C7-BE58-43F6-8928-9F3A74AB7F47}
{E958BE04-81C2-434C-9E6C-CA145A2B8218} = {A68BA1A5-1604-433D-9778-DC0199831C2A}
{C1D595AD-FFFD-4E52-AAF6-8DD8C4BD67F1} = {A68BA1A5-1604-433D-9778-DC0199831C2A}
Expand Down Expand Up @@ -1330,9 +1363,14 @@ Global
{CB7CAE39-F041-4B20-A0C4-D6F44920A647} = {77CFE74A-32EE-400C-8930-5025E8555256}
{9FF853BD-FA56-4DA5-A50A-9867F2FAB1F0} = {77CFE74A-32EE-400C-8930-5025E8555256}
{89E9F2B8-662C-4FFA-8F69-360680362653} = {77CFE74A-32EE-400C-8930-5025E8555256}
{D3CDBA75-7707-4884-908D-1BA22B8DF8E7} = {B80354C7-BE58-43F6-8928-9F3A74AB7F47}
{A4800EE3-F902-4B7B-AF53-01A85514E6B9} = {D173887B-AF42-4576-B9C1-96B9E9B3D9C0}
{F43586B8-FE36-490D-9EFA-82CFFB83A304} = {A4800EE3-F902-4B7B-AF53-01A85514E6B9}
{6B6D3953-E961-4720-B27E-9466A69BED1A} = {A4800EE3-F902-4B7B-AF53-01A85514E6B9}
{2580B014-E7FE-48D9-BE40-E90604365F0E} = {77CFE74A-32EE-400C-8930-5025E8555256}
{74644A4D-8F61-4314-B6E8-5CE3802CD6C2} = {4981B3A5-4AFD-4191-BF7D-8692D9783D60}
{427F4D7C-8969-4015-AD1A-5EFFE921A184} = {77CFE74A-32EE-400C-8930-5025E8555256}
{E0E1B557-D3CF-4446-B993-E5CE719234FB} = {27381127-6C45-4B4C-8F18-41FF48DFE4B2}
{8191109E-130C-47F3-B84E-82070A6CD269} = {4981B3A5-4AFD-4191-BF7D-8692D9783D60}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
Expand Down
1 change: 1 addition & 0 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@
<PackageVersion Include="Polly.Core" Version="8.3.0" />
<PackageVersion Include="Polly.Extensions" Version="8.3.0" />
<PackageVersion Include="Pomelo.EntityFrameworkCore.MySql" Version="8.0.1" />
<PackageVersion Include="Qdrant.Client" Version="1.8.0" />
<PackageVersion Include="RabbitMQ.Client" Version="6.8.1" />
<PackageVersion Include="StackExchange.Redis" Version="2.7.27" />
<PackageVersion Include="System.IO.Hashing" Version="8.0.0" />
Expand Down
93 changes: 93 additions & 0 deletions playground/Qdrant/Qdrant.ApiService/Program.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
using Qdrant.Client;
using Qdrant.Client.Grpc;

var builder = WebApplication.CreateBuilder(args);

// Add service defaults & Aspire components.
builder.AddServiceDefaults();

// Add services to the container.
builder.Services.AddProblemDetails();

builder.AddQdrantClient("qdrant");

var app = builder.Build();

// Configure the HTTP request pipeline.
app.UseExceptionHandler();

app.MapGet("/create", async (QdrantClient client, ILogger<Program> logger) =>
{
var collections = await client.ListCollectionsAsync();
if (collections.Any(x => x.Contains("movie_collection")))
{
await client.DeleteCollectionAsync("movie_collection");
}
await client.CreateCollectionAsync("movie_collection", new VectorParams { Size = 2, Distance = Distance.Cosine });
var collectionInfo = await client.GetCollectionInfoAsync("movie_collection");
logger.LogInformation(collectionInfo.ToString());
// generate some vectors
var data = new[]
{
new PointStruct
{
Id = 1,
Vectors = new [] {0.10022575f, -0.23998135f},
Payload =
{
["title"] = "The Lion King"
}
},
new PointStruct
{
Id = 2,
Vectors = new [] {0.10327095f, 0.2563685f},
Payload =
{
["title"] = "Inception"
}
},
new PointStruct
{
Id = 3,
Vectors = new [] {0.095857024f, -0.201278f},
Payload =
{
["title"] = "Toy Story"
}
},
new PointStruct
{
Id = 4,
Vectors = new [] {0.106827796f, 0.21676421f},
Payload =
{
["title"] = "Pulp Function"
}
},
new PointStruct
{
Id = 5,
Vectors = new [] {0.09568083f, -0.21177962f},
Payload =
{
["title"] = "Shrek"
}
},
};
var updateResult = await client.UpsertAsync("movie_collection", data);
return updateResult.Status;
});

app.MapGet("/search", async (QdrantClient client) =>
{
var results = await client.SearchAsync("movie_collection", new[] { 0.12217915f, -0.034832448f }, limit: 3);
return results.Select(titles => titles.Payload["title"].StringValue);
});

app.MapDefaultEndpoints();

app.Run();
25 changes: 25 additions & 0 deletions playground/Qdrant/Qdrant.ApiService/Properties/launchSettings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"$schema": "https://json.schemastore.org/launchsettings.json",
"profiles": {
"https": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"launchUrl": "",
"applicationUrl": "https://localhost:5450;http://localhost:5451",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"http": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"launchUrl": "",
"applicationUrl": "http://localhost:5451",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
15 changes: 15 additions & 0 deletions playground/Qdrant/Qdrant.ApiService/Qdrant.ApiService.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk.Web">

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<UserSecretsId>1e49caab-af46-4c24-8011-953ec12b4069</UserSecretsId>
</PropertyGroup>

<ItemGroup>
<ProjectReference Include="..\..\..\src\Components\Aspire.Qdrant.Client\Aspire.Qdrant.Client.csproj" />
<ProjectReference Include="..\..\Playground.ServiceDefaults\Playground.ServiceDefaults.csproj" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}
10 changes: 10 additions & 0 deletions playground/Qdrant/Qdrant.ApiService/appsettings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning",
"Qdrant.Client": "Debug"
}
},
"AllowedHosts": "*"
}
8 changes: 8 additions & 0 deletions playground/Qdrant/Qdrant.AppHost/Directory.Build.props
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<Project>

<Import Project="$([MSBuild]::GetPathOfFileAbove('Directory.Build.props', '$(MSBuildThisFileDirectory)../'))" />

<!-- NOTE: This line is only required because we are using P2P references, not NuGet. It will not exist in real apps. -->
<Import Project="../../../src/Aspire.Hosting.AppHost/build/Aspire.Hosting.AppHost.props" />

</Project>
9 changes: 9 additions & 0 deletions playground/Qdrant/Qdrant.AppHost/Directory.Build.targets
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<Project>

<Import Project="$([MSBuild]::GetPathOfFileAbove('Directory.Build.targets', '$(MSBuildThisFileDirectory)../'))" />

<!-- NOTE: These lines are only required because we are using P2P references, not NuGet. They will not exist in real apps. -->
<Import Project="..\..\..\src\Aspire.Hosting.AppHost\build\Aspire.Hosting.AppHost.targets" />
<Import Project="..\..\..\src\Aspire.Hosting.Sdk\SDK\Sdk.targets" />

</Project>
12 changes: 12 additions & 0 deletions playground/Qdrant/Qdrant.AppHost/Program.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

var builder = DistributedApplication.CreateBuilder(args);

var qdrant = builder.AddQdrant("qdrant")
.WithDataVolume("qdrant_data");

builder.AddProject<Projects.Qdrant_ApiService>("apiservice")
.WithReference(qdrant);

builder.Build().Run();
32 changes: 32 additions & 0 deletions playground/Qdrant/Qdrant.AppHost/Properties/launchSettings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
{
"$schema": "https://json.schemastore.org/launchsettings.json",
"profiles": {
"https": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "https://localhost:15206;http://localhost:15207",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"DOTNET_ENVIRONMENT": "Development",
"DOTNET_DASHBOARD_OTLP_ENDPOINT_URL": "https://localhost:16022",
"DOTNET_RESOURCE_SERVICE_ENDPOINT_URL": "https://localhost:17038",
"DOTNET_ASPIRE_SHOW_DASHBOARD_RESOURCES": "true"
}
},
"http": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "http://localhost:15207",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"DOTNET_ENVIRONMENT": "Development",
"DOTNET_DASHBOARD_OTLP_ENDPOINT_URL": "http://localhost:16022",
"DOTNET_RESOURCE_SERVICE_ENDPOINT_URL": "http://localhost:17039",
"DOTNET_ASPIRE_SHOW_DASHBOARD_RESOURCES": "true",
"ASPIRE_ALLOW_UNSECURED_TRANSPORT": "true"
}
}
}
}
23 changes: 23 additions & 0 deletions playground/Qdrant/Qdrant.AppHost/Qdrant.AppHost.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsAspireHost>true</IsAspireHost>
<UserSecretsId>10c36641-05e0-4bfb-ad9d-a588431430f0</UserSecretsId>
</PropertyGroup>

<ItemGroup>
<Compile Include="$(SharedDir)KnownResourceNames.cs" Link="KnownResourceNames.cs" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\..\..\src\Aspire.Dashboard\Aspire.Dashboard.csproj" />
<ProjectReference Include="..\..\..\src\Aspire.Hosting.AppHost\Aspire.Hosting.AppHost.csproj" IsAspireProjectResource="false" />
<ProjectReference Include="..\..\..\src\Aspire.Hosting.Qdrant\Aspire.Hosting.Qdrant.csproj" IsAspireProjectResource="false" />
<ProjectReference Include="..\Qdrant.ApiService\Qdrant.ApiService.csproj" />
</ItemGroup>

</Project>
8 changes: 8 additions & 0 deletions playground/Qdrant/Qdrant.AppHost/appsettings.Development.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}
9 changes: 9 additions & 0 deletions playground/Qdrant/Qdrant.AppHost/appsettings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning",
"Aspire.Hosting.Dcp": "Warning"
}
}
}
1 change: 1 addition & 0 deletions spelling.dic
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ pgadmin
postgre
postgres
protoc
qdrant
rabbitmq
redis
rediscommander
Expand Down
5 changes: 3 additions & 2 deletions src/Aspire.Hosting.AWS/SDKResourceExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -48,12 +48,13 @@ public static IAWSSDKConfig WithRegion(this IAWSSDKConfig config, RegionEndpoint
}

/// <summary>
/// Add a reference to an AWS SDK configuration a project.
/// Add a reference to an AWS SDK configuration to the resource.
/// </summary>
/// <param name="builder">An <see cref="IResourceBuilder{T}"/> for <see cref="ProjectResource"/></param>
/// <param name="awsSdkConfig">The AWS SDK configuration</param>
/// <returns></returns>
public static IResourceBuilder<ProjectResource> WithReference(this IResourceBuilder<ProjectResource> builder, IAWSSDKConfig awsSdkConfig)
public static IResourceBuilder<TDestination> WithReference<TDestination>(this IResourceBuilder<TDestination> builder, IAWSSDKConfig awsSdkConfig)
where TDestination : IResourceWithEnvironment
{
builder.WithEnvironment(context =>
{
Expand Down
Loading

0 comments on commit e8b703f

Please sign in to comment.