Skip to content

Commit bfb542d

Browse files
authored
Merge pull request #11 from HillPhelmuth/add_newTextSearch
Update project to .NET 9.0 and enhance AI components
2 parents 3419254 + 335073a commit bfb542d

File tree

353 files changed

+6781
-1480
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

353 files changed

+6781
-1480
lines changed

.github/workflows/AdventuresInSemanticKernel.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ env:
77
AZURE_WEBAPP_NAME: AdventuresInSemanticKernel
88
AZURE_WEBAPP_PACKAGE_PATH: BlazorWithSematicKernel\published
99
CONFIGURATION: Release
10-
DOTNET_CORE_VERSION: 8.0.x
10+
DOTNET_CORE_VERSION: 9.0.x
1111
WORKING_DIRECTORY: BlazorWithSematicKernel
1212
jobs:
1313
build:
@@ -25,7 +25,7 @@ jobs:
2525
- name: Publish
2626
run: dotnet publish "${{ env.WORKING_DIRECTORY }}" --configuration ${{ env.CONFIGURATION }} --no-build --output "${{ env.AZURE_WEBAPP_PACKAGE_PATH }}"
2727
- name: Publish Artifacts
28-
uses: actions/upload-artifact@v3
28+
uses: actions/upload-artifact@v4
2929
with:
3030
name: webapp
3131
path: ${{ env.AZURE_WEBAPP_PACKAGE_PATH }}
@@ -34,7 +34,7 @@ jobs:
3434
needs: build
3535
steps:
3636
- name: Download artifact from build job
37-
uses: actions/download-artifact@v3
37+
uses: actions/download-artifact@v4
3838
with:
3939
name: webapp
4040
path: ${{ env.AZURE_WEBAPP_PACKAGE_PATH }}

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -392,3 +392,4 @@ FodyWeavers.xsd
392392
/BlazorWithSematicKernel/Pages/AgentGroupChatPage.razor
393393
/BlazorWithSematicKernel/Pages/AgentGroupChatPage.razor.cs
394394
/BlazorWithSematicKernel/AutoSeqAgents.json
395+
/SkPluginLibrary/SampleTranscript.xml

BlazorAceEditor/BlazorAceEditor.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk.Razor">
22

33
<PropertyGroup>
4-
<TargetFramework>net8.0</TargetFramework>
4+
<TargetFramework>net9.0</TargetFramework>
55
<Nullable>enable</Nullable>
66
<ImplicitUsings>enable</ImplicitUsings>
77
<Platforms>AnyCPU;ARM64</Platforms>
@@ -13,7 +13,7 @@
1313
</ItemGroup>
1414

1515
<ItemGroup>
16-
<PackageReference Include="Microsoft.AspNetCore.Components.Web" Version="8.0.5" />
16+
<PackageReference Include="Microsoft.AspNetCore.Components.Web" Version="9.0.3" />
1717
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
1818
</ItemGroup>
1919

BlazorWithSematicKernel/App.razor

