mirror of
https://github.com/microsoft/semantic-kernel.git
synced 2026-10-12 11:19:56 +00:00
### Motivation and Context <!-- Thank you for your contribution to the semantic-kernel repo! Please help reviewers and future users, providing the following information: 1. Why is this change required? 2. What problem does it solve? 3. What scenario does it contribute to? 4. If it fixes an open issue, please link to the issue here. --> Fixes: https://github.com/microsoft/semantic-kernel/issues/4787 Fixes: https://github.com/microsoft/semantic-kernel/issues/6061 Fixes: https://github.com/microsoft/semantic-kernel/issues/6448 Fixes: https://github.com/microsoft/semantic-kernel/issues/6112 Discussion: https://github.com/microsoft/semantic-kernel/discussions/6016#discussioncomment-9459380 There are two reasons why this change is required: 1. Azure .NET SDK supports `chat completion on your data` functionality out-of-the-box, which means that now we don't need custom implementation. 2. `Chat completion on your data` new API has [breaking changes](https://learn.microsoft.com/en-us/azure/ai-services/openai/references/on-your-data), which makes current `WithData` classes non-functional. ### Description <!-- Describe your changes, the overall approach, the underlying design. These notes will help understanding how your code works. Thanks! --> 1. `AzureChatExtensionsOptions` property was added to `OpenAIPromptExecutionSettings`. Initial idea was to add it on `AzureOpenAIChatCompletionService` class level (in all constructors and extension methods), but it looks like this configuration contains some properties which should be useful per request (e.g. index name, search filter etc). Later, we can also add it on service class level, if needed (although I would do that when Options classes for all `AddChatCompletion...` extension methods will be introduced, to avoid more parameters in these methods at the moment). 2. `AzureChatExtensionsOptions` property is marked with `JsonIgnore` attribute, because it's still needs to be investigated if this configuration is serializable. It supports not only Azure AI Search configuration, but also [other configurations](https://learn.microsoft.com/en-us/azure/ai-services/openai/references/on-your-data#data-source) like Azure Cosmos DB for MongoDB, Pinecone etc. We can release it without JSON serialization first, to unblock code-first customers, and we can add support for JSON serialization later (i.e. `config.json` files), if there will be such request. Note: It looks like `OpenAIPromptExecutionSettings` is not ideal place for Azure-specific `AzureChatExtensionsOptions` property. I was thinking to add derived `AzureOpenAIPromptExecutionSettings : OpenAIPromptExecutionSettings` class (and unmark `OpenAIPromptExecutionSettings` as sealed), but this looks like some scope of work which should be implemented when OpenAI and Azure OpenAI functionality will be separated by SDKs. ### Contribution Checklist <!-- Before submitting this PR, please make sure: --> - [x] The code builds clean without any errors or warnings - [x] The PR follows the [SK Contribution Guidelines](https://github.com/microsoft/semantic-kernel/blob/main/CONTRIBUTING.md) and the [pre-submission formatting script](https://github.com/microsoft/semantic-kernel/blob/main/CONTRIBUTING.md#development-scripts) raises no violations - [x] All unit tests pass, and I have added new tests where possible - [x] I didn't break anyone 😄
62 lines
2.2 KiB
PowerShell
62 lines
2.2 KiB
PowerShell
# This script is for local use to analyze code coverage in more detail using HTML report.
|
|
|
|
Param(
|
|
[switch]$ProdPackagesOnly = $false
|
|
)
|
|
|
|
# Generate a timestamp for the current date and time
|
|
$timestamp = Get-Date -Format "yyyyMMdd-HHmmss"
|
|
|
|
# Define paths
|
|
$scriptPath = Get-Item -Path $PSScriptRoot
|
|
$coverageOutputPath = Join-Path $scriptPath "TestResults\Coverage\$timestamp"
|
|
$reportOutputPath = Join-Path $scriptPath "TestResults\Reports\$timestamp"
|
|
|
|
# Create output directories
|
|
New-Item -ItemType Directory -Force -Path $coverageOutputPath
|
|
New-Item -ItemType Directory -Force -Path $reportOutputPath
|
|
|
|
# Find tests for projects ending with 'UnitTests.csproj'
|
|
$testProjects = Get-ChildItem $scriptPath -Filter "*UnitTests.csproj" -Recurse
|
|
|
|
foreach ($project in $testProjects) {
|
|
$testProjectPath = $project.FullName
|
|
Write-Host "Running tests for project: $($testProjectPath)"
|
|
|
|
# Run tests
|
|
dotnet test $testProjectPath `
|
|
--collect:"XPlat Code Coverage" `
|
|
--results-directory:$coverageOutputPath `
|
|
-- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.ExcludeByAttribute=GeneratedCodeAttribute,CompilerGeneratedAttribute,ExcludeFromCodeCoverageAttribute `
|
|
|
|
}
|
|
|
|
# Install required tools
|
|
& dotnet tool install -g coverlet.console
|
|
& dotnet tool install -g dotnet-reportgenerator-globaltool
|
|
|
|
# Generate HTML report
|
|
if ($ProdPackagesOnly) {
|
|
$assemblies = @(
|
|
"+Microsoft.SemanticKernel.Abstractions",
|
|
"+Microsoft.SemanticKernel.Core",
|
|
"+Microsoft.SemanticKernel.PromptTemplates.Handlebars",
|
|
"+Microsoft.SemanticKernel.Connectors.OpenAI",
|
|
"+Microsoft.SemanticKernel.Yaml"
|
|
)
|
|
|
|
$assemblyFilters = $assemblies -join ";"
|
|
|
|
# Generate report for production assemblies only
|
|
& reportgenerator -reports:"$coverageOutputPath/**/coverage.cobertura.xml" -targetdir:$reportOutputPath -reporttypes:Html -assemblyfilters:$assemblyFilters
|
|
}
|
|
else {
|
|
& reportgenerator -reports:"$coverageOutputPath/**/coverage.cobertura.xml" -targetdir:$reportOutputPath -reporttypes:Html
|
|
}
|
|
|
|
Write-Host "Code coverage report generated at: $reportOutputPath"
|
|
|
|
# Open report
|
|
$reportIndexHtml = Join-Path $reportOutputPath "index.html"
|
|
Invoke-Item -Path $reportIndexHtml
|