Skip to content

Commit a7305ee

Browse files
Switch from Console app to HTTP API (#6)
* added web api * added web application * removed console app * updated README
1 parent fe9164e commit a7305ee

File tree

15 files changed

+157
-77
lines changed

15 files changed

+157
-77
lines changed

AI.Playground.slnx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
<Solution>
22
<Folder Name="/0-HelloWorld/">
33
<Project Path="src\0-hello-world\AI.HelloWorld.AppHost\AI.HelloWorld.AppHost.csproj" Type="Classic C#" />
4-
<Project Path="src\0-hello-world\AI.HelloWorld.Console\AI.HelloWorld.Console.csproj" Type="Classic C#" />
4+
<Project Path="src\0-hello-world\AI.HelloWorld.PromptApi\AI.HelloWorld.PromptApi.csproj" Type="Classic C#" />
5+
<File Path="src\0-hello-world\README.md" />
56
</Folder>
67
<Folder Name="/build/">
78
<File Path="Directory.Build.props" />

Directory.Packages.props

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,25 @@
22
<PropertyGroup>
33
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
44
</PropertyGroup>
5-
<ItemGroup>
5+
<ItemGroup Label="Common">
6+
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="9.0.4" />
7+
<PackageVersion Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.11.1" />
8+
<PackageVersion Include="OpenTelemetry.Instrumentation.Http" Version="1.11.1" />
9+
<PackageVersion Include="Swashbuckle.AspNetCore.SwaggerGen" Version="8.1.0" />
10+
<PackageVersion Include="Swashbuckle.AspNetCore.SwaggerUI" Version="8.1.0" />
11+
</ItemGroup>
12+
<ItemGroup Label="Aspire">
613
<PackageVersion Include="Aspire.Hosting.AppHost" Version="9.1.0" />
714
<PackageVersion Include="CommunityToolkit.Aspire.Hosting.Ollama" Version="9.3.1-beta.259" />
815
<PackageVersion Include="CommunityToolkit.Aspire.OllamaSharp" Version="9.3.1-beta.259" />
9-
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="9.0.4" />
16+
</ItemGroup>
17+
<ItemGroup Label="OpenTelemetry">
1018
<PackageVersion Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.11.2" />
1119
<PackageVersion Include="OpenTelemetry.Extensions.Hosting" Version="1.11.2" />
1220
<PackageVersion Include="OpenTelemetry.Instrumentation.Runtime" Version="1.11.1" />
13-
<PackageVersion Include="Spectre.Console" Version="0.50.0" />
14-
<PackageVersion Include="Spectre.Console.Cli" Version="0.50.0" />
21+
</ItemGroup>
22+
<ItemGroup Label="ASP.NET Core">
23+
<PackageVersion Include="Swashbuckle.AspNetCore.Swagger" Version="8.1.0" />
24+
<PackageVersion Include="Microsoft.AspNetCore.OpenApi" Version="9.0.3" />
1525
</ItemGroup>
1626
</Project>

src/0-hello-world/AI.HelloWorld.AppHost/AI.HelloWorld.AppHost.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,6 @@
1616
</ItemGroup>
1717

1818
<ItemGroup>
19-
<ProjectReference Include="..\AI.HelloWorld.Console\AI.HelloWorld.Console.csproj" />
19+
<ProjectReference Include="..\AI.HelloWorld.PromptApi\AI.HelloWorld.PromptApi.csproj" />
2020
</ItemGroup>
2121
</Project>

src/0-hello-world/AI.HelloWorld.AppHost/Program.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
var chat = ollama
1212
.AddModel("chat", "llama3.2:3b"); // 3b parameter model
1313

14-
builder.AddProject<Projects.AI_HelloWorld_Console>("console")
14+
builder.AddProject<Projects.AI_HelloWorld_PromptApi>("prompt-api")
1515
.WithReference(chat)
1616
.WaitFor(chat);
1717

src/0-hello-world/AI.HelloWorld.Console/AI.HelloWorld.Console.csproj

Lines changed: 0 additions & 20 deletions
This file was deleted.

src/0-hello-world/AI.HelloWorld.Console/Program.cs

Lines changed: 0 additions & 43 deletions
This file was deleted.
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<Project Sdk="Microsoft.NET.Sdk.Web">
2+
3+
<PropertyGroup>
4+
<TargetFramework>net9.0</TargetFramework>
5+
<Nullable>enable</Nullable>
6+
<ImplicitUsings>enable</ImplicitUsings>
7+
</PropertyGroup>
8+
9+
<ItemGroup>
10+
<PackageReference Include="CommunityToolkit.Aspire.OllamaSharp" />
11+
<PackageReference Include="Microsoft.AspNetCore.OpenApi"/>
12+
<PackageReference Include="Swashbuckle.AspNetCore.Swagger" />
13+
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerGen" />
14+
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerUI" />
15+
</ItemGroup>
16+
17+
<ItemGroup>
18+
<ProjectReference Include="..\..\shared\Telemetry\Telemetry.csproj" />
19+
</ItemGroup>
20+
21+
</Project>
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
@AI.HelloWorld.PromptApi_HostAddress = http://localhost:5055
2+
3+
POST {{AI.HelloWorld.PromptApi_HostAddress}}/prompt/
4+
Accept: application/json
5+
6+
###
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
using AI.Telemetry;
2+
using Microsoft.Extensions.AI;
3+
using Microsoft.OpenApi.Models;
4+
using Swashbuckle.AspNetCore;
5+
6+
var builder = WebApplication.CreateBuilder(args);
7+
8+
builder.Logging.ConfigureAiLogging();
9+
builder.Services.ConfigureAiTelemetry();
10+
11+
builder.AddOllamaApiClient("chat")
12+
.AddChatClient()
13+
.UseFunctionInvocation()
14+
.UseOpenTelemetry()
15+
.UseLogging();
16+
17+
// Add services to the container.
18+
// Learn more about configuring OpenAPI at https://aka.ms/aspnet/openapi
19+
builder.Services.AddOpenApi();
20+
builder.Services.AddEndpointsApiExplorer();
21+
builder.Services.AddSwaggerGen(c =>
22+
{
23+
c.SwaggerDoc("v1", new OpenApiInfo { Title = "Prompt API", Version = "v1" });
24+
});
25+
26+
var app = builder.Build();
27+
28+
// Configure the HTTP request pipeline.
29+
if (app.Environment.IsDevelopment())
30+
{
31+
app.UseSwagger();
32+
app.UseSwaggerUI();
33+
app.MapOpenApi();
34+
}
35+
36+
app.UseHttpsRedirection();
37+
38+
app.MapPost("/prompt", async (string prompt, IChatClient chatClient, CancellationToken ct) =>
39+
{
40+
var resp = await chatClient.GetResponseAsync(prompt, cancellationToken: ct);
41+
return Results.Ok(resp);
42+
})
43+
.WithName("SendPrompt");
44+
45+
app.Run();
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
{
2+
"$schema": "https://json.schemastore.org/launchsettings.json",
3+
"profiles": {
4+
"http": {
5+
"commandName": "Project",
6+
"dotnetRunMessages": true,
7+
"launchBrowser": false,
8+
"applicationUrl": "http://localhost:5055",
9+
"environmentVariables": {
10+
"ASPNETCORE_ENVIRONMENT": "Development"
11+
}
12+
},
13+
"https": {
14+
"commandName": "Project",
15+
"dotnetRunMessages": true,
16+
"launchBrowser": false,
17+
"applicationUrl": "https://localhost:7216;http://localhost:5055",
18+
"environmentVariables": {
19+
"ASPNETCORE_ENVIRONMENT": "Development"
20+
}
21+
}
22+
}
23+
}

0 commit comments

Comments
 (0)