Lines changed: 119 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -2,116 +2,135 @@
22
<!DOCTYPE html>
33
<html lang="en">
44
<head>
5-
<meta charset="utf-8" />
6-
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
7-
<base href="/" />
8-
<link rel="stylesheet" href="css/bootstrap/bootstrap.min.css" />
9-
<link href="css/site.css" rel="stylesheet" />
10-
<link href="BlazorWithSematicKernel.styles.css" rel="stylesheet" />
11-
<link rel="icon" type="image/png" href="appIcon.png" />
12-
<link rel="stylesheet" href="_content/Radzen.Blazor/css/standard.css">
13-
<link rel="stylesheet" href="_content/ChatComponents/css/chat.css" />
14-
<link rel="stylesheet" href="js/lib/prism/themes/prism.min.css">
15-
<link rel="stylesheet" href="js/lib/prism/themes/prism-funky.min.css">
16-
<link rel="stylesheet" href="js/lib/prism/plugins/toolbar/prism-toolbar.min.css" />
17-
<link href="BlazorWithSemanticKernel.styles.css" rel="stylesheet">
18-
<HeadOutlet @rendermode="@InteractiveServer" />
5+
<meta charset="utf-8" />
6+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
7+
<base href="/" />
8+
<link rel="stylesheet" href="css/bootstrap/bootstrap.min.css" />
9+
<link href="css/site.css" rel="stylesheet" />
10+
<link href="BlazorWithSematicKernel.styles.css" rel="stylesheet" />
11+
<link rel="icon" type="image/png" href="appIcon.png" />
12+
<link rel="stylesheet" href="_content/Radzen.Blazor/css/standard.css">
13+
<link rel="stylesheet" href="_content/ChatComponents/css/chat.css" />
14+
<link rel="stylesheet" href="js/lib/prism/themes/prism.min.css">
15+
<link rel="stylesheet" href="js/lib/prism/themes/prism-funky.min.css">
16+
<link rel="stylesheet" href="js/lib/prism/plugins/toolbar/prism-toolbar.min.css" />
17+
<HeadOutlet @rendermode="@InteractiveServer" />
1918
</head>
2019
<body>
21-
<Routes @rendermode="@InteractiveServer"></Routes>
22-
<div id="blazor-error-ui">
23-
An unhandled error has occurred.
24-
<a href="" class="reload">Reload</a>
25-
<a class="dismiss">🗙</a>
26-
</div>
20+
<Routes @rendermode="@InteractiveServer"></Routes>
21+
<div id="blazor-error-ui">
22+
An unhandled error has occurred.
23+
<a href="" class="reload">Reload</a>
24+
<a class="dismiss">🗙</a>
25+
</div>
2726

