Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .config/dotnet-tools.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@
"isRoot": true,
"tools": {
"csharpier": {
"version": "0.30.6",
"version": "1.1.2",
"commands": [
"dotnet-csharpier"
"csharpier"
],
"rollForward": false
}
}
}
}
2 changes: 1 addition & 1 deletion .github/workflows/azure-webapps-dotnet-core.yml
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ jobs:
- name: linting / csharpier
run: |
dotnet tool restore
dotnet csharpier --check .
dotnet csharpier check .

- name: Build with dotnet
run: dotnet build --configuration Release
Expand Down
18 changes: 14 additions & 4 deletions OpenAIChatGPTBlazor/Components/Pages/EditImage.razor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -67,16 +67,19 @@ private async Task OnFileSelected(InputFileChangeEventArgs e)
// Read and display the uploaded image (read full stream)
using var stream = _uploadedFile.OpenReadStream(maxFileSize);
var buffer = new byte[_uploadedFile.Size];
int totalRead = 0;
var totalRead = 0;
while (totalRead < buffer.Length)
{
int read = await stream.ReadAsync(
var read = await stream.ReadAsync(
buffer,
totalRead,
buffer.Length - totalRead
);
if (read == 0)
{
break;
}

totalRead += read;
}

Expand Down Expand Up @@ -114,7 +117,9 @@ private async Task OnPromptKeydown(KeyboardEventArgs e)
private async Task RunEdit()
{
if (_uploadedFile == null || string.IsNullOrWhiteSpace(_prompt))
{
return;
}

try
{
Expand All @@ -129,17 +134,20 @@ private async Task RunEdit()
const long maxFileSize = 50 * 1024 * 1024; // 50 MB
using var stream = _uploadedFile.OpenReadStream(maxFileSize);
var buffer = new byte[_uploadedFile.Size];
int totalRead = 0;
var totalRead = 0;
while (totalRead < buffer.Length)
{
int read = await stream.ReadAsync(
var read = await stream.ReadAsync(
buffer,
totalRead,
buffer.Length - totalRead,
_editCancellationTokenSource.Token
);
if (read == 0)
{
break;
}

totalRead += read;
}
var imageStream = new System.IO.MemoryStream(buffer);
Expand Down Expand Up @@ -210,7 +218,9 @@ private void AbortEdit()
private async Task DownloadEditedImage()
{
if (_editedImageData == null)
{
return;
}

try
{
Expand Down
48 changes: 19 additions & 29 deletions OpenAIChatGPTBlazor/Components/Pages/Index.razor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ protected override async Task OnAfterRenderAsync(bool firstRender)
await InitiateChat();

_loading = false;
this.StateHasChanged();
StateHasChanged();
await _nextArea.FocusAsync();

// Register paste handler for images
Expand Down Expand Up @@ -99,15 +99,9 @@ async ValueTask IAsyncDisposable.DisposeAsync()
}
}

private async Task OnSearchClick()
{
await RunSearch();
}
private async Task OnSearchClick() => await RunSearch();

private void OnAbortClick()
{
AbortSearch();
}
private void OnAbortClick() => AbortSearch();

private async Task OnNextKeydown(KeyboardEventArgs e)
{
Expand Down Expand Up @@ -151,7 +145,7 @@ private async Task RunSearch()
try
{
_loading = true;
this.StateHasChanged();
StateHasChanged();

if (_file == null)
{
Expand Down Expand Up @@ -198,12 +192,12 @@ private async Task RunSearch()
if (selectedOption.HasStreamingSupport)
{
var updates = client.CompleteChatStreamingAsync(_chatMessages);
await foreach (StreamingChatCompletionUpdate update in updates)
await foreach (var update in updates)
{
foreach (ChatMessageContentPart updatePart in update.ContentUpdate)
foreach (var updatePart in update.ContentUpdate)
{
_stream += updatePart.Text;
this.StateHasChanged();
StateHasChanged();
if (_isAutoscrollEnabled && _module is not null)
{
await _module.InvokeVoidAsync("scrollElementToEnd", _mainArea);
Expand Down Expand Up @@ -249,12 +243,15 @@ Microsoft.AspNetCore.Components.Forms.InputFileChangeEventArgs e
{
var buffer = new byte[file.Size];
using var stream = file.OpenReadStream(maxAllowedSize: 10 * 1024 * 1024);
int totalRead = 0;
var totalRead = 0;
while (totalRead < buffer.Length)
{
int read = await stream.ReadAsync(buffer, totalRead, buffer.Length - totalRead);
var read = await stream.ReadAsync(buffer, totalRead, buffer.Length - totalRead);
if (read == 0)
{
break;
}

totalRead += read;
}
_file = (file.Name, new BinaryData(buffer), file.ContentType);
Expand Down Expand Up @@ -282,10 +279,7 @@ private void AbortSearch()
}
}

private void DeleteMessage(ChatMessage chatMessage)
{
_chatMessages.Remove(chatMessage);
}
private void DeleteMessage(ChatMessage chatMessage) => _chatMessages.Remove(chatMessage);

private async void CopyMessageToNext(ChatMessage chatMessage)
{
Expand All @@ -295,7 +289,7 @@ private async void CopyMessageToNext(ChatMessage chatMessage)

private async Task DownloadConversation()
{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
var sb = new System.Text.StringBuilder();
sb.AppendLine("# ChatGPT Conversation");
foreach (var message in _chatMessages)
{
Expand Down Expand Up @@ -379,21 +373,17 @@ private async Task InitiateChat()
}
}

private static string GetChatMessageContent(ChatMessage message)
{
return message.Content.FirstOrDefault()?.Text ?? "[No Text]";
}
private static string GetChatMessageContent(ChatMessage message) =>
message.Content.FirstOrDefault()?.Text ?? "[No Text]";

private string GetChatMessageRole(ChatMessage message)
{
return message switch
private string GetChatMessageRole(ChatMessage message) =>
message switch
{
SystemChatMessage => ROLE_SYSTEM,
UserChatMessage => ROLE_USER,
AssistantChatMessage => ROLE_ASSISTANT,
_ => "unknown",
};
}

private IList<ChatMessage> JsonToChat(string json)
{
Expand All @@ -414,6 +404,6 @@ private IList<ChatMessage> JsonToChat(string json)
return result;
}

record MyChatMessage(string role, string message);
private record MyChatMessage(string role, string message);
}
}
50 changes: 25 additions & 25 deletions OpenAIChatGPTBlazor/OpenAIChatGPTBlazor.csproj
Original file line number Diff line number Diff line change
@@ -1,26 +1,26 @@
<Project Sdk="Microsoft.NET.Sdk.Web">

<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<UserSecretsId>a9111ff4-d5fb-46b5-9450-c68be5805382</UserSecretsId>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Aspire.Azure.AI.OpenAI" Version="9.4.1-preview.1.25408.4" />
<PackageReference Include="Azure.Identity" Version="1.14.2" />
<PackageReference Include="Blazored.LocalStorage" Version="4.5.0" />
<PackageReference Include="Markdig" Version="0.41.3" />
<PackageReference Include="Microsoft.Azure.AppConfiguration.AspNetCore" Version="8.2.0" />
<PackageReference Include="Microsoft.FeatureManagement.AspNetCore" Version="4.2.1" />
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.21.0" />
<PackageReference Include="Microsoft.Web.LibraryManager.Build" Version="2.1.175" />
<PackageReference Include="CSharpier.MsBuild" Version="0.30.6">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
</ItemGroup>

</Project>
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<UserSecretsId>a9111ff4-d5fb-46b5-9450-c68be5805382</UserSecretsId>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Aspire.Azure.AI.OpenAI" Version="9.4.1-preview.1.25408.4" />
<PackageReference Include="Azure.Identity" Version="1.14.2" />
<PackageReference Include="Blazored.LocalStorage" Version="4.5.0" />
<PackageReference Include="Markdig" Version="0.41.3" />
<PackageReference Include="Microsoft.Azure.AppConfiguration.AspNetCore" Version="8.2.0" />
<PackageReference Include="Microsoft.FeatureManagement.AspNetCore" Version="4.2.1" />
<PackageReference
Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets"
Version="1.21.0"
/>
<PackageReference Include="Microsoft.Web.LibraryManager.Build" Version="2.1.175" />
<PackageReference Include="CSharpier.MsBuild" Version="1.1.2">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
</ItemGroup>
</Project>
11 changes: 3 additions & 8 deletions Tests/UiTests/BasicTest.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using Microsoft.Playwright;
using Microsoft.Playwright;
using Microsoft.Playwright.NUnit;
using NUnit.Framework;

Expand All @@ -12,15 +12,10 @@ public class BasicTest : PageTest
Environment.GetEnvironmentVariable("AppUrl") ?? "https://localhost:7128/";

[SetUp]
public async Task SetUp()
{
await Page.GotoAsync(BaseUrl);
}
public async Task SetUp() => await Page.GotoAsync(BaseUrl);

[Test]
public async Task SystemMessageShouldBePreset()
{
public async Task SystemMessageShouldBePreset() =>
await Expect(Page.GetByText("You are the assistant of a software engineer"))
.ToBeVisibleAsync();
}
}
7 changes: 2 additions & 5 deletions Tests/UiTests/FocusTests.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using Microsoft.Playwright;
using Microsoft.Playwright;
using Microsoft.Playwright.NUnit;
using NUnit.Framework;

Expand All @@ -9,10 +9,7 @@ namespace UiTests;
public class FocusTests : PageTest
{
[SetUp]
public async Task SetUp()
{
await Page.GotoAsync(BasicTest.BaseUrl);
}
public async Task SetUp() => await Page.GotoAsync(BasicTest.BaseUrl);

[Test]
public async Task NextAreaShouldHaveFocusAfterLoading()
Expand Down
10 changes: 3 additions & 7 deletions Tests/UiTests/GenerateImageTests.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using Microsoft.Playwright;
using Microsoft.Playwright;
using Microsoft.Playwright.NUnit;
using NUnit.Framework;

Expand All @@ -9,15 +9,11 @@ namespace UiTests;
public class GenerateImageTests : PageTest
{
[SetUp]
public async Task SetUp()
{
public async Task SetUp() =>
await Page.GotoAsync(Path.Combine(BasicTest.BaseUrl, "GenerateImage"));
}

[Test]
public async Task PageShouldLoadAndShowHeading()
{
public async Task PageShouldLoadAndShowHeading() =>
await Expect(Page.GetByText("Welcome to my Image Generation using OpenAI"))
.ToBeVisibleAsync();
}
}
4 changes: 2 additions & 2 deletions Tests/UiTests/SettingsTests.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using Microsoft.Playwright;
using Microsoft.Playwright;
using Microsoft.Playwright.NUnit;
using NUnit.Framework;

Expand Down Expand Up @@ -40,7 +40,7 @@ await Page.WaitForFunctionAsync(
"() => localStorage.getItem('IsAutoscrollEnabled')"
);
Assert.IsTrue(
Boolean.TryParse(storedString, out var storedAfter),
bool.TryParse(storedString, out var storedAfter),
$"{storedString} expected to be a valid bool"
);
Assert.AreNotEqual(checkedBefore, storedAfter, "expected changed value");
Expand Down
15 changes: 6 additions & 9 deletions Tests/UiTests/UiTests.csproj
Original file line number Diff line number Diff line change
@@ -1,16 +1,13 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>

<IsPackable>false</IsPackable>
<IsTestProject>true</IsTestProject>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
<DockerfileContext>..\..</DockerfileContext>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
<PackageReference Include="Microsoft.Playwright" Version="1.53.0" />
Expand All @@ -19,14 +16,14 @@
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets"
Version="1.21.0" />
<PackageReference
Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets"
Version="1.21.0"
/>
<PackageReference Include="NUnit3TestAdapter" Version="5.0.0" />

<PackageReference Include="CSharpier.MsBuild" Version="0.30.6">
<PackageReference Include="CSharpier.MsBuild" Version="1.1.2">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
</ItemGroup>

</Project>
</Project>