28-
<script src="_framework/blazor.web.js"></script>
29-
<script src="_content/Radzen.Blazor/Radzen.Blazor.js"></script>
30-
<script src="https://unpkg.com/turndown/dist/turndown.js"></script>
31-
<script src="js/lib/prism/prism.min.js"></script>
32-
<script src="js/lib/prism/plugins/autoloader/prism-autoloader.min.js"></script>
33-
<script src="js/lib/prism/plugins/toolbar/prism-toolbar.min.js"></script>
34-
<script src="js/lib/prism/plugins/show-language/prism-show-language.min.js"></script>
35-
<script src="js/lib\prism\plugins\copy-to-clipboard\prism-copy-to-clipboard.js"></script>
36-
<script src="@("https://unpkg.com/@alenaksu/json-viewer@2.0.0/dist/json-viewer.bundle.js")"></script>
37-
@* <script src="audioStreaming.js"></script> *@
38-
<script>
39-
window.convertHtmlToMarkdown = (id, html) => {
27+
<script src="_framework/blazor.web.js"></script>
28+
<script src="_content/Radzen.Blazor/Radzen.Blazor.js"></script>
29+
<script src="https://unpkg.com/turndown/dist/turndown.js"></script>
30+
<script src="js/lib/prism/prism.min.js"></script>
31+
<script src="js/lib/prism/plugins/autoloader/prism-autoloader.min.js"></script>
32+
<script src="js/lib/prism/plugins/toolbar/prism-toolbar.min.js"></script>
33+
<script src="js/lib/prism/plugins/show-language/prism-show-language.min.js"></script>
34+
<script src="js/lib\prism\plugins\copy-to-clipboard\prism-copy-to-clipboard.js"></script>
35+
<script src="@("https://unpkg.com/@alenaksu/json-viewer@2.0.0/dist/json-viewer.bundle.js")"></script>
36+
@* <script src="audioStreaming.js"></script> *@
37+
<script>
38+
window.convertHtmlToMarkdown = (id, html) => {
4039
41-
const turndownService = new TurndownService();
42-
turndownService.remove("style");
43-
turndownService.remove("script");
44-
const result = turndownService.turndown(html);
45-
console.log(`html item with id: ${id} converted to markdown.`);
46-
return {
47-
Id: id,
48-
Content: result
49-
};
50-
}
51-
</script>
52-
<script>
53-
window.addCopyButtons = (element) => {
54-
if (!element) {
55-
console.log("No element in addCopyButtons");
56-
return;
57-
}
40+
const turndownService = new TurndownService();
41+
turndownService.remove("style");
42+
turndownService.remove("script");
43+
const result = turndownService.turndown(html);
44+
console.log(`html item with id: ${id} converted to markdown.`);
45+
return {
46+
Id: id,
47+
Content: result
48+
};
49+
}
50+
</script>
51+
<script>
52+
window.addCopyButtons = (element) => {
53+
if (!element) {
54+
console.log("No element in addCopyButtons");
55+
return;
56+
}
5857
59-
Prism.highlightAllUnder(element);
60-
}
61-
</script>
62-
<script>
63-
window.downloadFile = async (filename, data) => {
64-
const response = new Response(data);
65-
const blob = await response.blob();
58+
Prism.highlightAllUnder(element);
59+
}
60+
</script>
61+
<script>
62+
window.downloadFile = async (filename, data) => {
63+
const response = new Response(data);
64+
const blob = await response.blob();
6665
67-
const url = window.URL.createObjectURL(blob);
68-
const link = document.createElement('a');
69-
link.href = url;
70-
link.download = filename;
66+
const url = window.URL.createObjectURL(blob);
67+
const link = document.createElement('a');
68+
link.href = url;
69+
link.download = filename;
7170
72-
document.body.appendChild(link);
73-
link.click();
74-
document.body.removeChild(link);
75-
};
76-
</script>
77-
<script>
78-
window.scrollToBottom = function (elementId) {
79-
const element = document.getElementById(elementId);
80-
if (element) {
81-
element.scrollIntoView({ behavior: 'smooth', block: 'end' });
82-
}
83-
}
71+
document.body.appendChild(link);
72+
link.click();
73+
document.body.removeChild(link);
74+
};
75+
</script>
76+
<script>
77+
window.scrollToBottom = function (elementId) {
78+
const element = document.getElementById(elementId);
79+
if (element) {
80+
element.scrollIntoView({ behavior: 'smooth', block: 'end' });
81+
}
82+
}
8483
85-
</script>
86-
<script>
87-
window.addJsonToViewer = (jsonObj) => {
88-
if (!jsonObj) {
89-
console.log("No json object in addJsonToViewer");
90-
return;
91-
}
92-
var element = document.getElementById("json");
93-
if (!element) {
94-
console.log("No element in addJsonToViewer");
95-
return;
96-
}
97-
element.data = jsonObj;
84+
</script>
85+
<script>
86+
window.addJsonToViewer = (jsonObj) => {
87+
if (!jsonObj) {
88+
console.log("No json object in addJsonToViewer");
89+
return;
90+
}
91+
var element = document.getElementById("json");
92+
if (!element) {
93+
console.log("No element in addJsonToViewer");
94+
return;
95+
}
96+
element.data = jsonObj;
9897
99-
}
100-
</script>
101-
<script>
98+
}
99+
</script>
100+
<script>
102101
103102
104-
window.playAudio = (audioUrl, dotNetObj) => {
105-
var audio = document.getElementById('audioPlayer');
106-
audio.src = audioUrl;
107-
console.log("playAudio Invoked from c#");
108-
audio.addEventListener('ended', function chapterEnded() {
109-
audio.removeEventListener('ended', chapterEnded);
110-
dotNetObj.invokeMethodAsync('PlayNextChapter');
111-
console.log("PlayNextChapter invoked from JS");
112-
});
113-
audio.play();
114-
}
115-
</script>
103+
window.playAudio = (audioUrl, dotNetObj) => {
104+
var audio = document.getElementById('audioPlayer');
105+
audio.src = audioUrl;
106+
console.log("playAudio Invoked from c#");
107+
audio.addEventListener('ended', function chapterEnded() {
108+
audio.removeEventListener('ended', chapterEnded);
109+
dotNetObj.invokeMethodAsync('PlayNextChapter');
110+
console.log("PlayNextChapter invoked from JS");
111+
});
112+
audio.play();
113+
}
114+
</script>
115+
<script>
116+
window.maybePreventDefault = (e) => {
117+
118+
console.log(e);
119+
if (["Tab", "Enter", "ArrowUp", "ArrowDown", "Escape"].includes(e.key)) {
120+
e.preventDefault();
121+
console.log("Prevented default for key: " + e);
122+
}
123+
124+
}
125+
126+
</script>
127+
<script>
128+
window.alignScroll = (overlay, ta) => {
129+
ta.addEventListener('scroll', () => {
130+
overlay.scrollTop = ta.scrollTop;
131+
overlay.scrollLeft = ta.scrollLeft;
132+
});
133+
}
134+
</script>
116135
</body>
117136
</html>

BlazorWithSematicKernel/BlazorWithSematicKernel.csproj

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk.Web">
22

33
<PropertyGroup>
4-
<TargetFramework>net8.0</TargetFramework>
4+
<TargetFramework>net9.0</TargetFramework>
55
<Nullable>enable</Nullable>
66
<ImplicitUsings>enable</ImplicitUsings>
77
<UserSecretsId>ad3ef5ee-b319-4099-85a4-568668603689</UserSecretsId>
@@ -42,15 +42,15 @@
4242

4343
<ItemGroup>
4444
<PackageReference Include="Auth0.AspNetCore.Authentication" Version="1.4.1" />
45-
<PackageReference Include="Azure.Storage.Blobs" Version="12.23.0" />
46-
<PackageReference Include="Azure.Storage.Files.Shares" Version="12.21.0" />
47-
<PackageReference Include="Azure.Storage.Queues" Version="12.21.0" />
48-
<PackageReference Include="Blazor-ApexCharts" Version="4.0.1" />
49-
<PackageReference Include="Markdig" Version="0.38.0" />
50-
<PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.22.0" />
51-
<PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="8.0.1" />
52-
<PackageReference Include="Microsoft.Extensions.Logging.ApplicationInsights" Version="2.22.0" />
53-
<PackageReference Include="Radzen.Blazor" Version="5.7.1" />
45+
<PackageReference Include="Azure.Storage.Blobs" Version="12.24.0" />
46+
<PackageReference Include="Azure.Storage.Files.Shares" Version="12.22.0" />
47+
<PackageReference Include="Azure.Storage.Queues" Version="12.22.0" />
48+
<PackageReference Include="Blazor-ApexCharts" Version="5.1.0" />
49+
<PackageReference Include="Markdig" Version="0.40.0" />
50+
<PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.23.0" />
51+
<PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="9.0.3" />
52+
<PackageReference Include="Microsoft.Extensions.Logging.ApplicationInsights" Version="2.23.0" />
53+
<PackageReference Include="Radzen.Blazor" Version="6.3.2" />
5454
<PackageReference Include="System.Linq.Async" Version="6.0.1" />
5555

5656
</ItemGroup>

BlazorWithSematicKernel/Components/AgentComponents/AgentBuilder.razor

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,22 @@
7171
<RadzenText TextStyle="TextStyle.Caption" Text="Add plugins as avaialable Agent tools (optional)"></RadzenText>
7272
</Helper>
7373
</RadzenFormField>
74+
@if (_agentForm.Plugins.Select(x => x.KernelPlugin).SelectMany(x => x).Any())
75+
{
76+
<RadzenFormField Text="Exluded Plugins" Style="width:100%">
77+
<ChildContent>
78+
<RadzenDropDownDataGrid Data="@_agentForm.Plugins.Select(x => x.KernelPlugin).SelectMany(x => x).ToList()" Chips="true" Multiple="true" @bind-Value="_agentForm.ExcludedFunctions" MaxSelectedLabels="10">
79+
<Columns>
80+
<RadzenDropDownDataGridColumn Property="@(nameof(KernelFunction.Name))" Title="Name" Width="30%"></RadzenDropDownDataGridColumn>
81+
<RadzenDropDownDataGridColumn Property="@(nameof(KernelFunction.Description))" Title="Type" Width="70%"></RadzenDropDownDataGridColumn>
82+
</Columns>
83+
</RadzenDropDownDataGrid>
84+
</ChildContent>
85+
<Helper>
86+
<RadzenText TextStyle="TextStyle.Caption" Text="Select plugin-functions to exclude from agent tools (optional)"></RadzenText>
87+
</Helper>
88+
</RadzenFormField>
89+
}
7490
<br />
7591
<RadzenButton Size="ButtonSize.Small" ButtonType="ButtonType.Submit" Text="Generate Agent"></RadzenButton>
7692
</RadzenTemplateForm>
@@ -93,6 +109,26 @@
93109
</RadzenTabsItem>
94110
<RadzenTabsItem Text="Plugins">
95111
<RadzenDataGrid Data="@agent.Plugins" TItem="KernelPlugin" Density="Density.Compact">
112+
<Template Context="plugin">
113+
<RadzenDataGrid Data="@plugin.Select(x => x).ToList()" TItem="KernelFunction" Density="Density.Compact">
114+
<Columns>
115+
<RadzenDataGridColumn TItem="KernelFunction" Property="@nameof(KernelFunction.Name)" Width="25%"></RadzenDataGridColumn>
116+
<RadzenDataGridColumn TItem="KernelFunction" Property="@nameof(KernelFunction.Description)" Width="50%"></RadzenDataGridColumn>
117+
<RadzenDataGridColumn TItem="KernelFunction" Width="25%">
118+
<Template Context="function">
119+
@if (!agent.ExcludedFunctionNames.Contains(function.Name))
120+
{
121+
<RadzenIcon Style="font-size:2rem;font-weight:600" IconStyle=IconStyle.Success Icon="check_circle" MouseEnter="@((e) => TooltipService.Open(e, "Available Tool Call"))"></RadzenIcon>
122+
}
123+
else
124+
{
125+
<RadzenIcon Style="font-size:2rem;font-weight:600" IconStyle=IconStyle.Danger Icon="close" MouseEnter="@((e) => TooltipService.Open(e, "Excluded From Tool Calls"))"></RadzenIcon>
126+
}
127+
</Template>
128+
</RadzenDataGridColumn>
129+
</Columns>
130+
</RadzenDataGrid>
131+
</Template>
96132
<Columns>
97133
<RadzenDataGridColumn TItem="KernelPlugin" Title="Name" Property="Name" Width="30%"></RadzenDataGridColumn>
98134
<RadzenDataGridColumn TItem="KernelPlugin" Title="Description" Property="Description" Width="70%"></RadzenDataGridColumn>

BlazorWithSematicKernel/Components/AgentComponents/AgentBuilder.razor.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ private class AgentForm
8585
public string Description { get; set; } = "";
8686
public string Instructions { get; set; } = "";
8787
public IEnumerable<PluginData> Plugins { get; set; } = [];
88+
public IEnumerable<KernelFunction> ExcludedFunctions { get; set; } = [];
8889
public bool IsPrimary { get; set; }
8990
public string? Model { get; set; } = "Gpt4";
9091
public bool IsUserProxy { get; set; }
@@ -127,6 +128,7 @@ private async void GenerateAgent(AgentForm agentForm)
127128
Instructions = agentForm.Instructions,
128129
Name = agentForm.Name,
129130
Plugins = agentForm.Plugins.Select(x => x.KernelPlugin).ToList(),
131+
ExcludedFunctions = agentForm.ExcludedFunctions.ToList(),
130132
IsPrimary = agentForm.IsPrimary,
131133
IsUserProxy = agentForm.IsUserProxy,
132134
GptModel = agentForm.Model,

0 commit comments

Comments
 (0)