From 15d2b81476d0a521474302237ed20a7b1bc425f2 Mon Sep 17 00:00:00 2001 From: Prathik Rao Date: Thu, 15 Jan 2026 12:15:46 -0800 Subject: [PATCH] init --- .../sdk_v2/Foundry Local Core SDK Build.yml | 61 + .../Foundry Local Core SDK WinML Build.yml | 63 + .../sdk_v2/templates/sdk-version.yml | 41 + .../sdk_v2/templates/stages-build-cs.yml | 172 ++ .../sdk_v2/templates/stages-build-js.yml | 165 ++ sdk_v2/cs/.editorconfig | 349 +++ sdk_v2/cs/.gitignore | 295 +++ sdk_v2/cs/LICENSE.txt | 21 + sdk_v2/cs/Microsoft.AI.Foundry.Local.SDK.sln | 39 + sdk_v2/cs/NuGet.config | 19 + sdk_v2/cs/README.md | 74 + sdk_v2/cs/src/AssemblyInfo.cs | 10 + sdk_v2/cs/src/Catalog.cs | 200 ++ sdk_v2/cs/src/Configuration.cs | 164 ++ sdk_v2/cs/src/Detail/AsyncLock.cs | 62 + sdk_v2/cs/src/Detail/CoreInterop.cs | 334 +++ sdk_v2/cs/src/Detail/CoreInteropRequest.cs | 22 + sdk_v2/cs/src/Detail/ICoreInterop.cs | 54 + sdk_v2/cs/src/Detail/IModelLoadManager.cs | 19 + .../cs/src/Detail/JsonSerializationContext.cs | 28 + sdk_v2/cs/src/Detail/ModelLoadManager.cs | 177 ++ sdk_v2/cs/src/FoundryLocalException.cs | 35 + sdk_v2/cs/src/FoundryLocalManager.cs | 309 +++ sdk_v2/cs/src/FoundryModelInfo.cs | 122 + sdk_v2/cs/src/GlobalSuppressions.cs | 10 + sdk_v2/cs/src/ICatalog.cs | 53 + sdk_v2/cs/src/IModel.cs | 70 + sdk_v2/cs/src/LogLevel.cs | 17 + .../cs/src/Microsoft.AI.Foundry.Local.csproj | 108 + sdk_v2/cs/src/Model.cs | 126 + sdk_v2/cs/src/ModelVariant.cs | 193 ++ sdk_v2/cs/src/OpenAI/AudioClient.cs | 182 ++ .../AudioTranscriptionRequestResponseTypes.cs | 49 + sdk_v2/cs/src/OpenAI/ChatClient.cs | 185 ++ .../ChatCompletionRequestResponseTypes.cs | 95 + sdk_v2/cs/src/Utils.cs | 53 + sdk_v2/cs/src/msbuild.binlog | Bin 0 -> 601407 bytes .../FoundryLocal.Tests/AudioClientTests.cs | 74 + .../ChatCompletionsTests.cs | 131 ++ sdk_v2/cs/test/FoundryLocal.Tests/EndToEnd.cs | 80 + .../FoundryLocalManagerTest.cs | 103 + .../FoundryLocal.Tests/LOCAL_MODEL_TESTING.md | 20 + .../Microsoft.AI.Foundry.Local.Tests.csproj | 55 + .../cs/test/FoundryLocal.Tests/ModelTests.cs | 54 + .../FoundryLocal.Tests/SkipInCIAttribute.cs | 19 + .../TestAssemblySetupCleanup.cs | 36 + sdk_v2/cs/test/FoundryLocal.Tests/Utils.cs | 451 ++++ .../FoundryLocal.Tests/appsettings.Test.json | 3 + .../FoundryLocal.Tests/testdata/Recording.mp3 | Bin 0 -> 329760 bytes sdk_v2/js/LICENSE.txt | 21 + sdk_v2/js/README.md | 98 + sdk_v2/js/docs/.nojekyll | 1 + sdk_v2/js/docs/assets/hierarchy.js | 1 + sdk_v2/js/docs/assets/highlight.css | 85 + sdk_v2/js/docs/assets/icons.js | 18 + sdk_v2/js/docs/assets/icons.svg | 1 + sdk_v2/js/docs/assets/main.js | 60 + sdk_v2/js/docs/assets/navigation.js | 1 + sdk_v2/js/docs/assets/search.js | 1 + sdk_v2/js/docs/assets/style.css | 1633 +++++++++++++ sdk_v2/js/docs/classes/AudioClient.html | 16 + sdk_v2/js/docs/classes/Catalog.html | 30 + sdk_v2/js/docs/classes/ChatClient.html | 15 + .../js/docs/classes/FoundryLocalManager.html | 28 + sdk_v2/js/docs/classes/Model.html | 48 + sdk_v2/js/docs/classes/ModelLoadManager.html | 16 + sdk_v2/js/docs/classes/ModelVariant.html | 40 + sdk_v2/js/docs/hierarchy.html | 1 + sdk_v2/js/docs/index.html | 38 + .../docs/interfaces/FoundryLocalConfig.html | 33 + sdk_v2/js/docs/interfaces/IModel.html | 12 + sdk_v2/js/docs/interfaces/ModelInfo.html | 22 + sdk_v2/js/docs/modules.html | 1 + sdk_v2/js/examples/chat-completion.ts | 112 + sdk_v2/js/how-to-publish-dev.md | 49 + sdk_v2/js/package-lock.json | 2017 +++++++++++++++++ sdk_v2/js/package.json | 31 + sdk_v2/js/script/install.cjs | 134 ++ sdk_v2/js/src/catalog.ts | 152 ++ sdk_v2/js/src/configuration.ts | 107 + sdk_v2/js/src/detail/coreInterop.ts | 151 ++ sdk_v2/js/src/detail/modelLoadManager.ts | 82 + sdk_v2/js/src/foundryLocalManager.ts | 103 + sdk_v2/js/src/imodel.ts | 18 + sdk_v2/js/src/index.ts | 10 + sdk_v2/js/src/model.ts | 149 ++ sdk_v2/js/src/modelVariant.ts | 126 + sdk_v2/js/src/openai/audioClient.ts | 37 + sdk_v2/js/src/openai/chatClient.ts | 111 + sdk_v2/js/src/types.ts | 53 + sdk_v2/js/test/README.md | 41 + sdk_v2/js/test/catalog.test.ts | 48 + .../js/test/detail/modelLoadManager.test.ts | 124 + sdk_v2/js/test/foundryLocalManager.test.ts | 19 + sdk_v2/js/test/model.test.ts | 172 ++ sdk_v2/js/test/testUtils.ts | 56 + sdk_v2/js/tsconfig.build.json | 9 + sdk_v2/js/tsconfig.json | 15 + 98 files changed, 11148 insertions(+) create mode 100644 .github/workflows/sdk_v2/Foundry Local Core SDK Build.yml create mode 100644 .github/workflows/sdk_v2/Foundry Local Core SDK WinML Build.yml create mode 100644 .github/workflows/sdk_v2/templates/sdk-version.yml create mode 100644 .github/workflows/sdk_v2/templates/stages-build-cs.yml create mode 100644 .github/workflows/sdk_v2/templates/stages-build-js.yml create mode 100644 sdk_v2/cs/.editorconfig create mode 100644 sdk_v2/cs/.gitignore create mode 100644 sdk_v2/cs/LICENSE.txt create mode 100644 sdk_v2/cs/Microsoft.AI.Foundry.Local.SDK.sln create mode 100644 sdk_v2/cs/NuGet.config create mode 100644 sdk_v2/cs/README.md create mode 100644 sdk_v2/cs/src/AssemblyInfo.cs create mode 100644 sdk_v2/cs/src/Catalog.cs create mode 100644 sdk_v2/cs/src/Configuration.cs create mode 100644 sdk_v2/cs/src/Detail/AsyncLock.cs create mode 100644 sdk_v2/cs/src/Detail/CoreInterop.cs create mode 100644 sdk_v2/cs/src/Detail/CoreInteropRequest.cs create mode 100644 sdk_v2/cs/src/Detail/ICoreInterop.cs create mode 100644 sdk_v2/cs/src/Detail/IModelLoadManager.cs create mode 100644 sdk_v2/cs/src/Detail/JsonSerializationContext.cs create mode 100644 sdk_v2/cs/src/Detail/ModelLoadManager.cs create mode 100644 sdk_v2/cs/src/FoundryLocalException.cs create mode 100644 sdk_v2/cs/src/FoundryLocalManager.cs create mode 100644 sdk_v2/cs/src/FoundryModelInfo.cs create mode 100644 sdk_v2/cs/src/GlobalSuppressions.cs create mode 100644 sdk_v2/cs/src/ICatalog.cs create mode 100644 sdk_v2/cs/src/IModel.cs create mode 100644 sdk_v2/cs/src/LogLevel.cs create mode 100644 sdk_v2/cs/src/Microsoft.AI.Foundry.Local.csproj create mode 100644 sdk_v2/cs/src/Model.cs create mode 100644 sdk_v2/cs/src/ModelVariant.cs create mode 100644 sdk_v2/cs/src/OpenAI/AudioClient.cs create mode 100644 sdk_v2/cs/src/OpenAI/AudioTranscriptionRequestResponseTypes.cs create mode 100644 sdk_v2/cs/src/OpenAI/ChatClient.cs create mode 100644 sdk_v2/cs/src/OpenAI/ChatCompletionRequestResponseTypes.cs create mode 100644 sdk_v2/cs/src/Utils.cs create mode 100644 sdk_v2/cs/src/msbuild.binlog create mode 100644 sdk_v2/cs/test/FoundryLocal.Tests/AudioClientTests.cs create mode 100644 sdk_v2/cs/test/FoundryLocal.Tests/ChatCompletionsTests.cs create mode 100644 sdk_v2/cs/test/FoundryLocal.Tests/EndToEnd.cs create mode 100644 sdk_v2/cs/test/FoundryLocal.Tests/FoundryLocalManagerTest.cs create mode 100644 sdk_v2/cs/test/FoundryLocal.Tests/LOCAL_MODEL_TESTING.md create mode 100644 sdk_v2/cs/test/FoundryLocal.Tests/Microsoft.AI.Foundry.Local.Tests.csproj create mode 100644 sdk_v2/cs/test/FoundryLocal.Tests/ModelTests.cs create mode 100644 sdk_v2/cs/test/FoundryLocal.Tests/SkipInCIAttribute.cs create mode 100644 sdk_v2/cs/test/FoundryLocal.Tests/TestAssemblySetupCleanup.cs create mode 100644 sdk_v2/cs/test/FoundryLocal.Tests/Utils.cs create mode 100644 sdk_v2/cs/test/FoundryLocal.Tests/appsettings.Test.json create mode 100644 sdk_v2/cs/test/FoundryLocal.Tests/testdata/Recording.mp3 create mode 100644 sdk_v2/js/LICENSE.txt create mode 100644 sdk_v2/js/README.md create mode 100644 sdk_v2/js/docs/.nojekyll create mode 100644 sdk_v2/js/docs/assets/hierarchy.js create mode 100644 sdk_v2/js/docs/assets/highlight.css create mode 100644 sdk_v2/js/docs/assets/icons.js create mode 100644 sdk_v2/js/docs/assets/icons.svg create mode 100644 sdk_v2/js/docs/assets/main.js create mode 100644 sdk_v2/js/docs/assets/navigation.js create mode 100644 sdk_v2/js/docs/assets/search.js create mode 100644 sdk_v2/js/docs/assets/style.css create mode 100644 sdk_v2/js/docs/classes/AudioClient.html create mode 100644 sdk_v2/js/docs/classes/Catalog.html create mode 100644 sdk_v2/js/docs/classes/ChatClient.html create mode 100644 sdk_v2/js/docs/classes/FoundryLocalManager.html create mode 100644 sdk_v2/js/docs/classes/Model.html create mode 100644 sdk_v2/js/docs/classes/ModelLoadManager.html create mode 100644 sdk_v2/js/docs/classes/ModelVariant.html create mode 100644 sdk_v2/js/docs/hierarchy.html create mode 100644 sdk_v2/js/docs/index.html create mode 100644 sdk_v2/js/docs/interfaces/FoundryLocalConfig.html create mode 100644 sdk_v2/js/docs/interfaces/IModel.html create mode 100644 sdk_v2/js/docs/interfaces/ModelInfo.html create mode 100644 sdk_v2/js/docs/modules.html create mode 100644 sdk_v2/js/examples/chat-completion.ts create mode 100644 sdk_v2/js/how-to-publish-dev.md create mode 100644 sdk_v2/js/package-lock.json create mode 100644 sdk_v2/js/package.json create mode 100644 sdk_v2/js/script/install.cjs create mode 100644 sdk_v2/js/src/catalog.ts create mode 100644 sdk_v2/js/src/configuration.ts create mode 100644 sdk_v2/js/src/detail/coreInterop.ts create mode 100644 sdk_v2/js/src/detail/modelLoadManager.ts create mode 100644 sdk_v2/js/src/foundryLocalManager.ts create mode 100644 sdk_v2/js/src/imodel.ts create mode 100644 sdk_v2/js/src/index.ts create mode 100644 sdk_v2/js/src/model.ts create mode 100644 sdk_v2/js/src/modelVariant.ts create mode 100644 sdk_v2/js/src/openai/audioClient.ts create mode 100644 sdk_v2/js/src/openai/chatClient.ts create mode 100644 sdk_v2/js/src/types.ts create mode 100644 sdk_v2/js/test/README.md create mode 100644 sdk_v2/js/test/catalog.test.ts create mode 100644 sdk_v2/js/test/detail/modelLoadManager.test.ts create mode 100644 sdk_v2/js/test/foundryLocalManager.test.ts create mode 100644 sdk_v2/js/test/model.test.ts create mode 100644 sdk_v2/js/test/testUtils.ts create mode 100644 sdk_v2/js/tsconfig.build.json create mode 100644 sdk_v2/js/tsconfig.json diff --git a/.github/workflows/sdk_v2/Foundry Local Core SDK Build.yml b/.github/workflows/sdk_v2/Foundry Local Core SDK Build.yml new file mode 100644 index 0000000..d73f3d3 --- /dev/null +++ b/.github/workflows/sdk_v2/Foundry Local Core SDK Build.yml @@ -0,0 +1,61 @@ +################################################################################# +# OneBranch Pipelines # +# This pipeline was created by EasyStart from a sample located at: # +# https://aka.ms/obpipelines/easystart/samples # +# Documentation: https://aka.ms/obpipelines # +# Yaml Schema: https://aka.ms/obpipelines/yaml/schema # +# Retail Tasks: https://aka.ms/obpipelines/tasks # +# Support: https://aka.ms/onebranchsup # +################################################################################# + +trigger: none # https://aka.ms/obpipelines/triggers + +parameters: # parameters are shown up in ADO UI in a build queue time +- name: 'debug' + displayName: 'Enable debug output' + type: boolean + default: false +- name: 'isRelease' + displayName: 'Release build' + type: boolean + default: false + +variables: + CDP_DEFINITION_BUILD_COUNT: $[counter('', 0)] # needed for onebranch.pipeline.version task https://aka.ms/obpipelines/versioning + BUILD_ID: $[counter(variables['Build.SourceBranchName'], 0)] # branch-specific counter that resets for each new branch + DEBIAN_FRONTEND: noninteractive + LinuxContainerImage: 'mcr.microsoft.com/onebranch/azurelinux/build:3.0' # https://eng.ms/docs/products/onebranch/infrastructureandimages/containerimages/linuximages/marinerazurelinux/azurelinux + WindowsContainerImage: 'onebranch.azurecr.io/windows/ltsc2022/vse2022:latest' # https://aka.ms/obpipelines/containers + VERSION: '0.9.0.$(BUILD_ID)' + PRERELEASE_IDENTIFIER: 'dev' + +resources: + repositories: + - repository: templates + type: git + name: OneBranch.Pipelines/GovernedTemplates + ref: refs/heads/main + +extends: + template: v2/OneBranch.NonOfficial.CrossPlat.yml@templates # https://aka.ms/obpipelines/templates + parameters: + git: + fetchDepth: 1 + featureFlags: + EnableCDPxPAT: false + WindowsHostVersion: '1ESWindows2022' + globalSdl: + tsa: + enabled: false + stages: + - template: templates/stages-build-cs.yml + parameters: + version: $(VERSION) + isRelease: ${{ parameters.isRelease }} + prereleaseIdentifier: $(PRERELEASE_IDENTIFIER) + + - template: templates/stages-build-js.yml + parameters: + version: $(VERSION) + isRelease: ${{ parameters.isRelease }} + prereleaseIdentifier: $(PRERELEASE_IDENTIFIER) \ No newline at end of file diff --git a/.github/workflows/sdk_v2/Foundry Local Core SDK WinML Build.yml b/.github/workflows/sdk_v2/Foundry Local Core SDK WinML Build.yml new file mode 100644 index 0000000..dbdefed --- /dev/null +++ b/.github/workflows/sdk_v2/Foundry Local Core SDK WinML Build.yml @@ -0,0 +1,63 @@ +################################################################################# +# OneBranch Pipelines # +# This pipeline was created by EasyStart from a sample located at: # +# https://aka.ms/obpipelines/easystart/samples # +# Documentation: https://aka.ms/obpipelines # +# Yaml Schema: https://aka.ms/obpipelines/yaml/schema # +# Retail Tasks: https://aka.ms/obpipelines/tasks # +# Support: https://aka.ms/onebranchsup # +################################################################################# + +trigger: none # https://aka.ms/obpipelines/triggers + +parameters: # parameters are shown up in ADO UI in a build queue time +- name: 'debug' + displayName: 'Enable debug output' + type: boolean + default: false +- name: 'isRelease' + displayName: 'Release build' + type: boolean + default: false + +variables: + CDP_DEFINITION_BUILD_COUNT: $[counter('', 0)] # needed for onebranch.pipeline.version task https://aka.ms/obpipelines/versioning + BUILD_ID: $[counter(variables['Build.SourceBranchName'], 0)] # branch-specific counter that resets for each new branch + DEBIAN_FRONTEND: noninteractive + LinuxContainerImage: 'mcr.microsoft.com/onebranch/azurelinux/build:3.0' # https://eng.ms/docs/products/onebranch/infrastructureandimages/containerimages/linuximages/marinerazurelinux/azurelinux + WindowsContainerImage: 'onebranch.azurecr.io/windows/ltsc2022/vse2022:latest' # https://aka.ms/obpipelines/containers + VERSION: '0.9.0.$(BUILD_ID)' + PRERELEASE_IDENTIFIER: 'dev' + +resources: + repositories: + - repository: templates + type: git + name: OneBranch.Pipelines/GovernedTemplates + ref: refs/heads/main + +extends: + template: v2/OneBranch.NonOfficial.CrossPlat.yml@templates # https://aka.ms/obpipelines/templates + parameters: + git: + fetchDepth: 1 + featureFlags: + EnableCDPxPAT: false + WindowsHostVersion: '1ESWindows2022' + globalSdl: + tsa: + enabled: false + stages: + - template: templates/stages-build-cs.yml + parameters: + version: $(VERSION) + isRelease: ${{ parameters.isRelease }} + prereleaseIdentifier: $(PRERELEASE_IDENTIFIER) + isWinML: true + + - template: templates/stages-build-js.yml + parameters: + version: $(VERSION) + isRelease: ${{ parameters.isRelease }} + prereleaseIdentifier: $(PRERELEASE_IDENTIFIER) + isWinML: true \ No newline at end of file diff --git a/.github/workflows/sdk_v2/templates/sdk-version.yml b/.github/workflows/sdk_v2/templates/sdk-version.yml new file mode 100644 index 0000000..15a2f1b --- /dev/null +++ b/.github/workflows/sdk_v2/templates/sdk-version.yml @@ -0,0 +1,41 @@ +parameters: + - name: version + type: string + - name: isRelease + type: boolean + default: false + - name: prereleaseIdentifier + type: string + default: '' + +steps: + - task: PowerShell@2 + displayName: 'Generate Custom Version' + inputs: + targetType: 'inline' + script: | + $baseVersion = "${{ parameters.version }}" + $isRelease = [System.Convert]::ToBoolean("${{ parameters.isRelease }}") + $prereleaseId = "${{ parameters.prereleaseIdentifier }}".Trim() + + if ($isRelease -and [string]::IsNullOrEmpty($prereleaseId)) { + # Official release: 0.0.1 + $customVersion = $baseVersion + Write-Host "Official release version: $customVersion" + } elseif ($isRelease -and -not [string]::IsNullOrEmpty($prereleaseId)) { + # Prerelease: 0.0.1-beta.timestamp.commit + $timestamp = (Get-Date).ToUniversalTime().ToString("yyyyMMddTHHmmss") + $shortCommitId = "$(Build.SourceVersion)".Substring(0, 8) + $customVersion = "$baseVersion-$prereleaseId.$timestamp.$shortCommitId" + Write-Host "Prerelease version ($prereleaseId): $customVersion" + } else { + # Dev build: 0.0.1-timestamp.commit + $timestamp = (Get-Date).ToUniversalTime().ToString("yyyyMMddTHHmmss") + $shortCommitId = "$(Build.SourceVersion)".Substring(0, 8) + $customVersion = "$baseVersion-$timestamp.$shortCommitId" + Write-Host "Development version: $customVersion" + } + + Write-Host "Generated custom version: $customVersion" + Write-Host "##vso[task.setvariable variable=ProjectVersion]$customVersion" + # vso[task.setvariable...] sets ProjectVersion as a pipeline variable to be used in subsequent tasks \ No newline at end of file diff --git a/.github/workflows/sdk_v2/templates/stages-build-cs.yml b/.github/workflows/sdk_v2/templates/stages-build-cs.yml new file mode 100644 index 0000000..6da2ac9 --- /dev/null +++ b/.github/workflows/sdk_v2/templates/stages-build-cs.yml @@ -0,0 +1,172 @@ +parameters: + - name: version + type: string + - name: isRelease + type: boolean + default: false + - name: prereleaseIdentifier + type: string + default: '' + - name: isWinML + type: boolean + default: false + +stages: + - stage: cs + jobs: + - job: cs + pool: + type: windows + vmImage: 'windows-latest' + variables: + ob_outputDirectory: '$(Build.SourcesDirectory)/out' + buildConfiguration: 'Release' + steps: + - checkout: self + clean: true + + - task: UseDotNet@2 + displayName: 'Use .NET 9 SDK' + inputs: + packageType: 'sdk' + version: '9.0.x' + installationPath: '$(Agent.ToolsDirectory)\dotnet' + + - template: sdk-version.yml + parameters: + version: ${{ parameters.version }} + isRelease: ${{ parameters.isRelease }} + prereleaseIdentifier: ${{ parameters.prereleaseIdentifier }} + + - task: DotNetCoreCLI@2 + displayName: 'Restore dependencies' + inputs: + command: 'restore' + projects: $(Build.SourcesDirectory)\foundry-local-sdk\sdk_v2\cs\src\Microsoft.AI.Foundry.Local.csproj + feedsToUse: 'config' + nugetConfigPath: '$(Build.SourcesDirectory)\foundry-local-sdk\sdk_v2\cs\NuGet.config' + restoreArguments: '/p:UseWinML=${{ parameters.isWinML }}' + # No TargetFramework override: we want to restore for all frameworks in the project (net8.0 is the minimum supported) + + - task: DotNetCoreCLI@2 + displayName: 'Build solution' + inputs: + command: 'build' + projects: $(Build.SourcesDirectory)\foundry-local-sdk\sdk_v2\cs\src\Microsoft.AI.Foundry.Local.csproj + arguments: '--no-restore --configuration $(buildConfiguration) /p:UseWinML=${{ parameters.isWinML }}' + # No TargetFramework override: we want to build for all frameworks in the project (net8.0 is the minimum supported) + + - checkout: git://windows.ai.toolkit/test-data-shared + displayName: 'Checkout test-data-shared for Chat/Audio Client Tests' + lfs: true + persistCredentials: true + + - task: PowerShell@2 + displayName: 'Checkout specific commit in test-data-shared' + inputs: + targetType: 'inline' + workingDirectory: '$(Build.SourcesDirectory)/test-data-shared' + script: | + Write-Host "Current directory: $(Get-Location)" + git checkout 231f820fe285145b7ea4a449b112c1228ce66a41 + if ($LASTEXITCODE -ne 0) { + Write-Error "Git checkout failed." + exit 1 + } + Write-Host "`nDirectory contents:" + Get-ChildItem -Recurse -Depth 2 | ForEach-Object { Write-Host " $($_.FullName)" } + + - task: DotNetCoreCLI@2 + displayName: 'Run Foundry Local Core tests' + inputs: + command: 'test' + projects: $(Build.SourcesDirectory)\foundry-local-sdk\sdk_v2\cs\test\FoundryLocal.Tests\Microsoft.AI.Foundry.Local.Tests.csproj + arguments: '--verbosity normal /p:UseWinML=${{ parameters.isWinML }}' + workingDirectory: '$(Build.SourcesDirectory)' + + # Sign DLLs after building but before packing + - task: PowerShell@2 + displayName: 'Find target framework directory' + inputs: + targetType: 'inline' + script: | + $basePath = "$(Build.SourcesDirectory)\foundry-local-sdk\sdk_v2\cs\src\bin\$(buildConfiguration)" + Write-Host "Searching in base path: $basePath" + Write-Host "Directory contents:" + Get-ChildItem -Path $basePath | ForEach-Object { Write-Host " $($_.Name)" } + + $targetDir = Get-ChildItem -Path $basePath -Directory -Filter "net8.0*" | Select-Object -First 1 + Write-Host "Target framework name: $($targetDir.Name)" + Write-Host "##vso[task.setvariable variable=TargetFramework]$($targetDir.Name)" + + # NOTE: Manual pack using PowerShell with --no-build instead of DotNetCoreCLI@2 task + # + # When UseWinML=true, the project's TargetFramework changes from 'net8.0' to 'net8.0-windows10.0.26100.0' + # causing build outputs to be placed in a different directory (e.g., bin/Release/net8.0-windows10.0.26100.0/). + # + # The DotNetCoreCLI@2 pack task with various parameter combinations failed to locate the signed DLLs + # in the WinML target framework directory. Using 'dotnet pack --no-build' directly with /p:UseWinML + # allows the pack operation to correctly resolve the output path based on the project's UseWinML + # condition evaluation, ensuring it finds the signed binaries in the correct location. + # + # This approach works for both standard (net8.0) and WinML (net8.0-windows10.0.26100.0) builds + # by letting the project naturally evaluate UseWinML and determine the correct target framework path. + - task: PowerShell@2 + displayName: 'Pack NuGet package' + inputs: + targetType: 'inline' + script: | + $projectPath = "$(Build.SourcesDirectory)\foundry-local-sdk\sdk_v2\cs\src\Microsoft.AI.Foundry.Local.csproj" + $outputDir = "$(Build.SourcesDirectory)\foundry-local-sdk\sdk_v2\cs\bin" + $version = "$(ProjectVersion)" + $config = "$(buildConfiguration)" + $useWinML = "${{ parameters.isWinML }}" + + Write-Host "Packing project: $projectPath" + Write-Host "Output directory: $outputDir" + Write-Host "Version: $version" + Write-Host "Configuration: $config" + Write-Host "UseWinML: $useWinML" + + & dotnet pack $projectPath --no-build --configuration $config --output $outputDir /p:PackageVersion=$version /p:UseWinML=$useWinML /p:IncludeSymbols=true /p:SymbolPackageFormat=snupkg --verbosity normal + + if ($LASTEXITCODE -ne 0) { + Write-Error "dotnet pack failed with exit code $LASTEXITCODE" + exit $LASTEXITCODE + } + + Write-Host "Pack completed successfully" + Write-Host "Generated packages:" + Get-ChildItem -Path $outputDir -Filter "*.nupkg" | ForEach-Object { Write-Host " $($_.Name)" } + Get-ChildItem -Path $outputDir -Filter "*.snupkg" | ForEach-Object { Write-Host " $($_.Name)" } + + - task: CopyFiles@2 + displayName: 'Copy signed NuGet package files' + inputs: + SourceFolder: '$(Build.SourcesDirectory)\foundry-local-sdk\sdk_v2\cs\bin' + Contents: | + *.nupkg + *.snupkg + TargetFolder: '$(ob_outputDirectory)' + + # Optional + - task: PowerShell@2 + displayName: 'Verify NuGet package signatures' + inputs: + targetType: 'inline' + script: | + $packages = Get-ChildItem -Path "$(ob_outputDirectory)" -Filter "*.nupkg" + foreach ($package in $packages) { + Write-Host "Verifying signature for: $($package.FullName)" + try { + nuget verify -signature "$($package.FullName)" + if ($LASTEXITCODE -eq 0) { + Write-Host "✓ Signature verified successfully for: $($package.Name)" -ForegroundColor Green + } else { + Write-Warning "⚠ Signature verification returned non-zero exit code for: $($package.Name)" + } + } + catch { + Write-Warning "⚠ Could not verify signature for: $($package.Name) - Error: $_" + } + } \ No newline at end of file diff --git a/.github/workflows/sdk_v2/templates/stages-build-js.yml b/.github/workflows/sdk_v2/templates/stages-build-js.yml new file mode 100644 index 0000000..e050fdd --- /dev/null +++ b/.github/workflows/sdk_v2/templates/stages-build-js.yml @@ -0,0 +1,165 @@ +parameters: + - name: version + type: string + - name: isRelease + type: boolean + default: false + - name: prereleaseIdentifier + type: string + default: '' + - name: isWinML + type: boolean + default: false + +stages: + - stage: js + jobs: + - job: js + pool: + type: windows + vmImage: 'windows-latest' + variables: + ob_outputDirectory: '$(Build.SourcesDirectory)/out' + steps: + - checkout: self + clean: true + + - task: NodeTool@0 + inputs: + versionSpec: '20.x' + displayName: 'Install Node.js' + + - template: sdk-version.yml + parameters: + version: ${{ parameters.version }} + isRelease: ${{ parameters.isRelease }} + prereleaseIdentifier: ${{ parameters.prereleaseIdentifier }} + + - ${{ if eq(parameters.isRelease, true) }}: + - task: PowerShell@2 + displayName: 'Format version for JS' + inputs: + targetType: 'inline' + script: | + # Release: 0.9.0.41 -> 0.9.0-41 + $version = "$(ProjectVersion)" + $versionParts = $version -split '\.' + $baseVersion = ($versionParts[0..2]) -join '.' + $buildNumber = $versionParts[3] + $version = "$baseVersion-$buildNumber" + Write-Host "Modified version for JS: $version" + Write-Host "##vso[task.setvariable variable=ProjectVersion]$version" + + - ${{ if eq(parameters.isRelease, false) }}: + - task: PowerShell@2 + displayName: 'Format version for JS' + inputs: + targetType: 'inline' + script: | + # Dev build: 0.9.0.43-timestamp.commit -> 0.9.0-43.dev.timestamp.commit + $prereleaseId = "${{ parameters.prereleaseIdentifier }}".Trim() + $version = "$(ProjectVersion)" + $parts = $version -split '-', 2 + $versionParts = $parts[0] -split '\.' + $baseVersion = ($versionParts[0..2]) -join '.' + $buildNumber = $versionParts[3] + $prefix = if ([string]::IsNullOrEmpty($prereleaseId)) { "dev" } else { $prereleaseId } + $version = "$baseVersion-$buildNumber.$prefix.$($parts[1])" + Write-Host "Modified version for JS: $version" + Write-Host "##vso[task.setvariable variable=ProjectVersion]$version" + + - checkout: git://windows.ai.toolkit/test-data-shared + displayName: 'Checkout test-data-shared' + lfs: true + persistCredentials: true + + - task: PowerShell@2 + displayName: 'Checkout specific commit in test-data-shared' + inputs: + targetType: 'inline' + workingDirectory: '$(Build.SourcesDirectory)/test-data-shared' + script: | + git checkout 231f820fe285145b7ea4a449b112c1228ce66a41 + if ($LASTEXITCODE -ne 0) { exit 1 } + + - task: NuGetToolInstaller@1 + displayName: 'Install NuGet tool' + + # resolves network proxy issues when accessing registry.npmjs.org + - task: PowerShell@2 + displayName: 'Create .npmrc for Azure Artifacts' + inputs: + targetType: 'inline' + workingDirectory: '$(Build.SourcesDirectory)/foundry-local-sdk/sdk_v2/js' + script: | + # Create .npmrc dynamically to avoid breaking local development + $npmrcContent = @" + registry=https://pkgs.dev.azure.com/microsoft/windows.ai.toolkit/_packaging/Neutron/npm/registry/ + always-auth=true + "@ + Set-Content -Path ".npmrc" -Value $npmrcContent + Write-Host "Created .npmrc file for Azure Artifacts registry" + + - ${{ if eq(parameters.isWinML, true) }}: + - task: Npm@1 + displayName: 'npm install' + inputs: + command: 'custom' + workingDir: '$(Build.SourcesDirectory)/foundry-local-sdk/sdk_v2/js' + customCommand: 'install --winml' + + - ${{ if ne(parameters.isWinML, true) }}: + - task: Npm@1 + displayName: 'npm install' + inputs: + command: 'install' + workingDir: '$(Build.SourcesDirectory)/foundry-local-sdk/sdk_v2/js' + + - task: Npm@1 + displayName: 'npm version' + inputs: + command: 'custom' + workingDir: '$(Build.SourcesDirectory)/foundry-local-sdk/sdk_v2/js' + customCommand: 'version $(ProjectVersion) --no-git-tag-version --allow-same-version' + + - task: Npm@1 + displayName: 'npm test' + inputs: + command: 'custom' + workingDir: '$(Build.SourcesDirectory)/foundry-local-sdk/sdk_v2/js' + customCommand: 'test' + + - task: Npm@1 + displayName: 'npm build' + inputs: + command: 'custom' + workingDir: '$(Build.SourcesDirectory)/foundry-local-sdk/sdk_v2/js' + customCommand: 'run build' + + - task: Npm@1 + displayName: 'npm pack' + inputs: + command: 'custom' + workingDir: '$(Build.SourcesDirectory)/foundry-local-sdk/sdk_v2/js' + customCommand: 'pack' + + - task: PowerShell@2 + displayName: 'Rename WinML artifact' + condition: and(succeeded(), eq('${{ parameters.isWinML }}', true)) + inputs: + targetType: 'inline' + workingDirectory: '$(Build.SourcesDirectory)/foundry-local-sdk/sdk_v2/js' + script: | + $tgz = Get-ChildItem *.tgz | Select-Object -First 1 + if ($tgz) { + $newName = $tgz.Name -replace '^foundry-local-sdk-', 'foundry-local-sdk-winml-' + Rename-Item -Path $tgz.FullName -NewName $newName + Write-Host "Renamed $($tgz.Name) to $newName" + } + + - task: CopyFiles@2 + displayName: 'Copy JS SDK artifacts' + inputs: + SourceFolder: '$(Build.SourcesDirectory)/foundry-local-sdk/sdk_v2/js' + Contents: '*.tgz' + TargetFolder: '$(ob_outputDirectory)/js-sdk' diff --git a/sdk_v2/cs/.editorconfig b/sdk_v2/cs/.editorconfig new file mode 100644 index 0000000..a14a741 --- /dev/null +++ b/sdk_v2/cs/.editorconfig @@ -0,0 +1,349 @@ +# EditorConfig is awesome: https://EditorConfig.org + +# top-most EditorConfig file +root = true + +# Don't use tabs for indentation. +[*] +indent_style = space +# (Please don't specify an indent_size here; that has too many unintended consequences.) + +# Documentation files +[*.md] +indent_size = 4 +trim_trailing_whitespace = true +insert_final_newline = true + +# Code files +[*.{cs,csx,vb,vbx,h,cpp}] +indent_size = 4 +insert_final_newline = true +charset = utf-8-bom +trim_trailing_whitespace = true + +# Adds guidelines for the EditorGuidelines VS extension. See https://github.com/pharring/EditorGuidelines. +guidelines = 80, 120 + +file_header_template = --------------------------------------------------------------------------------------------------------------------\n\n Copyright (c) Microsoft. All rights reserved.\n\n-------------------------------------------------------------------------------------------------------------------- + +# XML project files +[*.{csproj,vbproj,vcxproj,vcxproj.filters,proj,projitems,shproj}] +indent_size = 2 + +# XML config files +[*.{props,targets,ruleset,config,nuspec,resx,vsixmanifest,vsct}] +indent_size = 2 + +# YAML files +[*.{yml,yaml}] +indent_size = 2 +insert_final_newline = true +trim_trailing_whitespace = true + +# JSON files +[*.json] +indent_size = 2 + +# Shell script files +[*.sh] +end_of_line = lf +indent_size = 2 + +# Dotnet code style settings: +[*.{cs,vb}] + +# Sort using and Import directives with System.* appearing first +dotnet_sort_system_directives_first = true +dotnet_separate_import_directive_groups=true +# Avoid "this." and "Me." if not necessary +dotnet_style_qualification_for_field = false:error +dotnet_style_qualification_for_property = false:error +dotnet_style_qualification_for_method = false:error +dotnet_style_qualification_for_event = false:error + +# Use language keywords instead of framework type names for type references +dotnet_style_predefined_type_for_locals_parameters_members = true:error +dotnet_style_predefined_type_for_member_access = true:error + +# Suggest more modern language features when available +dotnet_style_object_initializer = true:error +dotnet_style_collection_initializer = true:error +dotnet_style_coalesce_expression = true:error +dotnet_style_null_propagation = true:error +dotnet_style_explicit_tuple_names = true:error + +# Non-private static fields are PascalCase +dotnet_naming_rule.non_private_static_fields_should_be_pascal_case.severity = error +dotnet_naming_rule.non_private_static_fields_should_be_pascal_case.symbols = non_private_static_fields +dotnet_naming_rule.non_private_static_fields_should_be_pascal_case.style = non_private_static_field_style + +dotnet_naming_symbols.non_private_static_fields.applicable_kinds = field +dotnet_naming_symbols.non_private_static_fields.applicable_accessibilities = public, protected, internal, protected internal, private protected +dotnet_naming_symbols.non_private_static_fields.required_modifiers = static + +dotnet_naming_style.non_private_static_field_style.capitalization = pascal_case + +# Non-private fields are PascalCase +dotnet_naming_rule.non_private_readonly_fields_should_be_pascal_case.severity = error +dotnet_naming_rule.non_private_readonly_fields_should_be_pascal_case.symbols = non_private_readonly_fields +dotnet_naming_rule.non_private_readonly_fields_should_be_pascal_case.style = non_private_readonly_field_style + +dotnet_naming_symbols.non_private_readonly_fields.applicable_kinds = field +dotnet_naming_symbols.non_private_readonly_fields.applicable_accessibilities = public, protected, internal, protected internal, private protected + +dotnet_naming_style.non_private_readonly_field_style.capitalization = pascal_case + +# Constants are PascalCase +dotnet_naming_rule.constants_should_be_pascal_case.severity = error +dotnet_naming_rule.constants_should_be_pascal_case.symbols = constants +dotnet_naming_rule.constants_should_be_pascal_case.style = constant_style + +dotnet_naming_symbols.constants.applicable_kinds = field +dotnet_naming_symbols.constants.required_modifiers = const + +dotnet_naming_style.constant_style.capitalization = pascal_case + +# Static fields are camelCase and start with s_ +dotnet_naming_rule.static_fields_should_be_camel_case.severity = suggestion +dotnet_naming_rule.static_fields_should_be_camel_case.symbols = static_fields +dotnet_naming_rule.static_fields_should_be_camel_case.style = static_field_style + +dotnet_naming_symbols.static_fields.applicable_kinds = field +dotnet_naming_symbols.static_fields.required_modifiers = static + +dotnet_naming_style.static_field_style.capitalization = camel_case +# dotnet_naming_style.static_field_style.required_prefix = s_ + +# Instance fields are camelCase and start with _ +dotnet_naming_rule.instance_fields_should_be_camel_case.severity = error +dotnet_naming_rule.instance_fields_should_be_camel_case.symbols = instance_fields +dotnet_naming_rule.instance_fields_should_be_camel_case.style = instance_field_style + +dotnet_naming_symbols.instance_fields.applicable_kinds = field + +dotnet_naming_style.instance_field_style.capitalization = camel_case +dotnet_naming_style.instance_field_style.required_prefix = _ + +# Locals and parameters are camelCase +dotnet_naming_rule.locals_should_be_camel_case.severity = error +dotnet_naming_rule.locals_should_be_camel_case.symbols = locals_and_parameters +dotnet_naming_rule.locals_should_be_camel_case.style = camel_case_style + +dotnet_naming_symbols.locals_and_parameters.applicable_kinds = parameter, local + +dotnet_naming_style.camel_case_style.capitalization = camel_case + +# Local functions are PascalCase +dotnet_naming_rule.local_functions_should_be_pascal_case.severity = error +dotnet_naming_rule.local_functions_should_be_pascal_case.symbols = local_functions +dotnet_naming_rule.local_functions_should_be_pascal_case.style = local_function_style + +dotnet_naming_symbols.local_functions.applicable_kinds = local_function + +dotnet_naming_style.local_function_style.capitalization = pascal_case + +# By default, name items with PascalCase +dotnet_naming_rule.members_should_be_pascal_case.severity = error +dotnet_naming_rule.members_should_be_pascal_case.symbols = all_members +dotnet_naming_rule.members_should_be_pascal_case.style = pascal_case_style + +dotnet_naming_symbols.all_members.applicable_kinds = * + +dotnet_naming_style.pascal_case_style.capitalization = pascal_case + +# CSharp code style settings: +# IDE0045: Convert to conditional expression +dotnet_diagnostic.IDE0045.severity = suggestion + +[*.cs] +# Indentation preferences +csharp_indent_block_contents = true +csharp_indent_braces = false +csharp_indent_case_contents = true +csharp_indent_case_contents_when_block = true +csharp_indent_switch_labels = true +csharp_indent_labels = flush_left + +# Prefer "var" nowhere +csharp_style_var_for_built_in_types = true:error +csharp_style_var_when_type_is_apparent = true:error +csharp_style_var_elsewhere = false:error +csharp_style_implicit_object_creation_when_type_is_apparent = true:error + +# Prefer method-like constructs to have a block body +csharp_style_expression_bodied_methods = false:none +csharp_style_expression_bodied_constructors = false:none +csharp_style_expression_bodied_operators = false:none + +# Code-block preferences +csharp_style_namespace_declarations = file_scoped:error + +# Unused value expressions +csharp_style_unused_value_expression_statement_preference = discard_variable:warning + +# 'using' directive preferences +csharp_using_directive_placement = inside_namespace:error + +# Prefer property-like constructs to have an expression-body +csharp_style_expression_bodied_properties = true:none +csharp_style_expression_bodied_indexers = true:none +csharp_style_expression_bodied_accessors = true:none + +# Suggest more modern language features when available +csharp_style_pattern_matching_over_is_with_cast_check = true:error +csharp_style_pattern_matching_over_as_with_null_check = true:error +csharp_style_inlined_variable_declaration = true:error +csharp_style_throw_expression = true:error +csharp_style_conditional_delegate_call = true:error + +# Newline settings +csharp_new_line_before_open_brace = all +csharp_new_line_before_else = true +csharp_new_line_before_catch = true +csharp_new_line_before_finally = true +csharp_new_line_before_members_in_object_initializers = true +csharp_new_line_before_members_in_anonymous_types = true +csharp_new_line_between_query_expression_clauses = true + +# Spacing +csharp_space_after_cast = false +csharp_space_after_colon_in_inheritance_clause = true +csharp_space_after_keywords_in_control_flow_statements = true +csharp_space_around_binary_operators = before_and_after +csharp_space_before_colon_in_inheritance_clause = true +csharp_space_between_method_call_empty_parameter_list_parentheses = false +csharp_space_between_method_call_name_and_opening_parenthesis = false +csharp_space_between_method_call_parameter_list_parentheses = false +csharp_space_between_method_declaration_empty_parameter_list_parentheses = false +csharp_space_between_method_declaration_parameter_list_parentheses = false +csharp_space_between_parentheses = false + +# Blocks are allowed +csharp_prefer_braces = true:silent +csharp_preserve_single_line_blocks = true +csharp_preserve_single_line_statements = true + +# Build severity configuration +# Everything above essentially configures IDE behavior and will not reflect in the build. +# https://docs.microsoft.com/dotnet/fundamentals/code-analysis/configuration-options + +# Default severity for all analyzer diagnostics +dotnet_analyzer_diagnostic.severity = warning + +# SA1600: Elements should be documented +dotnet_diagnostic.SA1600.severity = suggestion + +# CS1591: Missing XML comment for publicly visible type or member +dotnet_diagnostic.CS1591.severity = silent + +# CA1303: Do not pass literals as localized parameters +dotnet_diagnostic.CA1303.severity = silent + +# CA2007: Consider calling ConfigureAwait on the awaited task +dotnet_diagnostic.CA2007.severity = silent + +# SA1402: File may only contain a single type +dotnet_diagnostic.SA1402.severity = none + +# SA1101: Prefix local calls with this +dotnet_diagnostic.SA1101.severity = none + +# SA1649: File name should match first type name +dotnet_diagnostic.SA1649.severity = error + +# SA1309: Field names should not begin with underscore +dotnet_diagnostic.SA1309.severity = none + +# CA1062: Validate arguments of public methods +dotnet_diagnostic.CA1062.severity = silent + +# CA1707: Identifiers should not contain underscores +dotnet_diagnostic.CA1707.severity = silent + +# CA1031: Do not catch general exception types +dotnet_diagnostic.CA1031.severity = suggestion + +# CA1822: Mark members as static +dotnet_diagnostic.CA1822.severity = suggestion + +# CA1815: Override equals and operator equals on value types +dotnet_diagnostic.CA1815.severity = suggestion + +# SA1201: Elements should appear in the correct order +dotnet_diagnostic.SA1201.severity = silent + +# SA1602: Enumeration items should be documented +dotnet_diagnostic.SA1602.severity = suggestion + +# SA1118: Parameter should not span multiple lines +dotnet_diagnostic.SA1118.severity = suggestion + +# CA2201: Do not raise reserved exception types +dotnet_diagnostic.CA2201.severity = suggestion + +# CA1050: Declare types in namespaces +dotnet_diagnostic.CA1050.severity = suggestion + +# IDE0005: Remove unnecessary import +dotnet_diagnostic.IDE0005.severity = error + +# IDE1006: Naming Styles +dotnet_diagnostic.IDE1006.severity = error + +# IDE0008: Use explicit type +dotnet_diagnostic.IDE0008.severity = silent + +# IDE0090: Use 'new(...)' +dotnet_diagnostic.IDE0090.severity = error + +# IDE0072: Add missing cases +## Suppressing this particular case due to issues in the analyzer's understanding of pattern matching. +dotnet_diagnostic.IDE0072.severity = suggestion + +# CA2000: Dispose objects before losing scope +dotnet_diagnostic.CA2000.severity = warning + +# IDE0046: Convert to conditional expression +dotnet_diagnostic.IDE0046.severity = silent + +# IDE0050: Convert to tuple +dotnet_diagnostic.IDE0050.severity = suggestion + +# IDE0066: Convert switch statement to expression +dotnet_diagnostic.IDE0066.severity = suggestion + +# IDE0130: Namespace does not match folder structure +dotnet_diagnostic.IDE0130.severity = silent + +# IDE0161: Convert to file-scoped namespace +dotnet_diagnostic.IDE0161.severity = error + +# IDE0058: Expression value is never used +dotnet_diagnostic.IDE0058.severity = none + +# VSTHRD111: Use ConfigureAwait(bool) +dotnet_diagnostic.VSTHRD111.severity = suggestion + +# IDE0042: Deconstruct variable declaration +dotnet_diagnostic.IDE0042.severity = suggestion + +# IDE0039: Use local function +dotnet_diagnostic.IDE0039.severity = suggestion + +# CA1848: Use the LoggerMessage delegates +dotnet_diagnostic.CA1848.severity = suggestion + +# CA2254: Template should be a static expression +dotnet_diagnostic.CA2254.severity = suggestion + +# IDE0290: Use primary constructor +dotnet_diagnostic.IDE0290.severity = suggestion + +# CA1711: Identifiers should not have incorrect suffix +dotnet_diagnostic.CA1711.severity = suggestion + +# IDE0305: Collection initialization can be simplified +dotnet_diagnostic.IDE0305.severity = suggestion + +# Unused value expressions +csharp_style_unused_value_expression_statement_preference = unused_local_variable:none diff --git a/sdk_v2/cs/.gitignore b/sdk_v2/cs/.gitignore new file mode 100644 index 0000000..b3ed4ac --- /dev/null +++ b/sdk_v2/cs/.gitignore @@ -0,0 +1,295 @@ +# Custom +.dotnet/ +artifacts/ +.build/ +.vscode/ + +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ + +# Visual Studio 2015 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ +**/Properties/launchSettings.json + +*_i.c +*_p.c +*_i.h +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# TODO: Comment the next line if you want to checkin your web deploy settings +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/packages/* +# except build/, which is used as an MSBuild target. +!**/packages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/packages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +*.mdf +*.ldf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Typescript v1 declaration files +typings/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# JetBrains Rider +.idea/ +*.sln.iml + +# CodeRush +.cr/ + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Perfview trace +*.etl.zip +*.orig +/src/BenchmarksDriver/results.md +*.trace.zip +/src/BenchmarksDriver/*.zip +eventpipe.netperf +*.netperf +*.bench.json +BenchmarkDotNet.Artifacts/ \ No newline at end of file diff --git a/sdk_v2/cs/LICENSE.txt b/sdk_v2/cs/LICENSE.txt new file mode 100644 index 0000000..48bc6bb --- /dev/null +++ b/sdk_v2/cs/LICENSE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Microsoft Corporation + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/sdk_v2/cs/Microsoft.AI.Foundry.Local.SDK.sln b/sdk_v2/cs/Microsoft.AI.Foundry.Local.SDK.sln new file mode 100644 index 0000000..2958f0d --- /dev/null +++ b/sdk_v2/cs/Microsoft.AI.Foundry.Local.SDK.sln @@ -0,0 +1,39 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31903.59 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AI.Foundry.Local", "src\Microsoft.AI.Foundry.Local.csproj", "{247537D6-CBBA-C748-B91D-AA7B236563B4}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{0C88DD14-F956-CE84-757C-A364CCF449FC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AI.Foundry.Local.Tests", "test\FoundryLocal.Tests\Microsoft.AI.Foundry.Local.Tests.csproj", "{CD75C56B-0EB9-41F4-BEE0-9D7C674894CC}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{02EA681E-C7D8-13C7-8484-4AC65E1B71E8}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {247537D6-CBBA-C748-B91D-AA7B236563B4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {247537D6-CBBA-C748-B91D-AA7B236563B4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {247537D6-CBBA-C748-B91D-AA7B236563B4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {247537D6-CBBA-C748-B91D-AA7B236563B4}.Release|Any CPU.Build.0 = Release|Any CPU + {CD75C56B-0EB9-41F4-BEE0-9D7C674894CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CD75C56B-0EB9-41F4-BEE0-9D7C674894CC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CD75C56B-0EB9-41F4-BEE0-9D7C674894CC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CD75C56B-0EB9-41F4-BEE0-9D7C674894CC}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {247537D6-CBBA-C748-B91D-AA7B236563B4} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} + {CD75C56B-0EB9-41F4-BEE0-9D7C674894CC} = {0C88DD14-F956-CE84-757C-A364CCF449FC} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {0138DEC3-F200-43EC-A1A2-6FD8F2C609CB} + EndGlobalSection +EndGlobal diff --git a/sdk_v2/cs/NuGet.config b/sdk_v2/cs/NuGet.config new file mode 100644 index 0000000..ef684cc --- /dev/null +++ b/sdk_v2/cs/NuGet.config @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/sdk_v2/cs/README.md b/sdk_v2/cs/README.md new file mode 100644 index 0000000..9c15b24 --- /dev/null +++ b/sdk_v2/cs/README.md @@ -0,0 +1,74 @@ +# Foundry Local C# SDK + +## Installation + +To use the Foundry Local C# SDK, you need to install the NuGet package: + +```bash +dotnet add package Microsoft.AI.Foundry.Local +``` + +### Building from source +To build the SDK, run the following command in your terminal: + +```bash +cd sdk/cs +dotnet build +``` + +You can also load [FoundryLocal.sln](./FoundryLocal.sln) in Visual Studio 2022 or VSCode. Update your +`nuget.config` to include the local path to the generated NuGet package: + +```xml + + + + + +``` + +Then, install the package using the following command: + +```bash +dotnet add package FoundryLocal --source foundry-local +``` + +## Usage + +> [!NOTE] +> For this example, you'll need the OpenAI Nuget package installed as well: +> ```bash +> dotnet add package OpenAI +> ``` + +```csharp +using Microsoft.AI.Foundry.Local; +using OpenAI; +using OpenAI.Chat; +using System.ClientModel; +using System.Diagnostics.Metrics; + +var alias = "phi-3.5-mini"; + +var manager = await FoundryLocalManager.StartModelAsync(aliasOrModelId: alias); + +var model = await manager.GetModelInfoAsync(aliasOrModelId: alias); +ApiKeyCredential key = new ApiKeyCredential(manager.ApiKey); +OpenAIClient client = new OpenAIClient(key, new OpenAIClientOptions +{ + Endpoint = manager.Endpoint +}); + +var chatClient = client.GetChatClient(model?.ModelId); + +var completionUpdates = chatClient.CompleteChatStreaming("Why is the sky blue'"); + +Console.Write($"[ASSISTANT]: "); +foreach (var completionUpdate in completionUpdates) +{ + if (completionUpdate.ContentUpdate.Count > 0) + { + Console.Write(completionUpdate.ContentUpdate[0].Text); + } +} +``` diff --git a/sdk_v2/cs/src/AssemblyInfo.cs b/sdk_v2/cs/src/AssemblyInfo.cs new file mode 100644 index 0000000..9bebe71 --- /dev/null +++ b/sdk_v2/cs/src/AssemblyInfo.cs @@ -0,0 +1,10 @@ +// -------------------------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft. All rights reserved. +// +// -------------------------------------------------------------------------------------------------------------------- + +using System.Runtime.CompilerServices; + +[assembly: InternalsVisibleTo("Microsoft.AI.Foundry.Local.Tests")] +[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")] // for Mock of ICoreInterop diff --git a/sdk_v2/cs/src/Catalog.cs b/sdk_v2/cs/src/Catalog.cs new file mode 100644 index 0000000..eb9ba0d --- /dev/null +++ b/sdk_v2/cs/src/Catalog.cs @@ -0,0 +1,200 @@ +// -------------------------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft. All rights reserved. +// +// -------------------------------------------------------------------------------------------------------------------- + +namespace Microsoft.AI.Foundry.Local; +using System; +using System.Collections.Generic; +using System.Text.Json; +using System.Threading.Tasks; + +using Microsoft.AI.Foundry.Local.Detail; +using Microsoft.Extensions.Logging; + +internal sealed class Catalog : ICatalog, IDisposable +{ + private readonly Dictionary _modelAliasToModel = new(); + private readonly Dictionary _modelIdToModelVariant = new(); + private DateTime _lastFetch; + + private readonly IModelLoadManager _modelLoadManager; + private readonly ICoreInterop _coreInterop; + private readonly ILogger _logger; + private readonly AsyncLock _lock = new(); + + public string Name { get; init; } + + private Catalog(IModelLoadManager modelLoadManager, ICoreInterop coreInterop, ILogger logger) + { + _modelLoadManager = modelLoadManager; + _coreInterop = coreInterop; + _logger = logger; + + _lastFetch = DateTime.MinValue; + + CoreInteropRequest? input = null; + var response = coreInterop.ExecuteCommand("get_catalog_name", input); + if (response.Error != null) + { + throw new FoundryLocalException($"Error getting catalog name: {response.Error}", _logger); + } + + Name = response.Data!; + } + + internal static async Task CreateAsync(IModelLoadManager modelManager, ICoreInterop coreInterop, + ILogger logger, CancellationToken? ct = null) + { + var catalog = new Catalog(modelManager, coreInterop, logger); + await catalog.UpdateModels(ct).ConfigureAwait(false); + return catalog; + } + + public async Task> ListModelsAsync(CancellationToken? ct = null) + { + return await Utils.CallWithExceptionHandling(() => ListModelsImplAsync(ct), + "Error listing models.", _logger).ConfigureAwait(false); + } + + public async Task> GetCachedModelsAsync(CancellationToken? ct = null) + { + return await Utils.CallWithExceptionHandling(() => GetCachedModelsImplAsync(ct), + "Error getting cached models.", _logger).ConfigureAwait(false); + } + + public async Task> GetLoadedModelsAsync(CancellationToken? ct = null) + { + return await Utils.CallWithExceptionHandling(() => GetLoadedModelsImplAsync(ct), + "Error getting loaded models.", _logger).ConfigureAwait(false); + } + + public async Task GetModelAsync(string modelAlias, CancellationToken? ct = null) + { + return await Utils.CallWithExceptionHandling(() => GetModelImplAsync(modelAlias, ct), + $"Error getting model with alias '{modelAlias}'.", _logger) + .ConfigureAwait(false); + } + + public async Task GetModelVariantAsync(string modelId, CancellationToken? ct = null) + { + return await Utils.CallWithExceptionHandling(() => GetModelVariantImplAsync(modelId, ct), + $"Error getting model variant with ID '{modelId}'.", _logger) + .ConfigureAwait(false); + } + + private async Task> ListModelsImplAsync(CancellationToken? ct = null) + { + await UpdateModels(ct).ConfigureAwait(false); + + using var disposable = await _lock.LockAsync().ConfigureAwait(false); + return _modelAliasToModel.Values.OrderBy(m => m.Alias).ToList(); + } + + private async Task> GetCachedModelsImplAsync(CancellationToken? ct = null) + { + var cachedModelIds = await Utils.GetCachedModelIdsAsync(_coreInterop, ct).ConfigureAwait(false); + + List cachedModels = new(); + foreach (var modelId in cachedModelIds) + { + if (_modelIdToModelVariant.TryGetValue(modelId, out ModelVariant? modelVariant)) + { + cachedModels.Add(modelVariant); + } + } + + return cachedModels; + } + + private async Task> GetLoadedModelsImplAsync(CancellationToken? ct = null) + { + var loadedModelIds = await _modelLoadManager.ListLoadedModelsAsync(ct).ConfigureAwait(false); + List loadedModels = new(); + + foreach (var modelId in loadedModelIds) + { + if (_modelIdToModelVariant.TryGetValue(modelId, out ModelVariant? modelVariant)) + { + loadedModels.Add(modelVariant); + } + } + + return loadedModels; + } + + private async Task GetModelImplAsync(string modelAlias, CancellationToken? ct = null) + { + await UpdateModels(ct).ConfigureAwait(false); + + using var disposable = await _lock.LockAsync().ConfigureAwait(false); + _modelAliasToModel.TryGetValue(modelAlias, out Model? model); + + return model; + } + + private async Task GetModelVariantImplAsync(string modelId, CancellationToken? ct = null) + { + await UpdateModels(ct).ConfigureAwait(false); + + using var disposable = await _lock.LockAsync().ConfigureAwait(false); + _modelIdToModelVariant.TryGetValue(modelId, out ModelVariant? modelVariant); + return modelVariant; + } + + private async Task UpdateModels(CancellationToken? ct) + { + // TODO: make this configurable + if (DateTime.Now - _lastFetch < TimeSpan.FromHours(6)) + { + return; + } + + CoreInteropRequest? input = null; + var result = await _coreInterop.ExecuteCommandAsync("get_model_list", input, ct).ConfigureAwait(false); + + if (result.Error != null) + { + throw new FoundryLocalException($"Error getting models: {result.Error}", _logger); + } + + var models = JsonSerializer.Deserialize(result.Data!, JsonSerializationContext.Default.ListModelInfo); + if (models == null) + { + _logger.LogDebug($"ListModelInfo deserialization error in UpdateModels. Data: {result.Data}"); + throw new FoundryLocalException($"Failed to deserialize models from response.", _logger); + } + + using var disposable = await _lock.LockAsync().ConfigureAwait(false); + + // TODO: Do we need to clear this out, or can we just add new models? + _modelAliasToModel.Clear(); + _modelIdToModelVariant.Clear(); + + foreach (var modelInfo in models) + { + var variant = new ModelVariant(modelInfo, _modelLoadManager, _coreInterop, _logger); + + var existingModel = _modelAliasToModel.TryGetValue(modelInfo.Alias, out Model? value); + if (!existingModel) + { + value = new Model(variant, _logger); + _modelAliasToModel[modelInfo.Alias] = value; + } + else + { + value!.AddVariant(variant); + } + + _modelIdToModelVariant[variant.Id] = variant; + } + + _lastFetch = DateTime.Now; + } + + public void Dispose() + { + _lock.Dispose(); + } +} diff --git a/sdk_v2/cs/src/Configuration.cs b/sdk_v2/cs/src/Configuration.cs new file mode 100644 index 0000000..5b481bf --- /dev/null +++ b/sdk_v2/cs/src/Configuration.cs @@ -0,0 +1,164 @@ +// -------------------------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft. All rights reserved. +// +// -------------------------------------------------------------------------------------------------------------------- + +namespace Microsoft.AI.Foundry.Local; + +public class Configuration +{ + /// + /// Your application name. MUST be set to a valid name. + /// + public required string AppName { get; set; } + + /// + /// Application data directory. + /// Default: {home}/.{appname}, where {home} is the user's home directory and {appname} is the AppName value. + /// + public string? AppDataDir { get; init; } + + /// + /// Model cache directory. + /// Default: {appdata}/cache/models, where {appdata} is the AppDataDir value. + /// + public string? ModelCacheDir { get; init; } + + /// + /// Log directory. + /// Default: {appdata}/logs + /// + public string? LogsDir { get; init; } + + /// + /// Logging level. + /// Valid values are: Verbose, Debug, Information, Warning, Error, Fatal. + /// Default: LogLevel.Warning + /// + public LogLevel LogLevel { get; init; } = LogLevel.Warning; + + /// + /// Enable manual execution provider download mode. Only meaningful if using WinML. + /// + /// Default: false + /// + /// When false, EPs are downloaded automatically in the background when FoundryLocalManager is created. + /// When true, EPs are downloaded when FoundryLocalManager.EnsureEpsDownloadedAsync or GetCatalogAsync are called. + /// + /// Once an EP is downloaded it will not be re-downloaded unless a new version is available. + /// + // DISABLED: We want to make sure this is required before making it public as supporting this complicates the + // Core implementation. Can be specified via AdditionalSettings if needed for testing. + // public bool ManualEpDownload { get; init; } + + /// + /// Optional configuration for the built-in web service. + /// NOTE: This is not included in all builds. + /// + public WebService? Web { get; init; } + + /// + /// Additional settings that Foundry Local Core can consume. + /// Keys and values are strings. + /// + public IDictionary? AdditionalSettings { get; init; } + + /// + /// Configuration settings if the optional web service is used. + /// + public class WebService + { + /// + /// Url/s to bind to the web service when is called. + /// After startup, will contain the actual URL/s the service is listening on. + /// + /// Default: 127.0.0.1:0, which binds to a random ephemeral port. + /// Multiple URLs can be specified as a semi-colon separated list. + /// + public string? Urls { get; init; } + + /// + /// If the web service is running in a separate process, it will be accessed using this URI. + /// + /// + /// Both processes should be using the same version of the SDK. If a random port is assigned when creating + /// the web service in the external process the actual port must be provided here. + /// + public Uri? ExternalUrl { get; init; } + } + + internal void Validate() + { + if (string.IsNullOrEmpty(AppName)) + { + throw new ArgumentException("Configuration AppName must be set to a valid application name."); + } + + if (AppName.IndexOfAny(Path.GetInvalidFileNameChars()) >= 0) + { + throw new ArgumentException("Configuration AppName value contains invalid characters."); + } + + + if (Web?.ExternalUrl?.Port == 0) + { + throw new ArgumentException("Configuration Web.ExternalUrl has invalid port of 0."); + } + } + + internal Dictionary AsDictionary() + { + if (string.IsNullOrEmpty(AppName)) + { + throw new FoundryLocalException( + "Configuration AppName must be set to a valid application name."); + } + + var configValues = new Dictionary + { + { "AppName", AppName }, + { "LogLevel", LogLevel.ToString() } + }; + + if (!string.IsNullOrEmpty(AppDataDir)) + { + configValues.Add("AppDataDir", AppDataDir); + } + + if (!string.IsNullOrEmpty(ModelCacheDir)) + { + configValues.Add("ModelCacheDir", ModelCacheDir); + } + + if (!string.IsNullOrEmpty(LogsDir)) + { + configValues.Add("LogsDir", LogsDir); + } + + //configValues.Add("ManualEpDownload", ManualEpDownload.ToString()); + + if (Web != null) + { + if (Web.Urls != null) + { + configValues["WebServiceUrls"] = Web.Urls; + } + } + + // Emit any additional settings. + if (AdditionalSettings != null) + { + foreach (var kvp in AdditionalSettings) + { + if (string.IsNullOrEmpty(kvp.Key)) + { + continue; // skip empty keys + } + configValues[kvp.Key] = kvp.Value ?? string.Empty; + } + } + + return configValues; + } +} diff --git a/sdk_v2/cs/src/Detail/AsyncLock.cs b/sdk_v2/cs/src/Detail/AsyncLock.cs new file mode 100644 index 0000000..921d7f9 --- /dev/null +++ b/sdk_v2/cs/src/Detail/AsyncLock.cs @@ -0,0 +1,62 @@ +// -------------------------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft. All rights reserved. +// +// -------------------------------------------------------------------------------------------------------------------- + +namespace Microsoft.AI.Foundry.Local.Detail; +using System; +using System.Threading.Tasks; + +public sealed class AsyncLock : IDisposable +{ + private readonly Task _releaserTask; + private readonly SemaphoreSlim _semaphore = new(1, 1); + private readonly IDisposable _releaser; + + public AsyncLock() + { + _releaser = new Releaser(_semaphore); + _releaserTask = Task.FromResult(_releaser); + } + + public void Dispose() + { + _semaphore.Dispose(); + } + + public IDisposable Lock() + { + _semaphore.Wait(); + return _releaser; + } + + public Task LockAsync() + { + Task waitTask = _semaphore.WaitAsync(); + + return waitTask.IsCompleted + ? _releaserTask + : waitTask.ContinueWith( + (_, releaser) => (IDisposable)releaser!, + _releaser, + CancellationToken.None, + TaskContinuationOptions.ExecuteSynchronously, + TaskScheduler.Default); + } + + private sealed class Releaser : IDisposable + { + private readonly SemaphoreSlim _semaphore; + + public Releaser(SemaphoreSlim semaphore) + { + _semaphore = semaphore; + } + + public void Dispose() + { + _semaphore.Release(); + } + } +} diff --git a/sdk_v2/cs/src/Detail/CoreInterop.cs b/sdk_v2/cs/src/Detail/CoreInterop.cs new file mode 100644 index 0000000..8411473 --- /dev/null +++ b/sdk_v2/cs/src/Detail/CoreInterop.cs @@ -0,0 +1,334 @@ +// -------------------------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft. All rights reserved. +// +// -------------------------------------------------------------------------------------------------------------------- + +namespace Microsoft.AI.Foundry.Local.Detail; + +using System.Diagnostics; +using System.Runtime.InteropServices; + +using Microsoft.Extensions.Logging; + +using static Microsoft.AI.Foundry.Local.Detail.ICoreInterop; + +internal partial class CoreInterop : ICoreInterop +{ + // TODO: Android and iOS may need special handling. See ORT C# NativeMethods.shared.cs + internal const string LibraryName = "Microsoft.AI.Foundry.Local.Core"; + private readonly ILogger _logger; + + private static string AddLibraryExtension(string name) => + RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? $"{name}.dll" : + RuntimeInformation.IsOSPlatform(OSPlatform.Linux) ? $"{name}.so" : + RuntimeInformation.IsOSPlatform(OSPlatform.OSX) ? $"{name}.dylib" : + throw new PlatformNotSupportedException(); + + private static IntPtr genaiLibHandle = IntPtr.Zero; + private static IntPtr ortLibHandle = IntPtr.Zero; + + // we need to manually load ORT and ORT GenAI dlls on Windows to ensure + // a) we're using the libraries we think we are + // b) that dependencies are resolved correctly as the dlls may not be in the default load path. + // it's a 'Try' as we can't do anything else if it fails as the dlls may be available somewhere else. + private static void LoadOrtDllsIfInSameDir(string path) + { + var genaiLibName = AddLibraryExtension("onnxruntime-genai"); + var ortLibName = AddLibraryExtension("onnxruntime"); + var genaiPath = Path.Combine(path, genaiLibName); + var ortPath = Path.Combine(path, ortLibName); + + // need to load ORT first as the winml GenAI library redirects and tries to load a winml onnxruntime.dll, + // which will not have the EPs we expect/require. if/when we don't bundle our own onnxruntime.dll we need to + // revisit this. + var loadedOrt = NativeLibrary.TryLoad(ortPath, out ortLibHandle); + var loadedGenAI = NativeLibrary.TryLoad(genaiPath, out genaiLibHandle); + +#if DEBUG + Console.WriteLine($"Loaded ORT:{loadedOrt} handle={ortLibHandle}"); + Console.WriteLine($"Loaded GenAI: {loadedGenAI} handle={genaiLibHandle}"); +#endif + } + + static CoreInterop() + { + NativeLibrary.SetDllImportResolver(typeof(CoreInterop).Assembly, (libraryName, assembly, searchPath) => + { + if (libraryName == LibraryName) + { +#if DEBUG + Console.WriteLine($"Resolving {libraryName}. BaseDirectory: {AppContext.BaseDirectory}"); +#endif + var isWindows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows); + + // check if this build is platform specific. in that case all files are flattened in the one directory + // and there's no need to look in runtimes/-/native. + // e.g. `dotnet publish -r win-x64` copies all the dependencies into the publish output folder. + var libraryPath = Path.Combine(AppContext.BaseDirectory, AddLibraryExtension(LibraryName)); + if (File.Exists(libraryPath)) + { + if (NativeLibrary.TryLoad(libraryPath, out var handle)) + { +#if DEBUG + Console.WriteLine($"Loaded native library from: {libraryPath}"); +#endif + if (isWindows) + { + LoadOrtDllsIfInSameDir(AppContext.BaseDirectory); + } + + return handle; + } + } + + // TODO: figure out what is required on Android and iOS + // The nuget has an AAR and xcframework respectively so we need to determine what files are where + // after a build. + var os = RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? "win" : + RuntimeInformation.IsOSPlatform(OSPlatform.Linux) ? "linux" : + RuntimeInformation.IsOSPlatform(OSPlatform.OSX) ? "osx" : + throw new PlatformNotSupportedException(); + + var arch = RuntimeInformation.OSArchitecture.ToString().ToLowerInvariant(); + var runtimePath = Path.Combine(AppContext.BaseDirectory, "runtimes", $"{os}-{arch}", "native"); + libraryPath = Path.Combine(runtimePath, AddLibraryExtension(LibraryName)); + +#if DEBUG + Console.WriteLine($"Looking for native library at: {libraryPath}"); +#endif + if (File.Exists(libraryPath)) + { + if (NativeLibrary.TryLoad(libraryPath, out var handle)) + { +#if DEBUG + Console.WriteLine($"Loaded native library from: {libraryPath}"); +#endif + if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + { + LoadOrtDllsIfInSameDir(runtimePath); + } + + return handle; + } + } + } + + return IntPtr.Zero; + }); + } + + internal CoreInterop(Configuration config, ILogger logger) + { + + _logger = logger ?? throw new ArgumentNullException(nameof(logger)); + + var request = new CoreInteropRequest { Params = config.AsDictionary() }; + var response = ExecuteCommand("initialize", request); + + if (response.Error != null) + { + throw new FoundryLocalException($"Error initializing Foundry.Local.Core library: {response.Error}"); + } + else + { + _logger.LogInformation("Foundry.Local.Core initialized successfully: {Response}", response.Data); + } + } + + // For testing. Skips the 'initialize' command so assumes this has been done previously. + internal CoreInterop(ILogger logger) + { + _logger = logger ?? throw new ArgumentNullException(nameof(logger)); + } + + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + private unsafe delegate void ExecuteCommandDelegate(RequestBuffer* req, ResponseBuffer* resp); + + // Import the function from the AOT-compiled library + [LibraryImport(LibraryName, EntryPoint = "execute_command")] + [UnmanagedCallConv(CallConvs = new[] { typeof(System.Runtime.CompilerServices.CallConvCdecl) })] + private static unsafe partial void CoreExecuteCommand(RequestBuffer* request, ResponseBuffer* response); + + [LibraryImport(LibraryName, EntryPoint = "execute_command_with_callback")] + [UnmanagedCallConv(CallConvs = new[] { typeof(System.Runtime.CompilerServices.CallConvCdecl) })] + private static unsafe partial void CoreExecuteCommandWithCallback(RequestBuffer* nativeRequest, + ResponseBuffer* nativeResponse, + nint callbackPtr, // NativeCallbackFn pointer + nint userData); + + // helper to capture exceptions in callbacks + internal class CallbackHelper + { + public CallbackFn Callback { get; } + public Exception? Exception { get; set; } // keep the first only. most likely it will be the same issue in all + public CallbackHelper(CallbackFn callback) + { + Callback = callback ?? throw new ArgumentNullException(nameof(callback)); + } + } + + private static void HandleCallback(nint data, int length, nint callbackHelper) + { + var callbackData = string.Empty; + CallbackHelper? helper = null; + + try + { + if (data != IntPtr.Zero && length > 0) + { + var managedData = new byte[length]; + Marshal.Copy(data, managedData, 0, length); + callbackData = System.Text.Encoding.UTF8.GetString(managedData); + } + + Debug.Assert(callbackHelper != IntPtr.Zero, "Callback helper pointer is required."); + + helper = (CallbackHelper)GCHandle.FromIntPtr(callbackHelper).Target!; + helper.Callback.Invoke(callbackData); + } + catch (Exception ex) when (ex is not OperationCanceledException) + { + FoundryLocalManager.Instance.Logger.LogError(ex, $"Error in callback. Callback data: {callbackData}"); + if (helper != null && helper.Exception == null) + { + helper.Exception = ex; + } + } + } + + private static readonly NativeCallbackFn handleCallbackDelegate = HandleCallback; + + + public Response ExecuteCommandImpl(string commandName, string? commandInput, + CallbackFn? callback = null) + { + try + { + byte[] commandBytes = System.Text.Encoding.UTF8.GetBytes(commandName); + // Allocate unmanaged memory for the command bytes + IntPtr commandPtr = Marshal.AllocHGlobal(commandBytes.Length); + Marshal.Copy(commandBytes, 0, commandPtr, commandBytes.Length); + + byte[]? inputBytes = null; + IntPtr? inputPtr = null; + + if (commandInput != null) + { + inputBytes = System.Text.Encoding.UTF8.GetBytes(commandInput); + inputPtr = Marshal.AllocHGlobal(inputBytes.Length); + Marshal.Copy(inputBytes, 0, inputPtr.Value, inputBytes.Length); + } + + // Prepare request + var request = new RequestBuffer + { + Command = commandPtr, + CommandLength = commandBytes.Length, + Data = inputPtr ?? IntPtr.Zero, + DataLength = inputBytes?.Length ?? 0 + }; + + ResponseBuffer response = default; + + if (callback != null) + { + // NOTE: This assumes the command will NOT return until complete, so the lifetime of the + // objects involved in the callback is limited to the duration of the call to + // CoreExecuteCommandWithCallback. + + var helper = new CallbackHelper(callback); + + var funcPtr = Marshal.GetFunctionPointerForDelegate(handleCallbackDelegate); + var helperHandle = GCHandle.Alloc(helper); + var helperPtr = GCHandle.ToIntPtr(helperHandle); + + unsafe + { + CoreExecuteCommandWithCallback(&request, &response, funcPtr, helperPtr); + } + + helperHandle.Free(); + + if (helper.Exception != null) + { + throw new FoundryLocalException("Exception in callback handler. See InnerException for details", + helper.Exception); + } + } + else + { + // Pin request/response on the stack + unsafe + { + CoreExecuteCommand(&request, &response); + } + } + + Response result = new(); + + // Marshal response. Will have either Data or Error populated. Not both. + if (response.Data != IntPtr.Zero && response.DataLength > 0) + { + byte[] managedResponse = new byte[response.DataLength]; + Marshal.Copy(response.Data, managedResponse, 0, response.DataLength); + result.Data = System.Text.Encoding.UTF8.GetString(managedResponse); + _logger.LogDebug($"Command: {commandName} succeeded."); + } + + if (response.Error != IntPtr.Zero && response.ErrorLength > 0) + { + result.Error = Marshal.PtrToStringUTF8(response.Error, response.ErrorLength)!; + _logger.LogDebug($"Input:{commandInput ?? "null"}"); + _logger.LogDebug($"Command: {commandName} Error: {result.Error}"); + } + + // TODO: Validate this works. C# specific. Attempting to avoid calling free_response to do this + Marshal.FreeHGlobal(response.Data); + Marshal.FreeHGlobal(response.Error); + + Marshal.FreeHGlobal(commandPtr); + if (commandInput != null) + { + Marshal.FreeHGlobal(inputPtr!.Value); + } + + return result; + } + catch (Exception ex) when (ex is not OperationCanceledException) + { + var msg = $"Error executing command '{commandName}' with input {commandInput ?? "null"}"; + throw new FoundryLocalException(msg, ex, _logger); + } + } + + public Response ExecuteCommand(string commandName, CoreInteropRequest? commandInput = null) + { + var commandInputJson = commandInput?.ToJson(); + return ExecuteCommandImpl(commandName, commandInputJson); + } + + public Response ExecuteCommandWithCallback(string commandName, CoreInteropRequest? commandInput, + CallbackFn callback) + { + var commandInputJson = commandInput?.ToJson(); + return ExecuteCommandImpl(commandName, commandInputJson, callback); + } + + public Task ExecuteCommandAsync(string commandName, CoreInteropRequest? commandInput = null, + CancellationToken? cancellationToken = null) + { + var ct = cancellationToken ?? CancellationToken.None; + return Task.Run(() => ExecuteCommand(commandName, commandInput), ct); + } + + public Task ExecuteCommandWithCallbackAsync(string commandName, CoreInteropRequest? commandInput, + CallbackFn callback, + CancellationToken? cancellationToken = null) + { + var ct = cancellationToken ?? CancellationToken.None; + return Task.Run(() => ExecuteCommandWithCallback(commandName, commandInput, callback), ct); + } + +} diff --git a/sdk_v2/cs/src/Detail/CoreInteropRequest.cs b/sdk_v2/cs/src/Detail/CoreInteropRequest.cs new file mode 100644 index 0000000..50365ad --- /dev/null +++ b/sdk_v2/cs/src/Detail/CoreInteropRequest.cs @@ -0,0 +1,22 @@ +// -------------------------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft. All rights reserved. +// +// -------------------------------------------------------------------------------------------------------------------- + +namespace Microsoft.AI.Foundry.Local.Detail; +using System.Collections.Generic; +using System.Text.Json; + +public class CoreInteropRequest +{ + public Dictionary Params { get; set; } = new(); +} + +internal static class RequestExtensions +{ + public static string ToJson(this CoreInteropRequest request) + { + return JsonSerializer.Serialize(request, JsonSerializationContext.Default.CoreInteropRequest); + } +} diff --git a/sdk_v2/cs/src/Detail/ICoreInterop.cs b/sdk_v2/cs/src/Detail/ICoreInterop.cs new file mode 100644 index 0000000..1fff9dd --- /dev/null +++ b/sdk_v2/cs/src/Detail/ICoreInterop.cs @@ -0,0 +1,54 @@ +// -------------------------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft. All rights reserved. +// +// -------------------------------------------------------------------------------------------------------------------- + +namespace Microsoft.AI.Foundry.Local.Detail; + +using System.Runtime.InteropServices; +using System.Threading; +using System.Threading.Tasks; + + +internal interface ICoreInterop +{ + internal record Response + { + internal string? Data; + internal string? Error; + } + + public delegate void CallbackFn(string callbackData); + + [StructLayout(LayoutKind.Sequential)] + protected unsafe struct RequestBuffer + { + public nint Command; + public int CommandLength; + public nint Data; + public int DataLength; + } + + [StructLayout(LayoutKind.Sequential)] + protected unsafe struct ResponseBuffer + { + public nint Data; + public int DataLength; + public nint Error; + public int ErrorLength; + } + + // native callback function signature + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + protected unsafe delegate void NativeCallbackFn(nint data, int length, nint userData); + + Response ExecuteCommand(string commandName, CoreInteropRequest? commandInput = null); + Response ExecuteCommandWithCallback(string commandName, CoreInteropRequest? commandInput, CallbackFn callback); + + Task ExecuteCommandAsync(string commandName, CoreInteropRequest? commandInput = null, + CancellationToken? ct = null); + Task ExecuteCommandWithCallbackAsync(string commandName, CoreInteropRequest? commandInput, + CallbackFn callback, + CancellationToken? ct = null); +} diff --git a/sdk_v2/cs/src/Detail/IModelLoadManager.cs b/sdk_v2/cs/src/Detail/IModelLoadManager.cs new file mode 100644 index 0000000..a96c669 --- /dev/null +++ b/sdk_v2/cs/src/Detail/IModelLoadManager.cs @@ -0,0 +1,19 @@ +// -------------------------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft. All rights reserved. +// +// -------------------------------------------------------------------------------------------------------------------- + +namespace Microsoft.AI.Foundry.Local.Detail; +using System.Threading.Tasks; + +/// +/// Interface for model load management. +/// These operations can be done directly or via the optional web service. +/// +internal interface IModelLoadManager +{ + internal abstract Task LoadAsync(string modelName, CancellationToken? ct = null); + internal abstract Task UnloadAsync(string modelName, CancellationToken? ct = null); + internal abstract Task ListLoadedModelsAsync(CancellationToken? ct = null); +} diff --git a/sdk_v2/cs/src/Detail/JsonSerializationContext.cs b/sdk_v2/cs/src/Detail/JsonSerializationContext.cs new file mode 100644 index 0000000..b903142 --- /dev/null +++ b/sdk_v2/cs/src/Detail/JsonSerializationContext.cs @@ -0,0 +1,28 @@ +// -------------------------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft. All rights reserved. +// +// -------------------------------------------------------------------------------------------------------------------- + +namespace Microsoft.AI.Foundry.Local.Detail; +using System.Collections.Generic; +using System.Text.Json.Serialization; + +using Betalgo.Ranul.OpenAI.ObjectModels.RequestModels; +using Betalgo.Ranul.OpenAI.ObjectModels.ResponseModels; + +using Microsoft.AI.Foundry.Local.OpenAI; + +[JsonSerializable(typeof(ModelInfo))] +[JsonSerializable(typeof(List))] +[JsonSerializable(typeof(CoreInteropRequest))] +[JsonSerializable(typeof(ChatCompletionCreateRequestExtended))] +[JsonSerializable(typeof(ChatCompletionCreateResponse))] +[JsonSerializable(typeof(AudioCreateTranscriptionRequest))] +[JsonSerializable(typeof(AudioCreateTranscriptionResponse))] +[JsonSerializable(typeof(string[]))] // list loaded or cached models +[JsonSourceGenerationOptions(DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, + WriteIndented = false)] +internal partial class JsonSerializationContext : JsonSerializerContext +{ +} diff --git a/sdk_v2/cs/src/Detail/ModelLoadManager.cs b/sdk_v2/cs/src/Detail/ModelLoadManager.cs new file mode 100644 index 0000000..f8bdaca --- /dev/null +++ b/sdk_v2/cs/src/Detail/ModelLoadManager.cs @@ -0,0 +1,177 @@ +// -------------------------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft. All rights reserved. +// +// -------------------------------------------------------------------------------------------------------------------- + +namespace Microsoft.AI.Foundry.Local.Detail; + +using System.Collections.Generic; +using System.Text.Json; +using System.Threading; + +using Microsoft.Extensions.Logging; + +internal sealed class ModelLoadManager : IModelLoadManager, IDisposable +{ + private readonly Uri? _externalServiceUrl; + private readonly HttpClient? _httpClient; + private readonly ICoreInterop _coreInterop; + private readonly ILogger _logger; + + internal ModelLoadManager(Uri? externalServiceUrl, ICoreInterop coreInterop, ILogger logger) + { + _externalServiceUrl = externalServiceUrl; + _coreInterop = coreInterop; + _logger = logger; + + if (_externalServiceUrl != null) + { + // We only have a single instance of ModelLoadManager so we don't need HttpClient to be static. +#pragma warning disable IDISP014 // Use a single instance of HttpClient. + _httpClient = new HttpClient + { + BaseAddress = _externalServiceUrl, + }; +#pragma warning restore IDISP014 // Use a single instance of HttpClient + + // TODO: Wire in Config AppName here + var userAgent = $"foundry-local-cs-sdk/{FoundryLocalManager.AssemblyVersion}"; + _httpClient.DefaultRequestHeaders.UserAgent.ParseAdd(userAgent); + } + } + + public async Task LoadAsync(string modelId, CancellationToken? ct = null) + { + if (_externalServiceUrl != null) + { + await WebLoadModelAsync(modelId, ct).ConfigureAwait(false); + return; + } + + var request = new CoreInteropRequest { Params = new() { { "Model", modelId } } }; + var result = await _coreInterop.ExecuteCommandAsync("load_model", request, ct).ConfigureAwait(false); + if (result.Error != null) + { + throw new FoundryLocalException($"Error loading model {modelId}: {result.Error}"); + } + + // currently just a 'model loaded successfully' message + _logger.LogInformation("Model {ModelId} loaded successfully: {Message}", modelId, result.Data); + } + + public async Task UnloadAsync(string modelId, CancellationToken? ct = null) + { + if (_externalServiceUrl != null) + { + await WebUnloadModelAsync(modelId, ct).ConfigureAwait(false); + return; + } + + var request = new CoreInteropRequest { Params = new() { { "Model", modelId } } }; + var result = await _coreInterop.ExecuteCommandAsync("unload_model", request, ct).ConfigureAwait(false); + if (result.Error != null) + { + throw new FoundryLocalException($"Error unloading model {modelId}: {result.Error}"); + } + + _logger.LogInformation("Model {ModelId} unloaded successfully: {Message}", modelId, result.Data); + } + + public async Task ListLoadedModelsAsync(CancellationToken? ct = null) + { + if (_externalServiceUrl != null) + { + return await WebListLoadedModelAsync(ct).ConfigureAwait(false); + } + + var result = await _coreInterop.ExecuteCommandAsync("list_loaded_models", null, ct).ConfigureAwait(false); + if (result.Error != null) + { + throw new FoundryLocalException($"Error listing loaded models: {result.Error}"); + } + + _logger.LogDebug("Loaded models json: {Data}", result.Data); + + var typeInfo = JsonSerializationContext.Default.StringArray; + var modelList = JsonSerializer.Deserialize(result.Data!, typeInfo); + + return modelList ?? []; + } + + private async Task WebListLoadedModelAsync(CancellationToken? ct = null) + { + using var response = await _httpClient!.GetAsync("models/loaded", ct ?? CancellationToken.None) + .ConfigureAwait(false); + if (!response.IsSuccessStatusCode) + { + throw new FoundryLocalException($"Error listing loaded models from {_externalServiceUrl}: " + + $"{response.ReasonPhrase}"); + } + + var content = await response.Content.ReadAsStringAsync(ct ?? CancellationToken.None).ConfigureAwait(false); + _logger.LogDebug("Loaded models json from {WebService}: {Data}", _externalServiceUrl, content); + var typeInfo = JsonSerializationContext.Default.StringArray; + var modelList = JsonSerializer.Deserialize(content, typeInfo); + return modelList ?? []; + } + + private async Task WebLoadModelAsync(string modelId, CancellationToken? ct = null) + { + var queryParams = new Dictionary + { + // { "timeout", ... } + }; + + // TODO: What do we need around EP override in the latest setup? + // Can we do this in FLC and limit to generic-gpu models only, picking the vendor GPU EP over WebGPU? + // Not sure there's any other valid override. WebGPU will always try and use the discrete GPU, so vendor + // EP will always be better. + //if (!string.IsNullOrEmpty(modelInfo.EpOverride)) + //{ + // queryParams["ep"] = modelInfo.EpOverride!; + //} + + var uriBuilder = new UriBuilder(_externalServiceUrl!) + { + Path = $"models/load/{modelId}", + Query = string.Join("&", queryParams.Select(kvp => + $"{Uri.EscapeDataString(kvp.Key)}={Uri.EscapeDataString(kvp.Value)}")) + }; + + using var response = await _httpClient!.GetAsync(uriBuilder.Uri, ct ?? CancellationToken.None) + .ConfigureAwait(false); + if (!response.IsSuccessStatusCode) + { + throw new FoundryLocalException($"Error loading model {modelId} from {_externalServiceUrl}: " + + $"{response.ReasonPhrase}"); + } + + var content = await response.Content.ReadAsStringAsync(ct ?? CancellationToken.None).ConfigureAwait(false); + _logger.LogInformation("Model {ModelId} loaded successfully from {WebService}: {Message}", + modelId, _externalServiceUrl, content); + } + + private async Task WebUnloadModelAsync(string modelId, CancellationToken? ct = null) + { + using var response = await _httpClient!.GetAsync(new Uri($"models/unload/{modelId}"), + ct ?? CancellationToken.None) + .ConfigureAwait(false); + + // TODO: Do we need to handle a 400 (not found) explicitly or does that not provide any real value? + if (!response.IsSuccessStatusCode) + { + throw new FoundryLocalException($"Error unloading model {modelId} from {_externalServiceUrl}: " + + $"{response.ReasonPhrase}"); + } + + var content = await response.Content.ReadAsStringAsync(ct ?? CancellationToken.None).ConfigureAwait(false); + _logger.LogInformation("Model {ModelId} loaded successfully from {WebService}: {Message}", + modelId, _externalServiceUrl, content); + } + + public void Dispose() + { + _httpClient?.Dispose(); + } +} diff --git a/sdk_v2/cs/src/FoundryLocalException.cs b/sdk_v2/cs/src/FoundryLocalException.cs new file mode 100644 index 0000000..d6e606c --- /dev/null +++ b/sdk_v2/cs/src/FoundryLocalException.cs @@ -0,0 +1,35 @@ +// -------------------------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft. All rights reserved. +// +// -------------------------------------------------------------------------------------------------------------------- + +namespace Microsoft.AI.Foundry.Local; +using System; +using System.Diagnostics; + +using Microsoft.Extensions.Logging; + +public class FoundryLocalException : Exception +{ + public FoundryLocalException(string message) : base(message) + { + } + + public FoundryLocalException(string message, Exception innerException) : base(message, innerException) + { + } + + internal FoundryLocalException(string message, ILogger logger) : base(message) + { + Debug.Assert(logger != null); + logger.LogError(message); + } + + internal FoundryLocalException(string message, Exception innerException, ILogger logger) + : base(message, innerException) + { + Debug.Assert(logger != null); + logger.LogError(innerException, message); + } +} diff --git a/sdk_v2/cs/src/FoundryLocalManager.cs b/sdk_v2/cs/src/FoundryLocalManager.cs new file mode 100644 index 0000000..ce3712c --- /dev/null +++ b/sdk_v2/cs/src/FoundryLocalManager.cs @@ -0,0 +1,309 @@ +// -------------------------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft. All rights reserved. +// +// -------------------------------------------------------------------------------------------------------------------- +namespace Microsoft.AI.Foundry.Local; + +using System; +using System.Text.Json; +using System.Threading.Tasks; + +using Microsoft.AI.Foundry.Local.Detail; +using Microsoft.Extensions.Logging; + +public class FoundryLocalManager : IDisposable +{ + private static FoundryLocalManager? instance; + private static readonly AsyncLock asyncLock = new(); + + internal static readonly string AssemblyVersion = + typeof(FoundryLocalManager).Assembly.GetName().Version?.ToString() ?? "unknown"; + + private readonly Configuration _config; + private CoreInterop _coreInterop = default!; + private Catalog _catalog = default!; + private ModelLoadManager _modelManager = default!; + private readonly AsyncLock _lock = new(); + private bool _disposed; + private readonly ILogger _logger; + + internal Configuration Configuration => _config; + internal ILogger Logger => _logger; + internal ICoreInterop CoreInterop => _coreInterop!; // always valid once the instance is created + + public static bool IsInitialized => instance != null; + public static FoundryLocalManager Instance => instance ?? + throw new FoundryLocalException("FoundryLocalManager has not been created. Call CreateAsync first."); + + /// + /// Bound Urls if the web service has been started. Null otherwise. + /// See . + /// + public string[]? Urls { get; private set; } + + /// + /// Create the singleton instance. + /// + /// Configuration to use. + /// Application logger to use. + /// Use Microsoft.Extensions.Logging.NullLogger.Instance if you wish to ignore log output from the SDK. + /// + /// Optional cancellation token for the initialization. + /// Task creating the instance. + /// + public static async Task CreateAsync(Configuration configuration, ILogger logger, + CancellationToken? ct = null) + { + using var disposable = await asyncLock.LockAsync().ConfigureAwait(false); + + if (instance != null) + { + // throw as we're not going to use the provided configuration in case it differs from the original. + throw new FoundryLocalException("FoundryLocalManager has already been created.", logger); + } + + FoundryLocalManager? manager = null; + try + { + // use a local variable to ensure fully initialized before assigning to static instance. + manager = new FoundryLocalManager(configuration, logger); + await manager.InitializeAsync(ct).ConfigureAwait(false); + + // there is no previous as we only get here if instance is null. + // ownership is transferred to the static instance. +#pragma warning disable IDISP003 // Dispose previous before re-assigning + instance = manager; + manager = null; +#pragma warning restore IDISP003 + } + catch (Exception ex) + { + manager?.Dispose(); + + if (ex is FoundryLocalException or OperationCanceledException) + { + throw; + } + + // log and throw as FoundryLocalException + throw new FoundryLocalException("Error during initialization.", ex, logger); + } + } + + /// + /// Get the model catalog instance. + /// + /// Optional canellation token. + /// The model catalog. + /// + /// The catalog is populated on first use. + /// If you are using a WinML build this will trigger a one-off execution provider download if not already done. + /// It is recommended to call first to separate out the two steps. + /// + public async Task GetCatalogAsync(CancellationToken? ct = null) + { + return await Utils.CallWithExceptionHandling(() => GetCatalogImplAsync(ct), + "Error getting Catalog.", _logger).ConfigureAwait(false); + } + + /// + /// Start the optional web service. This will provide an OpenAI-compatible REST endpoint that supports + /// /v1/chat_completions + /// /v1/models to list downloaded models + /// /v1/models/{model_id} to get model details + /// + /// is populated with the actual bound Urls after startup. + /// + /// Optional cancellation token. + /// Task starting the web service. + public async Task StartWebServiceAsync(CancellationToken? ct = null) + { + await Utils.CallWithExceptionHandling(() => StartWebServiceImplAsync(ct), + "Error starting web service.", _logger).ConfigureAwait(false); + } + + /// + /// Stops the web service if started. + /// + /// Optional cancellation token. + /// Task stopping the web service. + public async Task StopWebServiceAsync(CancellationToken? ct = null) + { + await Utils.CallWithExceptionHandling(() => StopWebServiceImplAsync(ct), + "Error stopping web service.", _logger).ConfigureAwait(false); + } + + /// + /// Ensure execution providers are downloaded and registered. + /// Only relevant when using WinML. + /// + /// Execution provider download can be time consuming due to the size of the packages. + /// Once downloaded, EPs are not re-downloaded unless a new version is available, so this method will be fast + /// on subsequent calls. + /// + /// Optional cancellation token. + public async Task EnsureEpsDownloadedAsync(CancellationToken? ct = null) + { + await Utils.CallWithExceptionHandling(() => EnsureEpsDownloadedImplAsync(ct), + "Error ensuring execution providers downloaded.", _logger) + .ConfigureAwait(false); + } + + private FoundryLocalManager(Configuration configuration, ILogger logger) + { + _config = configuration ?? throw new ArgumentNullException(nameof(configuration)); + _logger = logger; + } + + private async Task InitializeAsync(CancellationToken? ct = null) + { + _config.Validate(); + _coreInterop = new CoreInterop(_config, _logger); + +#pragma warning disable IDISP003 // Dispose previous before re-assigning. Always null when this is called. + _modelManager = new ModelLoadManager(_config.Web?.ExternalUrl, _coreInterop, _logger); +#pragma warning restore IDISP003 + + if (_config.ModelCacheDir != null) + { + CoreInteropRequest? input = null; + var result = await _coreInterop!.ExecuteCommandAsync("get_cache_directory", input, ct) + .ConfigureAwait(false); + if (result.Error != null) + { + throw new FoundryLocalException($"Error getting current model cache directory: {result.Error}", + _logger); + } + + var curCacheDir = result.Data!; + if (curCacheDir != _config.ModelCacheDir) + { + var request = new CoreInteropRequest + { + Params = new Dictionary { { "Directory", _config.ModelCacheDir } } + }; + + result = await _coreInterop!.ExecuteCommandAsync("set_cache_directory", request, ct) + .ConfigureAwait(false); + if (result.Error != null) + { + throw new FoundryLocalException( + $"Error setting model cache directory to '{_config.ModelCacheDir}': {result.Error}", _logger); + } + } + } + + return; + } + + private async Task GetCatalogImplAsync(CancellationToken? ct = null) + { + // create on first use + if (_catalog == null) + { + using var disposable = await _lock.LockAsync().ConfigureAwait(false); + if (_catalog == null) + { + _catalog = await Catalog.CreateAsync(_modelManager!, _coreInterop!, _logger, ct).ConfigureAwait(false); + } + } + + return _catalog; + } + + private async Task StartWebServiceImplAsync(CancellationToken? ct = null) + { + if (_config?.Web?.Urls == null) + { + throw new FoundryLocalException("Web service configuration was not provided.", _logger); + } + + using var disposable = await asyncLock.LockAsync().ConfigureAwait(false); + + CoreInteropRequest? input = null; + var result = await _coreInterop!.ExecuteCommandAsync("start_service", input, ct).ConfigureAwait(false); + if (result.Error != null) + { + throw new FoundryLocalException($"Error starting web service: {result.Error}", _logger); + } + + var typeInfo = JsonSerializationContext.Default.StringArray; + var boundUrls = JsonSerializer.Deserialize(result.Data!, typeInfo); + if (boundUrls == null || boundUrls.Length == 0) + { + throw new FoundryLocalException("Failed to get bound URLs from web service start response.", _logger); + } + + Urls = boundUrls; + } + + private async Task StopWebServiceImplAsync(CancellationToken? ct = null) + { + if (_config?.Web?.Urls == null) + { + throw new FoundryLocalException("Web service configuration was not provided.", _logger); + } + + using var disposable = await asyncLock.LockAsync().ConfigureAwait(false); + + CoreInteropRequest? input = null; + var result = await _coreInterop!.ExecuteCommandAsync("stop_service", input, ct).ConfigureAwait(false); + if (result.Error != null) + { + throw new FoundryLocalException($"Error stopping web service: {result.Error}", _logger); + } + + // Should we clear these even if there's an error response? + // Service is probably in a bad state or was not running. + Urls = null; + } + + private async Task EnsureEpsDownloadedImplAsync(CancellationToken? ct = null) + { + + using var disposable = await asyncLock.LockAsync().ConfigureAwait(false); + + CoreInteropRequest? input = null; + var result = await _coreInterop!.ExecuteCommandAsync("ensure_eps_downloaded", input, ct); + if (result.Error != null) + { + throw new FoundryLocalException($"Error ensuring execution providers downloaded: {result.Error}", _logger); + } + } + + protected virtual void Dispose(bool disposing) + { + if (!_disposed) + { + if (disposing) + { + if (Urls != null) + { + // best effort stop + try + { + StopWebServiceImplAsync().GetAwaiter().GetResult(); + } + catch (Exception ex) + { + _logger.LogWarning(ex, "Error stopping web service during Dispose."); + } + } + + _catalog?.Dispose(); + _modelManager?.Dispose(); + _lock.Dispose(); + } + + _disposed = true; + } + } + + public void Dispose() + { + // Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method + Dispose(disposing: true); + GC.SuppressFinalize(this); + } +} diff --git a/sdk_v2/cs/src/FoundryModelInfo.cs b/sdk_v2/cs/src/FoundryModelInfo.cs new file mode 100644 index 0000000..1f795d2 --- /dev/null +++ b/sdk_v2/cs/src/FoundryModelInfo.cs @@ -0,0 +1,122 @@ +// -------------------------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft. All rights reserved. +// +// -------------------------------------------------------------------------------------------------------------------- + +namespace Microsoft.AI.Foundry.Local; + +using System.Text.Json.Serialization; + +[JsonConverter(typeof(JsonStringEnumConverter))] +public enum DeviceType +{ + Invalid, + CPU, + GPU, + NPU +} + +public record PromptTemplate +{ + [JsonPropertyName("system")] + public string? System { get; init; } + + [JsonPropertyName("user")] + public string? User { get; init; } + + [JsonPropertyName("assistant")] + public string Assistant { get; init; } = default!; + + [JsonPropertyName("prompt")] + public string Prompt { get; init; } = default!; +} + +public record Runtime +{ + [JsonPropertyName("deviceType")] + public DeviceType DeviceType { get; init; } = default!; + + // there are many different possible values; keep it open‑ended + [JsonPropertyName("executionProvider")] + public string ExecutionProvider { get; init; } = default!; +} + +public record Parameter +{ + public required string Name { get; set; } + public string? Value { get; set; } +} + +public record ModelSettings +{ + [JsonPropertyName("parameters")] + public Parameter[]? Parameters { get; set; } +} + +public record ModelInfo +{ + [JsonPropertyName("id")] + public required string Id { get; init; } + + [JsonPropertyName("name")] + public required string Name { get; init; } + + [JsonPropertyName("version")] + public int Version { get; init; } + + [JsonPropertyName("alias")] + public required string Alias { get; init; } + + [JsonPropertyName("displayName")] + public string? DisplayName { get; init; } + + [JsonPropertyName("providerType")] + public required string ProviderType { get; init; } + + [JsonPropertyName("uri")] + public required string Uri { get; init; } + + [JsonPropertyName("modelType")] + public required string ModelType { get; init; } + + [JsonPropertyName("promptTemplate")] + public PromptTemplate? PromptTemplate { get; init; } + + [JsonPropertyName("publisher")] + public string? Publisher { get; init; } + + [JsonPropertyName("modelSettings")] + public ModelSettings? ModelSettings { get; init; } + + [JsonPropertyName("license")] + public string? License { get; init; } + + [JsonPropertyName("licenseDescription")] + public string? LicenseDescription { get; init; } + + [JsonPropertyName("cached")] + public bool Cached { get; init; } + + + [JsonPropertyName("task")] + public string? Task { get; init; } + + [JsonPropertyName("runtime")] + public Runtime? Runtime { get; init; } + + [JsonPropertyName("fileSizeMb")] + public int? FileSizeMb { get; init; } + + [JsonPropertyName("supportsToolCalling")] + public bool? SupportsToolCalling { get; init; } + + [JsonPropertyName("maxOutputTokens")] + public long? MaxOutputTokens { get; init; } + + [JsonPropertyName("minFLVersion")] + public string? MinFLVersion { get; init; } + + [JsonPropertyName("createdAt")] + public long CreatedAtUnix { get; init; } +} diff --git a/sdk_v2/cs/src/GlobalSuppressions.cs b/sdk_v2/cs/src/GlobalSuppressions.cs new file mode 100644 index 0000000..42d5754 --- /dev/null +++ b/sdk_v2/cs/src/GlobalSuppressions.cs @@ -0,0 +1,10 @@ +// This file is used by Code Analysis to maintain SuppressMessage +// attributes that are applied to this project. +// Project-level suppressions either have no target or are given +// a specific target and scoped to a namespace, type, member, etc. + +using System.Diagnostics.CodeAnalysis; + +// Neutron code. Appears that the _releaser is deliberately not disposed of because it may be being used elsewhere +// due to being returned from the LockAsync method. +[assembly: SuppressMessage("IDisposableAnalyzers.Correctness", "IDISP002:Dispose member", Justification = "The _releaser is not disposed because it may be used elsewhere after being returned from the LockAsync method.", Scope = "member", Target = "~F:Microsoft.AI.Foundry.Local.Detail.AsyncLock._releaser")] diff --git a/sdk_v2/cs/src/ICatalog.cs b/sdk_v2/cs/src/ICatalog.cs new file mode 100644 index 0000000..1234794 --- /dev/null +++ b/sdk_v2/cs/src/ICatalog.cs @@ -0,0 +1,53 @@ +// -------------------------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft. All rights reserved. +// +// -------------------------------------------------------------------------------------------------------------------- + +namespace Microsoft.AI.Foundry.Local; +using System.Collections.Generic; + +public interface ICatalog +{ + /// + /// The catalog name. + /// + string Name { get; } + + /// + /// List the available models in the catalog. + /// + /// Optional CancellationToken. + /// List of Model instances. + Task> ListModelsAsync(CancellationToken? ct = null); + + /// + /// Lookup a model by its alias. + /// + /// Model alias. + /// Optional CancellationToken. + /// Model if found. + Task GetModelAsync(string modelAlias, CancellationToken? ct = null); + + /// + /// Lookup a model variant by its unique model id. + /// + /// Model id. + /// Optional CancellationToken. + /// Model variant if found. + Task GetModelVariantAsync(string modelId, CancellationToken? ct = null); + + /// + /// Get a list of currently downloaded models from the model cache. + /// + /// Optional CancellationToken. + /// List of ModelVariant instances. + Task> GetCachedModelsAsync(CancellationToken? ct = null); + + /// + /// Get a list of the currently loaded models. + /// + /// Optional CancellationToken. + /// List of ModelVariant instances. + Task> GetLoadedModelsAsync(CancellationToken? ct = null); +} diff --git a/sdk_v2/cs/src/IModel.cs b/sdk_v2/cs/src/IModel.cs new file mode 100644 index 0000000..c3acba6 --- /dev/null +++ b/sdk_v2/cs/src/IModel.cs @@ -0,0 +1,70 @@ +// -------------------------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft. All rights reserved. +// +// -------------------------------------------------------------------------------------------------------------------- + +namespace Microsoft.AI.Foundry.Local; + +using System.Threading; +using System.Threading.Tasks; + +public interface IModel +{ + string Id { get; } + [System.Diagnostics.CodeAnalysis.SuppressMessage("Naming", "CA1716:Identifiers should not match keywords", + Justification = "Alias is a suitable name in this context.")] + string Alias { get; } + + Task IsCachedAsync(CancellationToken? ct = null); + Task IsLoadedAsync(CancellationToken? ct = null); + + /// + /// Download the model to local cache if not already present. + /// + /// + /// Optional progress callback for download progress. + /// Percentage download (0 - 100.0) is reported. + /// Optional cancellation token. + Task DownloadAsync(Action? downloadProgress = null, + CancellationToken? ct = null); + + /// + /// Gets the model path if cached. + /// + /// Optional cancellation token. + /// Path of model directory. + Task GetPathAsync(CancellationToken? ct = null); + + /// + /// Load the model into memory if not already loaded. + /// + /// Optional cancellation token. + Task LoadAsync(CancellationToken? ct = null); + + /// + /// Remove the model from the local cache. + /// + /// Optional cancellation token. + Task RemoveFromCacheAsync(CancellationToken? ct = null); + + /// + /// Unload the model if loaded. + /// + /// Optional cancellation token. + Task UnloadAsync(CancellationToken? ct = null); + + /// + /// Get an OpenAI API based ChatClient + /// + /// Optional cancellation token. + /// OpenAI.ChatClient + Task GetChatClientAsync(CancellationToken? ct = null); + + /// + /// Get an OpenAI API based AudioClient + /// + /// Optional cancellation token. + /// OpenAI.AudioClient + Task GetAudioClientAsync(CancellationToken? ct = null); +} diff --git a/sdk_v2/cs/src/LogLevel.cs b/sdk_v2/cs/src/LogLevel.cs new file mode 100644 index 0000000..6362ded --- /dev/null +++ b/sdk_v2/cs/src/LogLevel.cs @@ -0,0 +1,17 @@ +// -------------------------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft. All rights reserved. +// +// -------------------------------------------------------------------------------------------------------------------- + +namespace Microsoft.AI.Foundry.Local; + +public enum LogLevel +{ + Verbose = 0, + Debug = 1, + Information = 2, + Warning = 3, + Error = 4, + Fatal = 5 +} diff --git a/sdk_v2/cs/src/Microsoft.AI.Foundry.Local.csproj b/sdk_v2/cs/src/Microsoft.AI.Foundry.Local.csproj new file mode 100644 index 0000000..c292ef8 --- /dev/null +++ b/sdk_v2/cs/src/Microsoft.AI.Foundry.Local.csproj @@ -0,0 +1,108 @@ + + + Microsoft AI Foundry Local + Microsoft Foundry Local SDK + Microsoft + Microsoft Corporation + © Microsoft Corporation. All rights reserved. + LICENSE.txt + https://github.com/microsoft/Foundry-Local + Microsoft AI Foundry Local SDK for .NET + Microsoft AI Foundry SDK + README.md + https://github.com/microsoft/Foundry-Local + git + + net8.0 + win-x64;win-arm64;linux-x64;linux-arm64;osx-arm64 + + true + False + enable + True + True + enable + + + true + snupkg + + + false + win-x64;win-arm64 + + + + + $([System.DateTime]::Now.ToString("yyyyMMddHHmmss")) + 0.5.0-dev.local.$(BuildTimestamp) + + + + true + true + true + + + $(DefineConstants);IS_WINDOWS + $(DefineConstants);IS_OSX + $(DefineConstants);IS_LINUX + latest-recommended + + + + + + + + + + + + + + + + + + + + Microsoft AI Foundry Local for WinML + Microsoft Foundry Local SDK for WinML + Microsoft.AI.Foundry.Local.WinML + Microsoft.AI.Foundry.Local.WinML + net8.0-windows10.0.26100.0 + win-x64;win-arm64 + + 10.0.17763.0 + + + $(NoWarn);CsWinRT1028 + + + True + + + True + + + + + + + + + + + + \ No newline at end of file diff --git a/sdk_v2/cs/src/Model.cs b/sdk_v2/cs/src/Model.cs new file mode 100644 index 0000000..83bcef6 --- /dev/null +++ b/sdk_v2/cs/src/Model.cs @@ -0,0 +1,126 @@ +// -------------------------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft. All rights reserved. +// +// -------------------------------------------------------------------------------------------------------------------- + +namespace Microsoft.AI.Foundry.Local; + +using Microsoft.Extensions.Logging; + +public class Model : IModel +{ + private readonly ILogger _logger; + + public List Variants { get; internal set; } + public ModelVariant SelectedVariant { get; internal set; } = default!; + + public string Alias { get; init; } + public string Id => SelectedVariant.Id; + + /// + /// Is the currently selected variant cached locally? + /// + public Task IsCachedAsync(CancellationToken? ct = null) => SelectedVariant.IsCachedAsync(ct); + + /// + /// Is the currently selected variant loaded in memory? + /// + public Task IsLoadedAsync(CancellationToken? ct = null) => SelectedVariant.IsLoadedAsync(ct); + + internal Model(ModelVariant modelVariant, ILogger logger) + { + _logger = logger; + + Alias = modelVariant.Alias; + Variants = new() { modelVariant }; + + // variants are sorted by Core, so the first one added is the default + SelectedVariant = modelVariant; + } + + internal void AddVariant(ModelVariant variant) + { + if (Alias != variant.Alias) + { + // internal error so log + throw new FoundryLocalException($"Variant alias {variant.Alias} does not match model alias {Alias}", + _logger); + } + + Variants.Add(variant); + + // prefer the highest priority locally cached variant + if (variant.Info.Cached && !SelectedVariant.Info.Cached) + { + SelectedVariant = variant; + } + } + + /// + /// Select a specific model variant by its unique model ID. + /// The selected variant will be used for operations. + /// + /// Model Id of the variant to select. + /// If variant is not valid for this model. + public void SelectVariant(ModelVariant variant) + { + _ = Variants.FirstOrDefault(v => v == variant) ?? + // user error so don't log + throw new FoundryLocalException($"Model {Alias} does not have a {variant.Id} variant."); + + SelectedVariant = variant; + } + + /// + /// Get the latest version of the specified model variant. + /// + /// Model variant. + /// ModelVariant for latest version. Same as `variant` if that is the latest version. + /// If variant is not valid for this model. + public ModelVariant GetLatestVersion(ModelVariant variant) + { + // variants are sorted by version, so the first one matching the name is the latest version for that variant. + var latest = Variants.FirstOrDefault(v => v.Info.Name == variant.Info.Name) ?? + // user error so don't log + throw new FoundryLocalException($"Model {Alias} does not have a {variant.Id} variant."); + + return latest; + } + + public async Task GetPathAsync(CancellationToken? ct = null) + { + return await SelectedVariant.GetPathAsync(ct).ConfigureAwait(false); + } + + public async Task DownloadAsync(Action? downloadProgress = null, + CancellationToken? ct = null) + { + await SelectedVariant.DownloadAsync(downloadProgress, ct).ConfigureAwait(false); + } + + public async Task LoadAsync(CancellationToken? ct = null) + { + await SelectedVariant.LoadAsync(ct).ConfigureAwait(false); + } + + public async Task GetChatClientAsync(CancellationToken? ct = null) + { + return await SelectedVariant.GetChatClientAsync(ct).ConfigureAwait(false); + } + + public async Task GetAudioClientAsync(CancellationToken? ct = null) + { + return await SelectedVariant.GetAudioClientAsync(ct).ConfigureAwait(false); + } + + public async Task UnloadAsync(CancellationToken? ct = null) + { + await SelectedVariant.UnloadAsync(ct).ConfigureAwait(false); + } + + public async Task RemoveFromCacheAsync(CancellationToken? ct = null) + { + await SelectedVariant.RemoveFromCacheAsync(ct).ConfigureAwait(false); + } +} diff --git a/sdk_v2/cs/src/ModelVariant.cs b/sdk_v2/cs/src/ModelVariant.cs new file mode 100644 index 0000000..6ca7cda --- /dev/null +++ b/sdk_v2/cs/src/ModelVariant.cs @@ -0,0 +1,193 @@ +// -------------------------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft. All rights reserved. +// +// -------------------------------------------------------------------------------------------------------------------- + +namespace Microsoft.AI.Foundry.Local; + +using Microsoft.AI.Foundry.Local.Detail; +using Microsoft.Extensions.Logging; + +public class ModelVariant : IModel +{ + private readonly IModelLoadManager _modelLoadManager; + private readonly ICoreInterop _coreInterop; + private readonly ILogger _logger; + + public ModelInfo Info { get; } // expose the full info record + + // expose a few common properties directly + public string Id => Info.Id; + public string Alias => Info.Alias; + public int Version { get; init; } // parsed from Info.Version if possible, else 0 + + internal ModelVariant(ModelInfo modelInfo, IModelLoadManager modelLoadManager, ICoreInterop coreInterop, + ILogger logger) + { + Info = modelInfo; + Version = modelInfo.Version; + + _modelLoadManager = modelLoadManager; + _coreInterop = coreInterop; + _logger = logger; + + } + + // simpler and always correct to check if loaded from the model load manager + // this allows for multiple instances of ModelVariant to exist + public async Task IsLoadedAsync(CancellationToken? ct = null) + { + return await Utils.CallWithExceptionHandling(() => IsLoadedImplAsync(ct), + "Error checking if model is loaded", _logger) + .ConfigureAwait(false); + } + + public async Task IsCachedAsync(CancellationToken? ct = null) + { + return await Utils.CallWithExceptionHandling(() => IsCachedImplAsync(ct), + "Error checking if model is cached", _logger) + .ConfigureAwait(false); + } + + public async Task GetPathAsync(CancellationToken? ct = null) + { + return await Utils.CallWithExceptionHandling(() => GetPathImplAsync(ct), + "Error getting path for model", _logger) + .ConfigureAwait(false); + } + + public async Task DownloadAsync(Action? downloadProgress = null, + CancellationToken? ct = null) + { + await Utils.CallWithExceptionHandling(() => DownloadImplAsync(downloadProgress, ct), + $"Error downloading model {Id}", _logger) + .ConfigureAwait(false); + } + + public async Task LoadAsync(CancellationToken? ct = null) + { + await Utils.CallWithExceptionHandling(() => _modelLoadManager.LoadAsync(Id, ct), + "Error loading model", _logger) + .ConfigureAwait(false); + } + + public async Task UnloadAsync(CancellationToken? ct = null) + { + await Utils.CallWithExceptionHandling(() => _modelLoadManager.UnloadAsync(Id, ct), + "Error unloading model", _logger) + .ConfigureAwait(false); + } + + public async Task RemoveFromCacheAsync(CancellationToken? ct = null) + { + await Utils.CallWithExceptionHandling(() => RemoveFromCacheImplAsync(ct), + $"Error removing model {Id} from cache", _logger) + .ConfigureAwait(false); + } + + public async Task GetChatClientAsync(CancellationToken? ct = null) + { + return await Utils.CallWithExceptionHandling(() => GetChatClientImplAsync(ct), + "Error getting chat client for model", _logger) + .ConfigureAwait(false); + } + + public async Task GetAudioClientAsync(CancellationToken? ct = null) + { + return await Utils.CallWithExceptionHandling(() => GetAudioClientImplAsync(ct), + "Error getting audio client for model", _logger) + .ConfigureAwait(false); + } + + private async Task IsLoadedImplAsync(CancellationToken? ct = null) + { + var loadedModels = await _modelLoadManager.ListLoadedModelsAsync(ct).ConfigureAwait(false); + return loadedModels.Contains(Id); + } + + private async Task IsCachedImplAsync(CancellationToken? ct = null) + { + var cachedModelIds = await Utils.GetCachedModelIdsAsync(_coreInterop, ct).ConfigureAwait(false); + return cachedModelIds.Contains(Id); + } + + private async Task GetPathImplAsync(CancellationToken? ct = null) + { + var request = new CoreInteropRequest { Params = new Dictionary { { "Model", Id } } }; + var result = await _coreInterop.ExecuteCommandAsync("get_model_path", request, ct).ConfigureAwait(false); + if (result.Error != null) + { + throw new FoundryLocalException( + $"Error getting path for model {Id}: {result.Error}. Has it been downloaded?"); + } + + var path = result.Data!; + return path; + } + + private async Task DownloadImplAsync(Action? downloadProgress = null, + CancellationToken? ct = null) + { + var request = new CoreInteropRequest + { + Params = new() { { "Model", Id } } + }; + + ICoreInterop.Response? response; + + if (downloadProgress == null) + { + response = await _coreInterop.ExecuteCommandAsync("download_model", request, ct).ConfigureAwait(false); + } + else + { + var callback = new ICoreInterop.CallbackFn(progressString => + { + if (float.TryParse(progressString, out var progress)) + { + downloadProgress(progress); + } + }); + + response = await _coreInterop.ExecuteCommandWithCallbackAsync("download_model", request, + callback, ct).ConfigureAwait(false); + } + + if (response.Error != null) + { + throw new FoundryLocalException($"Error downloading model {Id}: {response.Error}"); + } + } + + private async Task RemoveFromCacheImplAsync(CancellationToken? ct = null) + { + var request = new CoreInteropRequest { Params = new Dictionary { { "Model", Id } } }; + + var result = await _coreInterop.ExecuteCommandAsync("remove_cached_model", request, ct).ConfigureAwait(false); + if (result.Error != null) + { + throw new FoundryLocalException($"Error removing model {Id} from cache: {result.Error}"); + } + } + + private async Task GetChatClientImplAsync(CancellationToken? ct = null) + { + if (!await IsLoadedAsync(ct)) + { + throw new FoundryLocalException($"Model {Id} is not loaded. Call LoadAsync first."); + } + + return new OpenAIChatClient(Id); + } + + private async Task GetAudioClientImplAsync(CancellationToken? ct = null) + { + if (!await IsLoadedAsync(ct)) + { + throw new FoundryLocalException($"Model {Id} is not loaded. Call LoadAsync first."); + } + + return new OpenAIAudioClient(Id); + } +} diff --git a/sdk_v2/cs/src/OpenAI/AudioClient.cs b/sdk_v2/cs/src/OpenAI/AudioClient.cs new file mode 100644 index 0000000..98f40a6 --- /dev/null +++ b/sdk_v2/cs/src/OpenAI/AudioClient.cs @@ -0,0 +1,182 @@ +// -------------------------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft. All rights reserved. +// +// -------------------------------------------------------------------------------------------------------------------- + +namespace Microsoft.AI.Foundry.Local; + +using System.Runtime.CompilerServices; +using System.Threading.Channels; + +using Betalgo.Ranul.OpenAI.ObjectModels.RequestModels; +using Betalgo.Ranul.OpenAI.ObjectModels.ResponseModels; + +using Microsoft.AI.Foundry.Local.Detail; +using Microsoft.AI.Foundry.Local.OpenAI; +using Microsoft.Extensions.Logging; + +/// +/// Audio Client that uses the OpenAI API. +/// Implemented using Betalgo.Ranul.OpenAI SDK types. +/// +public class OpenAIAudioClient +{ + private readonly string _modelId; + + private readonly ICoreInterop _coreInterop = FoundryLocalManager.Instance.CoreInterop; + private readonly ILogger _logger = FoundryLocalManager.Instance.Logger; + + internal OpenAIAudioClient(string modelId) + { + _modelId = modelId; + } + + /// + /// Transcribe audio from a file. + /// + /// + /// Path to file containing audio recording. + /// Supported formats: ???? + /// + /// Optional cancellation token. + /// Transcription response. + public async Task TranscribeAudioAsync(string audioFilePath, + CancellationToken? ct = null) + { + return await Utils.CallWithExceptionHandling(() => TranscribeAudioImplAsync(audioFilePath, ct), + "Error during audio transcription.", _logger) + .ConfigureAwait(false); + } + + /// + /// Transcribe audio from a file with streamed output. + /// + /// + /// Path to file containing audio recording. + /// Supported formats: ???? + /// + /// Cancellation token. + /// An asynchronous enumerable of transcription responses. + public async IAsyncEnumerable TranscribeAudioStreamingAsync( + string audioFilePath, [EnumeratorCancellation] CancellationToken ct) + { + var enumerable = Utils.CallWithExceptionHandling( + () => TranscribeAudioStreamingImplAsync(audioFilePath, ct), + "Error during streaming audio transcription.", _logger).ConfigureAwait(false); + + await foreach (var item in enumerable) + { + yield return item; + } + } + + private async Task TranscribeAudioImplAsync(string audioFilePath, + CancellationToken? ct) + { + var openaiRequest = new AudioCreateTranscriptionRequest + { + Model = _modelId, + FileName = audioFilePath + }; + + var request = new CoreInteropRequest + { + Params = new Dictionary + { + { "OpenAICreateRequest", openaiRequest.ToJson() }, + } + }; + + var response = await _coreInterop.ExecuteCommandAsync("audio_transcribe", request, + ct ?? CancellationToken.None).ConfigureAwait(false); + + + var output = response.ToAudioTranscription(_logger); + + return output; + } + + private async IAsyncEnumerable TranscribeAudioStreamingImplAsync( + string audioFilePath, [EnumeratorCancellation] CancellationToken ct) + { + var openaiRequest = new AudioCreateTranscriptionRequest + { + Model = _modelId, + FileName = audioFilePath + }; + + var request = new CoreInteropRequest + { + Params = new Dictionary + { + { "OpenAICreateRequest", openaiRequest.ToJson() }, + } + }; + + var channel = Channel.CreateUnbounded( + new UnboundedChannelOptions + { + SingleWriter = true, + SingleReader = true, + AllowSynchronousContinuations = true + }); + + // The callback will push ChatResponse objects into the channel. + // The channel reader will return the values to the user. + // This setup prevents the user from blocking the thread generating the responses. + _ = Task.Run(async () => + { + try + { + var failed = false; + + await _coreInterop.ExecuteCommandWithCallbackAsync( + "audio_transcribe", + request, + async (callbackData) => + { + try + { + if (!failed) + { + var audioCompletion = callbackData.ToAudioTranscription(_logger); + await channel.Writer.WriteAsync(audioCompletion); + } + } + catch (Exception ex) + { + // propagate exception to reader + channel.Writer.TryComplete( + new FoundryLocalException( + "Error processing streaming audio transcription callback data.", ex, _logger)); + failed = true; + } + }, + ct + ).ConfigureAwait(false); + + // use TryComplete as an exception in the callback may have already closed the channel + _ = channel.Writer.TryComplete(); + } + // Ignore cancellation exceptions so we don't convert them into errors + catch (Exception ex) when (ex is not OperationCanceledException) + { + channel.Writer.TryComplete( + new FoundryLocalException("Error executing streaming chat completion.", ex, _logger)); + } + catch (OperationCanceledException) + { + // Complete the channel on cancellation but don't turn it into an error + channel.Writer.TryComplete(); + } + }, ct); + + // Start reading from the channel as items arrive. + // This will continue until ExecuteCommandWithCallbackAsync completes and closes the channel. + await foreach (var item in channel.Reader.ReadAllAsync(ct)) + { + yield return item; + } + } +} diff --git a/sdk_v2/cs/src/OpenAI/AudioTranscriptionRequestResponseTypes.cs b/sdk_v2/cs/src/OpenAI/AudioTranscriptionRequestResponseTypes.cs new file mode 100644 index 0000000..d2dc729 --- /dev/null +++ b/sdk_v2/cs/src/OpenAI/AudioTranscriptionRequestResponseTypes.cs @@ -0,0 +1,49 @@ +// -------------------------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft. All rights reserved. +// +// -------------------------------------------------------------------------------------------------------------------- + +namespace Microsoft.AI.Foundry.Local.OpenAI; + +using System.Text.Json; + +using Betalgo.Ranul.OpenAI.ObjectModels.RequestModels; +using Betalgo.Ranul.OpenAI.ObjectModels.ResponseModels; + +using Microsoft.AI.Foundry.Local; +using Microsoft.AI.Foundry.Local.Detail; + +using Microsoft.Extensions.Logging; + +internal static class AudioTranscriptionRequestResponseExtensions +{ + internal static string ToJson(this AudioCreateTranscriptionRequest request) + { + return JsonSerializer.Serialize(request, JsonSerializationContext.Default.AudioCreateTranscriptionRequest); + } + internal static AudioCreateTranscriptionResponse ToAudioTranscription(this ICoreInterop.Response response, + ILogger logger) + { + if (response.Error != null) + { + logger.LogError("Error from audio_transcribe: {Error}", response.Error); + throw new FoundryLocalException($"Error from audio_transcribe command: {response.Error}"); + } + + return response.Data!.ToAudioTranscription(logger); + } + + internal static AudioCreateTranscriptionResponse ToAudioTranscription(this string responseData, ILogger logger) + { + var typeInfo = JsonSerializationContext.Default.AudioCreateTranscriptionResponse; + var response = JsonSerializer.Deserialize(responseData, typeInfo); + if (response == null) + { + logger.LogError("Failed to deserialize AudioCreateTranscriptionResponse. Json={Data}", responseData); + throw new FoundryLocalException("Failed to deserialize AudioCreateTranscriptionResponse"); + } + + return response; + } +} diff --git a/sdk_v2/cs/src/OpenAI/ChatClient.cs b/sdk_v2/cs/src/OpenAI/ChatClient.cs new file mode 100644 index 0000000..beab7a5 --- /dev/null +++ b/sdk_v2/cs/src/OpenAI/ChatClient.cs @@ -0,0 +1,185 @@ +// -------------------------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft. All rights reserved. +// +// -------------------------------------------------------------------------------------------------------------------- + +namespace Microsoft.AI.Foundry.Local; + +using System.Collections.Generic; +using System.Runtime.CompilerServices; +using System.Threading.Channels; + +using Betalgo.Ranul.OpenAI.ObjectModels.RequestModels; +using Betalgo.Ranul.OpenAI.ObjectModels.ResponseModels; + +using Microsoft.AI.Foundry.Local.Detail; +using Microsoft.AI.Foundry.Local.OpenAI; +using Microsoft.Extensions.Logging; + +/// +/// Chat Client that uses the OpenAI API. +/// Implemented using Betalgo.Ranul.OpenAI SDK types. +/// +public class OpenAIChatClient +{ + private readonly string _modelId; + + private readonly ICoreInterop _coreInterop = FoundryLocalManager.Instance.CoreInterop; + private readonly ILogger _logger = FoundryLocalManager.Instance.Logger; + + internal OpenAIChatClient(string modelId) + { + _modelId = modelId; + } + + /// + /// Settings that are supported by Foundry Local + /// + public record ChatSettings + { + public float? FrequencyPenalty { get; set; } + public int? MaxTokens { get; set; } + public int? N { get; set; } + public float? Temperature { get; set; } + public float? PresencePenalty { get; set; } + public int? RandomSeed { get; set; } + internal bool? Stream { get; set; } // this is set internally based on the API used + public int? TopK { get; set; } + public float? TopP { get; set; } + } + + /// + /// Settings to use for chat completions using this client. + /// + public ChatSettings Settings { get; } = new(); + + /// + /// Execute a chat completion request. + /// + /// To continue a conversation, add the ChatMessage from the previous response and new prompt to the messages. + /// + /// Chat messages. The system message is automatically added. + /// Optional cancellation token. + /// Chat completion response. + public async Task CompleteChatAsync(IEnumerable messages, + CancellationToken? ct = null) + { + return await Utils.CallWithExceptionHandling( + () => CompleteChatImplAsync(messages, ct), + "Error during chat completion.", _logger).ConfigureAwait(false); + } + + /// + /// Execute a chat completion request with streamed output. + /// + /// To continue a conversation, add the ChatMessage from the previous response and new prompt to the messages. + /// + /// Chat messages. The system message is automatically added. + /// Optional cancellation token. + /// Async enumerable of chat completion responses. + public async IAsyncEnumerable CompleteChatStreamingAsync( + IEnumerable messages, [EnumeratorCancellation] CancellationToken ct) + { + var enumerable = Utils.CallWithExceptionHandling( + () => ChatStreamingImplAsync(messages, ct), + "Error during streaming chat completion.", _logger).ConfigureAwait(false); + + await foreach (var item in enumerable) + { + yield return item; + } + } + + private async Task CompleteChatImplAsync(IEnumerable messages, + CancellationToken? ct) + { + Settings.Stream = false; + + var chatRequest = ChatCompletionCreateRequestExtended.FromUserInput(_modelId, messages, Settings); + var chatRequestJson = chatRequest.ToJson(); + + var request = new CoreInteropRequest { Params = new() { { "OpenAICreateRequest", chatRequestJson } } }; + var response = await _coreInterop.ExecuteCommandAsync("chat_completions", request, + ct ?? CancellationToken.None).ConfigureAwait(false); + + var chatCompletion = response.ToChatCompletion(_logger); + + return chatCompletion; + } + + private async IAsyncEnumerable ChatStreamingImplAsync( + IEnumerable messages, [EnumeratorCancellation] CancellationToken ct) + { + Settings.Stream = true; + + var chatRequest = ChatCompletionCreateRequestExtended.FromUserInput(_modelId, messages, Settings); + var chatRequestJson = chatRequest.ToJson(); + var request = new CoreInteropRequest { Params = new() { { "OpenAICreateRequest", chatRequestJson } } }; + + var channel = Channel.CreateUnbounded( + new UnboundedChannelOptions + { + SingleWriter = true, + SingleReader = true, + AllowSynchronousContinuations = true + }); + + // The callback will push ChatResponse objects into the channel. + // The channel reader will return the values to the user. + // This setup prevents the user from blocking the thread generating the responses. + _ = Task.Run(async () => + { + try + { + var failed = false; + + await _coreInterop.ExecuteCommandWithCallbackAsync( + "chat_completions", + request, + async (callbackData) => + { + try + { + if (!failed) + { + var chatCompletion = callbackData.ToChatCompletion(_logger); + await channel.Writer.WriteAsync(chatCompletion); + } + } + catch (Exception ex) + { + // propagate exception to reader + channel.Writer.TryComplete( + new FoundryLocalException("Error processing streaming chat completion callback data.", + ex, _logger)); + failed = true; + } + }, + ct + ).ConfigureAwait(false); + + // use TryComplete as an exception in the callback may have already closed the channel + _ = channel.Writer.TryComplete(); + } + // Ignore cancellation exceptions so we don't convert them into errors + catch (Exception ex) when (ex is not OperationCanceledException) + { + channel.Writer.TryComplete( + new FoundryLocalException("Error executing streaming chat completion.", ex, _logger)); + } + catch (OperationCanceledException) + { + // Complete the channel on cancellation but don't turn it into an error + channel.Writer.TryComplete(); + } + }, ct); + + // Start reading from the channel as items arrive. + // This will continue until ExecuteCommandWithCallbackAsync completes and closes the channel. + await foreach (var item in channel.Reader.ReadAllAsync(ct)) + { + yield return item; + } + } +} diff --git a/sdk_v2/cs/src/OpenAI/ChatCompletionRequestResponseTypes.cs b/sdk_v2/cs/src/OpenAI/ChatCompletionRequestResponseTypes.cs new file mode 100644 index 0000000..c054a28 --- /dev/null +++ b/sdk_v2/cs/src/OpenAI/ChatCompletionRequestResponseTypes.cs @@ -0,0 +1,95 @@ +// -------------------------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft. All rights reserved. +// +// -------------------------------------------------------------------------------------------------------------------- + +namespace Microsoft.AI.Foundry.Local.OpenAI; + +using System.Globalization; +using System.Text.Json; +using System.Text.Json.Serialization; + +using Betalgo.Ranul.OpenAI.ObjectModels.RequestModels; +using Betalgo.Ranul.OpenAI.ObjectModels.ResponseModels; + +using Microsoft.AI.Foundry.Local; +using Microsoft.AI.Foundry.Local.Detail; +using Microsoft.Extensions.Logging; + +// https://platform.openai.com/docs/api-reference/chat/create +// Using the Betalgo ChatCompletionCreateRequest and extending with the `metadata` field for additional parameters +// which is part of the OpenAI spec but for some reason not part of the Betalgo request object. +internal class ChatCompletionCreateRequestExtended : ChatCompletionCreateRequest +{ + // Valid entries: + // int top_k + // int random_seed + [JsonPropertyName("metadata")] + public Dictionary? Metadata { get; set; } + + internal static ChatCompletionCreateRequestExtended FromUserInput(string modelId, + IEnumerable messages, + OpenAIChatClient.ChatSettings settings) + { + var request = new ChatCompletionCreateRequestExtended + { + Model = modelId, + Messages = messages.ToList(), + + // apply our specific settings + FrequencyPenalty = settings.FrequencyPenalty, + MaxTokens = settings.MaxTokens, + N = settings.N, + Temperature = settings.Temperature, + PresencePenalty = settings.PresencePenalty, + Stream = settings.Stream, + TopP = settings.TopP + }; + + var metadata = new Dictionary(); + + if (settings.TopK.HasValue) + { + metadata["top_k"] = settings.TopK.Value.ToString(CultureInfo.InvariantCulture); + } + + if (settings.RandomSeed.HasValue) + { + metadata["random_seed"] = settings.RandomSeed.Value.ToString(CultureInfo.InvariantCulture); + } + + if (metadata.Count > 0) + { + request.Metadata = metadata; + } + + + return request; + } +} + +internal static class ChatCompletionsRequestResponseExtensions +{ + internal static string ToJson(this ChatCompletionCreateRequestExtended request) + { + return JsonSerializer.Serialize(request, JsonSerializationContext.Default.ChatCompletionCreateRequestExtended); + } + + internal static ChatCompletionCreateResponse ToChatCompletion(this ICoreInterop.Response response, ILogger logger) + { + if (response.Error != null) + { + logger.LogError("Error from chat_completions: {Error}", response.Error); + throw new FoundryLocalException($"Error from chat_completions command: {response.Error}"); + } + + return response.Data!.ToChatCompletion(logger); + } + + internal static ChatCompletionCreateResponse ToChatCompletion(this string responseData, ILogger logger) + { + return JsonSerializer.Deserialize(responseData, JsonSerializationContext.Default.ChatCompletionCreateResponse) + ?? throw new JsonException("Failed to deserialize ChatCompletion"); + } +} diff --git a/sdk_v2/cs/src/Utils.cs b/sdk_v2/cs/src/Utils.cs new file mode 100644 index 0000000..8300a96 --- /dev/null +++ b/sdk_v2/cs/src/Utils.cs @@ -0,0 +1,53 @@ +// -------------------------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft. All rights reserved. +// +// -------------------------------------------------------------------------------------------------------------------- + +namespace Microsoft.AI.Foundry.Local; +using System.Text.Json; +using System.Threading.Tasks; + +using Microsoft.AI.Foundry.Local.Detail; +using Microsoft.Extensions.Logging; + +internal class Utils +{ + internal static async Task GetCachedModelIdsAsync(ICoreInterop coreInterop, CancellationToken? ct = null) + { + CoreInteropRequest? input = null; + var result = await coreInterop.ExecuteCommandAsync("get_cached_models", input, ct).ConfigureAwait(false); + if (result.Error != null) + { + throw new FoundryLocalException($"Error getting cached model ids: {result.Error}"); + } + + var typeInfo = JsonSerializationContext.Default.StringArray; + var cachedModelIds = JsonSerializer.Deserialize(result.Data!, typeInfo); + if (cachedModelIds == null) + { + throw new FoundryLocalException($"Failed to deserialized cached model names. Json:'{result.Data!}'"); + } + + return cachedModelIds; + } + + // Helper to wrap function calls with consistent exception handling + internal static T CallWithExceptionHandling(Func func, string errorMsg, ILogger logger) + { + try + { + return func(); + } + // we ignore OperationCanceledException to allow proper cancellation propagation + // this also covers TaskCanceledException since it derives from OperationCanceledException + catch (Exception ex) when (ex is not OperationCanceledException) + { + if (ex is FoundryLocalException) + { + throw; + } + throw new FoundryLocalException(errorMsg, ex, logger); + } + } +} diff --git a/sdk_v2/cs/src/msbuild.binlog b/sdk_v2/cs/src/msbuild.binlog new file mode 100644 index 0000000000000000000000000000000000000000..3beb2b7eb914d350f0eb2a93cca288d0aaf4c9f4 GIT binary patch literal 601407 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≥2ifDy757msHj6tNEk5TMkY4J$HsU; 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

sr6nc)KuB_T%&&kyw@H)64K)5&+5F!( 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

M3nXoeF4Q-jujL`n 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

sWrTh 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¬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

lj)Qs$^qU1J&4z5Evk=Zn3>KKivPUg>3vs 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 z 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 literal 0 HcmV?d00001 diff --git a/sdk_v2/cs/test/FoundryLocal.Tests/AudioClientTests.cs b/sdk_v2/cs/test/FoundryLocal.Tests/AudioClientTests.cs new file mode 100644 index 0000000..1581901 --- /dev/null +++ b/sdk_v2/cs/test/FoundryLocal.Tests/AudioClientTests.cs @@ -0,0 +1,74 @@ +// -------------------------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft. All rights reserved. +// +// -------------------------------------------------------------------------------------------------------------------- + +namespace Microsoft.AI.Foundry.Local.Tests; + +using System.Text; +using System.Threading.Tasks; + +internal sealed class AudioClientTests +{ + private static Model? model; + + [Before(Class)] + public static async Task Setup() + { + var manager = FoundryLocalManager.Instance; // initialized by Utils + var catalog = await manager.GetCatalogAsync(); + var model = await catalog.GetModelAsync("whisper-tiny").ConfigureAwait(false); + await Assert.That(model).IsNotNull(); + + await model.LoadAsync().ConfigureAwait(false); + await Assert.That(await model.IsLoadedAsync()).IsTrue(); + + AudioClientTests.model = model; + } + + [Test] + public async Task AudioTranscription_NoStreaming_Succeeds() + { + var audioClient = await model!.GetAudioClientAsync(); + await Assert.That(audioClient).IsNotNull(); + + + var audioFilePath = "testdata/Recording.mp3"; + + var response = await audioClient.TranscribeAudioAsync(audioFilePath).ConfigureAwait(false); + + await Assert.That(response).IsNotNull(); + await Assert.That(response.Text).IsNotNull().And.IsNotEmpty(); + var content = response.Text; + await Assert.That(content).IsEqualTo(" And lots of times you need to give people more than one link at a time. You a band could give their fans a couple new videos from the live concert behind the scenes photo gallery and album to purchase like these next few links."); + Console.WriteLine($"Response: {content}"); + } + + [Test] + public async Task AudioTranscription_Streaming_Succeeds() + { + var audioClient = await model!.GetAudioClientAsync(); + await Assert.That(audioClient).IsNotNull(); + + + var audioFilePath = "testdata/Recording.mp3"; + + var updates = audioClient.TranscribeAudioStreamingAsync(audioFilePath, CancellationToken.None).ConfigureAwait(false); + + StringBuilder responseMessage = new(); + await foreach (var response in updates) + { + await Assert.That(response).IsNotNull(); + await Assert.That(response.Text).IsNotNull().And.IsNotEmpty(); + var content = response.Text; + responseMessage.Append(content); + } + + var fullResponse = responseMessage.ToString(); + Console.WriteLine(fullResponse); + await Assert.That(fullResponse).IsEqualTo(" And lots of times you need to give people more than one link at a time. You a band could give their fans a couple new videos from the live concert behind the scenes photo gallery and album to purchase like these next few links."); + + + } +} diff --git a/sdk_v2/cs/test/FoundryLocal.Tests/ChatCompletionsTests.cs b/sdk_v2/cs/test/FoundryLocal.Tests/ChatCompletionsTests.cs new file mode 100644 index 0000000..0f1c7c6 --- /dev/null +++ b/sdk_v2/cs/test/FoundryLocal.Tests/ChatCompletionsTests.cs @@ -0,0 +1,131 @@ +// -------------------------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft. All rights reserved. +// +// -------------------------------------------------------------------------------------------------------------------- + +namespace Microsoft.AI.Foundry.Local.Tests; + +using System.Text; +using System.Threading.Tasks; + +using Betalgo.Ranul.OpenAI.ObjectModels.RequestModels; + +internal sealed class ChatCompletionsTests +{ + private static Model? model; + + [Before(Class)] + public static async Task Setup() + { + var manager = FoundryLocalManager.Instance; // initialized by Utils + var catalog = await manager.GetCatalogAsync(); + + // Load the specific cached model variant directly + var modelVariant = await catalog.GetModelVariantAsync("qwen2.5-0.5b-instruct-generic-cpu:4").ConfigureAwait(false); + await Assert.That(modelVariant).IsNotNull(); + + var model = new Model(modelVariant!, manager.Logger); + await model.LoadAsync().ConfigureAwait(false); + await Assert.That(await model.IsLoadedAsync()).IsTrue(); + + ChatCompletionsTests.model = model; + } + + [Test] + public async Task DirectChat_NoStreaming_Succeeds() + { + var chatClient = await model!.GetChatClientAsync(); + await Assert.That(chatClient).IsNotNull(); + + chatClient.Settings.MaxTokens = 500; + chatClient.Settings.Temperature = 0.0f; // for deterministic results + + List messages = new() + { + // System prompt is setup by GenAI + new ChatMessage { Role = "user", Content = "You are a calculator. Be precise. What is the answer to 7 multiplied by 6?" } + }; + + var response = await chatClient.CompleteChatAsync(messages).ConfigureAwait(false); + + await Assert.That(response).IsNotNull(); + await Assert.That(response.Choices).IsNotNull().And.IsNotEmpty(); + var message = response.Choices[0].Message; + await Assert.That(message).IsNotNull(); + await Assert.That(message.Role).IsEqualTo("assistant"); + await Assert.That(message.Content).IsNotNull(); + await Assert.That(message.Content).Contains("42"); + Console.WriteLine($"Response: {message.Content}"); + + messages.Add(new ChatMessage { Role = "assistant", Content = message.Content }); + + messages.Add(new ChatMessage + { + Role = "user", + Content = "Is the answer a real number?" + }); + + response = await chatClient.CompleteChatAsync(messages).ConfigureAwait(false); + message = response.Choices[0].Message; + await Assert.That(message.Content).IsNotNull(); + await Assert.That(message.Content).Contains("Yes"); + } + + [Test] + public async Task DirectChat_Streaming_Succeeds() + { + var chatClient = await model!.GetChatClientAsync(); + await Assert.That(chatClient).IsNotNull(); + + chatClient.Settings.MaxTokens = 500; + chatClient.Settings.Temperature = 0.0f; // for deterministic results + + List messages = new() + { + new ChatMessage { Role = "user", Content = "You are a calculator. Be precise. What is the answer to 7 multiplied by 6?" } + }; + + var updates = chatClient.CompleteChatStreamingAsync(messages, CancellationToken.None).ConfigureAwait(false); + + StringBuilder responseMessage = new(); + await foreach (var response in updates) + { + await Assert.That(response).IsNotNull(); + await Assert.That(response.Choices).IsNotNull().And.IsNotEmpty(); + var message = response.Choices[0].Message; + await Assert.That(message).IsNotNull(); + await Assert.That(message.Role).IsEqualTo("assistant"); + await Assert.That(message.Content).IsNotNull(); + responseMessage.Append(message.Content); + } + + var fullResponse = responseMessage.ToString(); + Console.WriteLine(fullResponse); + await Assert.That(fullResponse).Contains("42"); + + messages.Add(new ChatMessage { Role = "assistant", Content = fullResponse }); + messages.Add(new ChatMessage + { + Role = "user", + Content = "Add 25 to the previous answer. Think hard to be sure of the answer." + }); + + updates = chatClient.CompleteChatStreamingAsync(messages, CancellationToken.None).ConfigureAwait(false); + responseMessage.Clear(); + await foreach (var response in updates) + { + await Assert.That(response).IsNotNull(); + await Assert.That(response.Choices).IsNotNull().And.IsNotEmpty(); + var message = response.Choices[0].Message; + await Assert.That(message).IsNotNull(); + await Assert.That(message.Role).IsEqualTo("assistant"); + await Assert.That(message.Content).IsNotNull(); + responseMessage.Append(message.Content); + } + + fullResponse = responseMessage.ToString(); + Console.WriteLine(fullResponse); + await Assert.That(fullResponse).Contains("67"); + } +} diff --git a/sdk_v2/cs/test/FoundryLocal.Tests/EndToEnd.cs b/sdk_v2/cs/test/FoundryLocal.Tests/EndToEnd.cs new file mode 100644 index 0000000..80ab4c0 --- /dev/null +++ b/sdk_v2/cs/test/FoundryLocal.Tests/EndToEnd.cs @@ -0,0 +1,80 @@ +// -------------------------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft. All rights reserved. +// +// -------------------------------------------------------------------------------------------------------------------- + +namespace Microsoft.AI.Foundry.Local.Tests; +using System; +using System.Threading.Tasks; + +internal sealed class EndToEnd +{ + // end-to-end using real catalog. run manually as a standalone test as it alters the model cache. + [Test] + public async Task EndToEndTest_Succeeds() + { + var manager = FoundryLocalManager.Instance; // initialized by Utils + var catalog = await manager.GetCatalogAsync(); + + var models = await catalog.ListModelsAsync().ConfigureAwait(false); + + await Assert.That(models).IsNotNull(); + await Assert.That(models.Count).IsGreaterThan(0); + + // Load the specific cached model variant directly + var modelVariant = await catalog.GetModelVariantAsync("qwen2.5-0.5b-instruct-generic-cpu:4") + .ConfigureAwait(false); + + await Assert.That(modelVariant).IsNotNull(); + await Assert.That(modelVariant!.Alias).IsEqualTo("qwen2.5-0.5b"); + + // Create model from the specific variant + var model = new Model(modelVariant, manager.Logger); + + // uncomment this to remove the model first to test the download progress + // only do this when manually testing as other tests expect the model to be cached + //await modelVariant.RemoveFromCacheAsync().ConfigureAwait(false); + //await Assert.That(modelVariant.IsCached).IsFalse(); // check variant status matches + + var expectedCallbackUsed = !await modelVariant.IsCachedAsync(); + var progressValues = new List(); + var addProgressCallbackValue = new Action(progressValues.Add); + + await model.DownloadAsync(addProgressCallbackValue); + + if (expectedCallbackUsed) + { + await Assert.That(progressValues).IsNotEmpty(); + await Assert.That(progressValues[^1]).IsEqualTo(100.0f); + } + else + { + await Assert.That(progressValues).IsEmpty(); // no callback if already cached + } + + await Assert.That(await modelVariant.IsCachedAsync()).IsTrue(); // check variant status matches + + var path = await modelVariant.GetPathAsync().ConfigureAwait(false); + var modelPath = await model.GetPathAsync().ConfigureAwait(false); + await Assert.That(path).IsNotNull(); + await Assert.That(modelPath).IsEqualTo(path); + + await modelVariant.LoadAsync().ConfigureAwait(false); + await Assert.That(await modelVariant.IsLoadedAsync()).IsTrue(); + await Assert.That(await model.IsLoadedAsync()).IsTrue(); + + // check we get the same info from the web service + await manager.StartWebServiceAsync(); + await Assert.That(manager.Urls).IsNotNull(); + var serviceUri = new Uri(manager.Urls![0]); + + // create model load manager that queries the web service + var loadedModels = await catalog.GetLoadedModelsAsync().ConfigureAwait(false); + await Assert.That(loadedModels).Contains(modelVariant); + + // Unload happens in TestAssemblySetupCleanup so tests don't affect each other. + //await modelVariant.UnloadAsync().ConfigureAwait(false); + //await Assert.That(modelVariant.IsLoaded).IsFalse(); + } +} diff --git a/sdk_v2/cs/test/FoundryLocal.Tests/FoundryLocalManagerTest.cs b/sdk_v2/cs/test/FoundryLocal.Tests/FoundryLocalManagerTest.cs new file mode 100644 index 0000000..5227e06 --- /dev/null +++ b/sdk_v2/cs/test/FoundryLocal.Tests/FoundryLocalManagerTest.cs @@ -0,0 +1,103 @@ +// -------------------------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft. All rights reserved. +// +// -------------------------------------------------------------------------------------------------------------------- + +namespace Microsoft.AI.Foundry.Local.Tests; + +using System; + +using Microsoft.AI.Foundry.Local; +using Microsoft.AI.Foundry.Local.Detail; + +public class FoundryLocalManagerTests +{ + [Test] + public async Task Manager_GetCatalog_Succeeds() + { + var catalog = await FoundryLocalManager.Instance.GetCatalogAsync() as Catalog; + await Assert.That(catalog).IsNotNull(); + await Assert.That(catalog!.Name).IsNotNullOrWhitespace(); + + var models = await catalog.ListModelsAsync(); + await Assert.That(models).IsNotNull().And.IsNotEmpty(); + + foreach (var model in models) + { + Console.WriteLine($"Model Alias: {model.Alias}, Variants: {model.Variants.Count}"); + Console.WriteLine($"Selected Variant Id: {model.SelectedVariant?.Id ?? "none"}"); + + // variants should be in sorted order + + DeviceType lastDeviceType = DeviceType.Invalid; + var lastName = string.Empty; + var lastVersion = int.MaxValue; + + foreach (var variant in model.Variants) + { + Console.WriteLine($" Id: {variant.Id}, Cached={variant.Info.Cached}"); + + // variants are grouped by name + // check if variants are sorted by device type and version + if ((variant.Info.Name == lastName) && + ((variant.Info.Runtime?.DeviceType > lastDeviceType) || + (variant.Info.Runtime?.DeviceType == lastDeviceType && variant.Info.Version > lastVersion))) + { + Assert.Fail($"Variant {variant.Id} is not in the expected order."); + } + + lastDeviceType = variant.Info.Runtime?.DeviceType ?? DeviceType.Invalid; + lastName = variant.Info.Name; + lastVersion = variant.Info.Version; + } + } + } + + [Test] + public async Task Catalog_ListCachedLoadUnload_Succeeds() + { + List logSink = new(); + var logger = Utils.CreateCapturingLoggerMock(logSink); + using var loadManager = new ModelLoadManager(null, Utils.CoreInterop, logger.Object); + + List intercepts = new() + { + new Utils.InteropCommandInterceptInfo + { + CommandName = "initialize", + CommandInput = null, + ResponseData = "Success", + ResponseError = null + } + }; + var coreInterop = Utils.CreateCoreInteropWithIntercept(Utils.CoreInterop, intercepts); + using var catalog = await Catalog.CreateAsync(loadManager, coreInterop.Object, logger.Object); + await Assert.That(catalog).IsNotNull(); + + var models = await catalog.ListModelsAsync(); + await Assert.That(models).IsNotNull().And.IsNotEmpty(); + + var cachedModels = await catalog.GetCachedModelsAsync(); + await Assert.That(cachedModels).IsNotNull(); + + if (cachedModels.Count == 0) + { + Console.WriteLine("No cached models found; skipping get path/load/unload test."); + return; + } + + // find smallest. pick first if no local models have size info. + var smallest = cachedModels.Where(m => m.Info.FileSizeMb > 0).OrderBy(m => m.Info.FileSizeMb).FirstOrDefault(); + var variant = smallest ?? cachedModels[0]; + + Console.WriteLine($"Testing GetPath/Load/Unload with ModelId: {variant.Id}"); + var path = await variant.GetPathAsync(); + Console.WriteLine($"Model path: {path}"); + await variant.LoadAsync(); + + // We unload any loaded models during cleanup for all tests + // await variant.UnloadAsync(); + } +} + diff --git a/sdk_v2/cs/test/FoundryLocal.Tests/LOCAL_MODEL_TESTING.md b/sdk_v2/cs/test/FoundryLocal.Tests/LOCAL_MODEL_TESTING.md new file mode 100644 index 0000000..d3ff4da --- /dev/null +++ b/sdk_v2/cs/test/FoundryLocal.Tests/LOCAL_MODEL_TESTING.md @@ -0,0 +1,20 @@ +# Running Local Model Tests + +## Configuration + +The test model cache directory name is configured in `sdk_v2/cs/test/FoundryLocal.Tests/appsettings.Test.json`: + +```json +{ + "TestModelCacheDirName": "/path/to/model/cache" +} +``` + +## Run the tests + +The tests will automatically find the models in the configured test model cache directory. + +```bash +cd /path/to/parent-dir/foundry-local-sdk/sdk_v2/cs/test/FoundryLocal.Tests +dotnet test Microsoft.AI.Foundry.Local.Tests.csproj --configuration Release +``` \ No newline at end of file diff --git a/sdk_v2/cs/test/FoundryLocal.Tests/Microsoft.AI.Foundry.Local.Tests.csproj b/sdk_v2/cs/test/FoundryLocal.Tests/Microsoft.AI.Foundry.Local.Tests.csproj new file mode 100644 index 0000000..15a33f7 --- /dev/null +++ b/sdk_v2/cs/test/FoundryLocal.Tests/Microsoft.AI.Foundry.Local.Tests.csproj @@ -0,0 +1,55 @@ + + + + net9.0 + enable + enable + false + true + false + + + + + + + + $(NETCoreSdkRuntimeIdentifier) + + + + net9.0-windows10.0.26100.0 + 10.0.17763.0 + None + true + + + + + + PreserveNewest + + + + + + PreserveNewest + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + + + + + + + + + diff --git a/sdk_v2/cs/test/FoundryLocal.Tests/ModelTests.cs b/sdk_v2/cs/test/FoundryLocal.Tests/ModelTests.cs new file mode 100644 index 0000000..b5a4965 --- /dev/null +++ b/sdk_v2/cs/test/FoundryLocal.Tests/ModelTests.cs @@ -0,0 +1,54 @@ +// -------------------------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft. All rights reserved. +// +// -------------------------------------------------------------------------------------------------------------------- + +namespace Microsoft.AI.Foundry.Local.Tests; +using System.Collections.Generic; +using System.Threading.Tasks; + +using Microsoft.Extensions.Logging.Abstractions; + +using Moq; + +internal sealed class ModelTests +{ + [Test] + public async Task GetLastestVersion_Works() + { + var loadManager = new Mock(); + var coreInterop = new Mock(); + var logger = NullLogger.Instance; + + var createModelInfo = (string name, int version) => new ModelInfo + { + Id = $"{name}:{version}", + Alias = "model", + Name = name, + Version = version, + Uri = "local://model", + ProviderType = "local", + ModelType = "test" + }; + + var variants = new List + { + new(createModelInfo("model_a", 4), loadManager.Object, coreInterop.Object, logger), + new(createModelInfo("model_b", 3), loadManager.Object, coreInterop.Object, logger), + new(createModelInfo("model_b", 2), loadManager.Object, coreInterop.Object, logger), + }; + + var model = new Model(variants[0], NullLogger.Instance); + foreach (var variant in variants.Skip(1)) + { + model.AddVariant(variant); + } + + var latestA = model.GetLatestVersion(variants[0]); + await Assert.That(latestA).IsEqualTo(variants[0]); + + var latestB = model.GetLatestVersion(variants[2]); + await Assert.That(latestB).IsEqualTo(variants[1]); + } +} diff --git a/sdk_v2/cs/test/FoundryLocal.Tests/SkipInCIAttribute.cs b/sdk_v2/cs/test/FoundryLocal.Tests/SkipInCIAttribute.cs new file mode 100644 index 0000000..c4d17e5 --- /dev/null +++ b/sdk_v2/cs/test/FoundryLocal.Tests/SkipInCIAttribute.cs @@ -0,0 +1,19 @@ +// -------------------------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft. All rights reserved. +// +// -------------------------------------------------------------------------------------------------------------------- + +namespace Microsoft.AI.Foundry.Local.Tests; + +using TUnit.Core; + +using System.Threading.Tasks; + +public class SkipInCIAttribute() : SkipAttribute("This test is only supported locally. Skipped on CIs.") +{ + public override Task ShouldSkip(TestRegisteredContext context) + { + return Task.FromResult(Utils.IsRunningInCI()); + } +} diff --git a/sdk_v2/cs/test/FoundryLocal.Tests/TestAssemblySetupCleanup.cs b/sdk_v2/cs/test/FoundryLocal.Tests/TestAssemblySetupCleanup.cs new file mode 100644 index 0000000..ac536d1 --- /dev/null +++ b/sdk_v2/cs/test/FoundryLocal.Tests/TestAssemblySetupCleanup.cs @@ -0,0 +1,36 @@ +// -------------------------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft. All rights reserved. +// +// -------------------------------------------------------------------------------------------------------------------- + +namespace Microsoft.AI.Foundry.Local.Tests; +using System.Threading.Tasks; + +internal static class TestAssemblySetupCleanup +{ + + [After(Assembly)] + public static async Task Cleanup(AssemblyHookContext _) + { + try + { + // ensure any loaded models are unloaded + var manager = FoundryLocalManager.Instance; // initialized by Utils + var catalog = await manager.GetCatalogAsync(); + var models = await catalog.GetLoadedModelsAsync().ConfigureAwait(false); + + foreach (var model in models) + { + await Assert.That(await model.IsLoadedAsync()).IsTrue(); + await model.UnloadAsync().ConfigureAwait(false); + await Assert.That(await model.IsLoadedAsync()).IsFalse(); + } + } + catch (Exception ex) + { + Console.WriteLine($"Error during Cleanup: {ex}"); + throw; + } + } +} diff --git a/sdk_v2/cs/test/FoundryLocal.Tests/Utils.cs b/sdk_v2/cs/test/FoundryLocal.Tests/Utils.cs new file mode 100644 index 0000000..04ee3fa --- /dev/null +++ b/sdk_v2/cs/test/FoundryLocal.Tests/Utils.cs @@ -0,0 +1,451 @@ +// -------------------------------------------------------------------------------------------------------------------- +// +// Copyright (c) Microsoft. All rights reserved. +// +// -------------------------------------------------------------------------------------------------------------------- + +namespace Microsoft.AI.Foundry.Local.Tests; + +using System; +using System.Collections.Generic; +using System.Runtime.CompilerServices; +using System.Text.Json; + +using Microsoft.AI.Foundry.Local.Detail; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; + +using Microsoft.VisualStudio.TestPlatform.TestHost; + +using Moq; + +internal static class Utils +{ + internal struct TestCatalogInfo + { + internal readonly List TestCatalog { get; } + internal readonly string ModelListJson { get; } + + internal TestCatalogInfo(bool includeCuda) + { + + TestCatalog = Utils.BuildTestCatalog(includeCuda); + ModelListJson = JsonSerializer.Serialize(TestCatalog, JsonSerializationContext.Default.ListModelInfo); + } + } + + internal static readonly TestCatalogInfo TestCatalog = new(true); + + [Before(Assembly)] + public static void AssemblyInit(AssemblyHookContext _) + { + using var loggerFactory = LoggerFactory.Create(builder => + { + builder + .AddConsole() + .SetMinimumLevel(LogLevel.Debug); + }); + + ILogger logger = loggerFactory.CreateLogger(); + + // Read configuration from appsettings.Test.json + logger.LogDebug("Reading configuration from appsettings.Test.json"); + var configuration = new ConfigurationBuilder() + .SetBasePath(Directory.GetCurrentDirectory()) + .AddJsonFile("appsettings.Test.json", optional: true, reloadOnChange: false) + .Build(); + + var testModelCacheDirName = configuration["TestModelCacheDirName"] ?? "test-data-shared"; + string testDataSharedPath; + if (Path.IsPathRooted(testModelCacheDirName) || + testModelCacheDirName.Contains(Path.DirectorySeparatorChar) || + testModelCacheDirName.Contains(Path.AltDirectorySeparatorChar)) + { + // It's a relative or complete filepath, resolve from current directory + testDataSharedPath = Path.GetFullPath(testModelCacheDirName); + } + else + { + // It's just a directory name, combine with repo root parent + testDataSharedPath = Path.GetFullPath(Path.Combine(GetRepoRoot(), "..", testModelCacheDirName)); + } + + logger.LogInformation("Using test model cache directory: {testDataSharedPath}", testDataSharedPath); + + if (!Directory.Exists(testDataSharedPath)) + { + throw new DirectoryNotFoundException($"Test model cache directory does not exist: {testDataSharedPath}"); + + } + + var config = new Configuration + { + AppName = "FoundryLocalSdkTest", + LogLevel = Local.LogLevel.Debug, + Web = new Configuration.WebService + { + Urls = "http://127.0.0.1:0" + }, + ModelCacheDir = testDataSharedPath + }; + + // Initialize the singleton instance. + FoundryLocalManager.CreateAsync(config, logger).GetAwaiter().GetResult(); + + // standalone instance for testing individual components that skips the 'initialize' command + CoreInterop = new CoreInterop(logger); + } + + internal static ICoreInterop CoreInterop { get; private set; } = default!; + + internal static Mock CreateCapturingLoggerMock(List sink) + { + var mock = new Mock(); + mock.Setup(x => x.Log( + It.IsAny(), + It.IsAny(), + It.IsAny(), + It.IsAny(), + (Func)It.IsAny())) + .Callback((LogLevel level, EventId id, object state, Exception? ex, Delegate formatter) => + { + var message = formatter.DynamicInvoke(state, ex) as string; + sink.Add($"{level}: {message}"); + }); + + return mock; + } + + internal sealed record InteropCommandInterceptInfo + { + public string CommandName { get; init; } = default!; + public string? CommandInput { get; init; } + public string ResponseData { get; init; } = default!; + public string? ResponseError { get; init; } + } + + internal static Mock CreateCoreInteropWithIntercept(ICoreInterop coreInterop, + List intercepts) + { + var mock = new Mock(); + var interceptNames = new HashSet(StringComparer.InvariantCulture); + + foreach (var intercept in intercepts) + { + if (!interceptNames.Add(intercept.CommandName)) + { + throw new ArgumentException($"Duplicate intercept for command {intercept.CommandName}"); + } + + mock.Setup(x => x.ExecuteCommand(It.Is(s => s == intercept.CommandName), It.IsAny())) + .Returns(new ICoreInterop.Response + { + Data = intercept.ResponseData, + Error = intercept.ResponseError + }); + + mock.Setup(x => x.ExecuteCommandAsync(It.Is(s => s == intercept.CommandName), + It.IsAny(), + It.IsAny())) + .ReturnsAsync(new ICoreInterop.Response + { + Data = intercept.ResponseData, + Error = intercept.ResponseError + }); + } + + mock.Setup(x => x.ExecuteCommand(It.Is(s => !interceptNames.Contains(s)), + It.IsAny())) + .Returns((string commandName, CoreInteropRequest? commandInput) => + coreInterop.ExecuteCommand(commandName, commandInput)); + + mock.Setup(x => x.ExecuteCommandAsync(It.Is(s => !interceptNames.Contains(s)), + It.IsAny(), + It.IsAny())) + .Returns((string commandName, CoreInteropRequest? commandInput, CancellationToken? ct) => + coreInterop.ExecuteCommandAsync(commandName, commandInput, ct)); + + return mock; + } + + internal static bool IsRunningInCI() + { + var azureDevOps = Environment.GetEnvironmentVariable("TF_BUILD"); + var githubActions = Environment.GetEnvironmentVariable("GITHUB_ACTIONS"); + var isCI = string.Equals(azureDevOps, "True", StringComparison.OrdinalIgnoreCase) || + string.Equals(githubActions, "true", StringComparison.OrdinalIgnoreCase); + + return isCI; + } + + private static List BuildTestCatalog(bool includeCuda = true) + { + // Mirrors MOCK_CATALOG_DATA ordering and fields (Python tests) + var common = new + { + ProviderType = "AzureFoundry", + Version = 1, + ModelType = "ONNX", + PromptTemplate = (PromptTemplate?)null, + Publisher = "Microsoft", + Task = "chat-completion", + FileSizeMb = 10403, + ModelSettings = new ModelSettings { Parameters = [] }, + SupportsToolCalling = false, + License = "MIT", + LicenseDescription = "License…", + MaxOutputTokens = 1024L, + MinFLVersion = "1.0.0", + }; + + var list = new List + { + // model-1 generic-gpu, generic-cpu:2, generic-cpu:1 + new() + { + Id = "model-1-generic-gpu:1", + Name = "model-1-generic-gpu", + DisplayName = "model-1-generic-gpu", + Uri = "azureml://registries/azureml/models/model-1-generic-gpu/versions/1", + Runtime = new Runtime { DeviceType = DeviceType.GPU, ExecutionProvider = "WebGpuExecutionProvider" }, + Alias = "model-1", + // ParentModelUri = "azureml://registries/azureml/models/model-1/versions/1", + ProviderType = common.ProviderType, Version = common.Version, ModelType = common.ModelType, + PromptTemplate = common.PromptTemplate, Publisher = common.Publisher, Task = common.Task, + FileSizeMb = common.FileSizeMb, ModelSettings = common.ModelSettings, + SupportsToolCalling = common.SupportsToolCalling, License = common.License, + LicenseDescription = common.LicenseDescription, MaxOutputTokens = common.MaxOutputTokens, + MinFLVersion = common.MinFLVersion + }, + new() + { + Id = "model-1-generic-cpu:2", + Name = "model-1-generic-cpu", + DisplayName = "model-1-generic-cpu", + Uri = "azureml://registries/azureml/models/model-1-generic-cpu/versions/2", + Runtime = new Runtime { DeviceType = DeviceType.CPU, ExecutionProvider = "CPUExecutionProvider" }, + Alias = "model-1", + // ParentModelUri = "azureml://registries/azureml/models/model-1/versions/2", + ProviderType = common.ProviderType, + Version = common.Version, ModelType = common.ModelType, + PromptTemplate = common.PromptTemplate, + Publisher = common.Publisher, Task = common.Task, + FileSizeMb = common.FileSizeMb - 10, // smaller so default chosen in test that sorts on this + ModelSettings = common.ModelSettings, + SupportsToolCalling = common.SupportsToolCalling, + License = common.License, + LicenseDescription = common.LicenseDescription, + MaxOutputTokens = common.MaxOutputTokens, + MinFLVersion = common.MinFLVersion + }, + new() + { + Id = "model-1-generic-cpu:1", + Name = "model-1-generic-cpu", + DisplayName = "model-1-generic-cpu", + Uri = "azureml://registries/azureml/models/model-1-generic-cpu/versions/1", + Runtime = new Runtime { DeviceType = DeviceType.CPU, ExecutionProvider = "CPUExecutionProvider" }, + Alias = "model-1", + //ParentModelUri = "azureml://registries/azureml/models/model-1/versions/1", + ProviderType = common.ProviderType, + Version = common.Version, + ModelType = common.ModelType, + PromptTemplate = common.PromptTemplate, + Publisher = common.Publisher, Task = common.Task, + FileSizeMb = common.FileSizeMb, + ModelSettings = common.ModelSettings, + SupportsToolCalling = common.SupportsToolCalling, + License = common.License, + LicenseDescription = common.LicenseDescription, + MaxOutputTokens = common.MaxOutputTokens, + MinFLVersion = common.MinFLVersion + }, + + // model-2 npu:2, npu:1, generic-cpu:1 + new() + { + Id = "model-2-npu:2", + Name = "model-2-npu", + DisplayName = "model-2-npu", + Uri = "azureml://registries/azureml/models/model-2-npu/versions/2", + Runtime = new Runtime { DeviceType = DeviceType.NPU, ExecutionProvider = "QNNExecutionProvider" }, + Alias = "model-2", + //ParentModelUri = "azureml://registries/azureml/models/model-2/versions/2", + ProviderType = common.ProviderType, + Version = common.Version, ModelType = common.ModelType, + PromptTemplate = common.PromptTemplate, + Publisher = common.Publisher, Task = common.Task, + FileSizeMb = common.FileSizeMb, + ModelSettings = common.ModelSettings, + SupportsToolCalling = common.SupportsToolCalling, + License = common.License, + LicenseDescription = common.LicenseDescription, + MaxOutputTokens = common.MaxOutputTokens, + MinFLVersion = common.MinFLVersion + }, + new() + { + Id = "model-2-npu:1", + Name = "model-2-npu", + DisplayName = "model-2-npu", + Uri = "azureml://registries/azureml/models/model-2-npu/versions/1", + Runtime = new Runtime { DeviceType = DeviceType.NPU, ExecutionProvider = "QNNExecutionProvider" }, + Alias = "model-2", + //ParentModelUri = "azureml://registries/azureml/models/model-2/versions/1", + ProviderType = common.ProviderType, + Version = common.Version, ModelType = common.ModelType, + PromptTemplate = common.PromptTemplate, + Publisher = common.Publisher, Task = common.Task, + FileSizeMb = common.FileSizeMb, + ModelSettings = common.ModelSettings, + SupportsToolCalling = common.SupportsToolCalling, + License = common.License, + LicenseDescription = common.LicenseDescription, + MaxOutputTokens = common.MaxOutputTokens, + MinFLVersion = common.MinFLVersion + }, + new() + { + Id = "model-2-generic-cpu:1", + Name = "model-2-generic-cpu", + DisplayName = "model-2-generic-cpu", + Uri = "azureml://registries/azureml/models/model-2-generic-cpu/versions/1", + Runtime = new Runtime { DeviceType = DeviceType.CPU, ExecutionProvider = "CPUExecutionProvider" }, + Alias = "model-2", + //ParentModelUri = "azureml://registries/azureml/models/model-2/versions/1", + ProviderType = common.ProviderType, + Version = common.Version, ModelType = common.ModelType, + PromptTemplate = common.PromptTemplate, + Publisher = common.Publisher, Task = common.Task, + FileSizeMb = common.FileSizeMb, + ModelSettings = common.ModelSettings, + SupportsToolCalling = common.SupportsToolCalling, + License = common.License, + LicenseDescription = common.LicenseDescription, + MaxOutputTokens = common.MaxOutputTokens, + MinFLVersion = common.MinFLVersion + }, + }; + + // model-3 cuda-gpu (optional), generic-gpu, generic-cpu + if (includeCuda) + { + list.Add(new ModelInfo + { + Id = "model-3-cuda-gpu:1", + Name = "model-3-cuda-gpu", + DisplayName = "model-3-cuda-gpu", + Uri = "azureml://registries/azureml/models/model-3-cuda-gpu/versions/1", + Runtime = new Runtime { DeviceType = DeviceType.GPU, ExecutionProvider = "CUDAExecutionProvider" }, + Alias = "model-3", + //ParentModelUri = "azureml://registries/azureml/models/model-3/versions/1", + ProviderType = common.ProviderType, + Version = common.Version, + ModelType = common.ModelType, + PromptTemplate = common.PromptTemplate, + Publisher = common.Publisher, + Task = common.Task, + FileSizeMb = common.FileSizeMb, + ModelSettings = common.ModelSettings, + SupportsToolCalling = common.SupportsToolCalling, + License = common.License, + LicenseDescription = common.LicenseDescription, + MaxOutputTokens = common.MaxOutputTokens, + MinFLVersion = common.MinFLVersion + }); + } + + list.AddRange(new[] + { + new ModelInfo + { + Id = "model-3-generic-gpu:1", + Name = "model-3-generic-gpu", + DisplayName = "model-3-generic-gpu", + Uri = "azureml://registries/azureml/models/model-3-generic-gpu/versions/1", + Runtime = new Runtime { DeviceType = DeviceType.GPU, ExecutionProvider = "WebGpuExecutionProvider" }, + Alias = "model-3", + //ParentModelUri = "azureml://registries/azureml/models/model-3/versions/1", + ProviderType = common.ProviderType, + Version = common.Version, ModelType = common.ModelType, + PromptTemplate = common.PromptTemplate, + Publisher = common.Publisher, Task = common.Task, + FileSizeMb = common.FileSizeMb, + ModelSettings = common.ModelSettings, + SupportsToolCalling = common.SupportsToolCalling, + License = common.License, + LicenseDescription = common.LicenseDescription, + MaxOutputTokens = common.MaxOutputTokens, + MinFLVersion = common.MinFLVersion + }, + new ModelInfo + { + Id = "model-3-generic-cpu:1", + Name = "model-3-generic-cpu", + DisplayName = "model-3-generic-cpu", + Uri = "azureml://registries/azureml/models/model-3-generic-cpu/versions/1", + Runtime = new Runtime { DeviceType = DeviceType.CPU, ExecutionProvider = "CPUExecutionProvider" }, + Alias = "model-3", + //ParentModelUri = "azureml://registries/azureml/models/model-3/versions/1", + ProviderType = common.ProviderType, + Version = common.Version, + ModelType = common.ModelType, + PromptTemplate = common.PromptTemplate, + Publisher = common.Publisher, Task = common.Task, + FileSizeMb = common.FileSizeMb, + ModelSettings = common.ModelSettings, + SupportsToolCalling = common.SupportsToolCalling, + License = common.License, + LicenseDescription = common.LicenseDescription, + MaxOutputTokens = common.MaxOutputTokens, + MinFLVersion = common.MinFLVersion + } + }); + + // model-4 generic-gpu (nullable prompt) + list.Add(new ModelInfo + { + Id = "model-4-generic-gpu:1", + Name = "model-4-generic-gpu", + DisplayName = "model-4-generic-gpu", + Uri = "azureml://registries/azureml/models/model-4-generic-gpu/versions/1", + Runtime = new Runtime { DeviceType = DeviceType.GPU, ExecutionProvider = "WebGpuExecutionProvider" }, + Alias = "model-4", + //ParentModelUri = "azureml://registries/azureml/models/model-4/versions/1", + ProviderType = common.ProviderType, + Version = common.Version, + ModelType = common.ModelType, + PromptTemplate = null, + Publisher = common.Publisher, + Task = common.Task, + FileSizeMb = common.FileSizeMb, + ModelSettings = common.ModelSettings, + SupportsToolCalling = common.SupportsToolCalling, + License = common.License, + LicenseDescription = common.LicenseDescription, + MaxOutputTokens = common.MaxOutputTokens, + MinFLVersion = common.MinFLVersion + }); + + return list; + } + + private static string GetSourceFilePath([CallerFilePath] string path = "") => path; + + // Gets the root directory of the foundry-local-sdk repository by finding the .git directory. + private static string GetRepoRoot() + { + var sourceFile = GetSourceFilePath(); + var dir = new DirectoryInfo(Path.GetDirectoryName(sourceFile)!); + + while (dir != null) + { + if (Directory.Exists(Path.Combine(dir.FullName, ".git"))) + return dir.FullName; + + dir = dir.Parent; + } + + throw new InvalidOperationException("Could not find git repository root from test file location"); + } +} diff --git a/sdk_v2/cs/test/FoundryLocal.Tests/appsettings.Test.json b/sdk_v2/cs/test/FoundryLocal.Tests/appsettings.Test.json new file mode 100644 index 0000000..d42d878 --- /dev/null +++ b/sdk_v2/cs/test/FoundryLocal.Tests/appsettings.Test.json @@ -0,0 +1,3 @@ +{ + "TestModelCacheDirName": "test-data-shared" +} diff --git a/sdk_v2/cs/test/FoundryLocal.Tests/testdata/Recording.mp3 b/sdk_v2/cs/test/FoundryLocal.Tests/testdata/Recording.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..deb38418bf5fde82fe380add4a999d513baa9536 GIT binary patch literal 329760 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μ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�Q|YFSfeVf->2k1hT0T>*2uc(r(94;W0E%@Q_l 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%0A? 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 Ie_=TOFVfIJ*Z=?k literal 0 HcmV?d00001 diff --git a/sdk_v2/js/LICENSE.txt b/sdk_v2/js/LICENSE.txt new file mode 100644 index 0000000..48bc6bb --- /dev/null +++ b/sdk_v2/js/LICENSE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Microsoft Corporation + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/sdk_v2/js/README.md b/sdk_v2/js/README.md new file mode 100644 index 0000000..819f1c1 --- /dev/null +++ b/sdk_v2/js/README.md @@ -0,0 +1,98 @@ +# Foundry Local JS SDK + +The Foundry Local JS SDK provides a JavaScript/TypeScript interface for interacting with local AI models via the Foundry Local Core. It allows you to discover, download, load, and run inference on models directly on your local machine. + +## Installation + +To install the SDK, run the following command in your project directory: + +```bash +npm install foundry-local-js-sdk +``` + +*Note: Ensure you have the necessary native dependencies configured as per the main repository instructions.* + +## Usage + +### Initialization + +Initialize the `FoundryLocalManager` with your configuration. + +```typescript +import { FoundryLocalManager } from 'foundry-local-js-sdk'; + +const manager = FoundryLocalManager.create({ + libraryPath: '/path/to/core/library', + modelCacheDir: '/path/to/model/cache', + logLevel: 'info' +}); +``` + +### Discovering Models + +Use the `Catalog` to list available models. + +```typescript +const catalog = manager.catalog; +const models = catalog.models; + +models.forEach(model => { + console.log(`Model: ${model.alias}`); +}); +``` + +### Loading and Running a Model + +```typescript +const model = catalog.getModel('phi-3-mini'); + +if (model) { + await model.load(); + + const chatClient = model.createChatClient(); + const response = await chatClient.completeChat([ + { role: 'user', content: 'Hello, how are you?' } + ]); + + console.log(response.choices[0].message.content); + + await model.unload(); +} +``` + +## Documentation + +The SDK source code is documented using TSDoc. You can generate the API documentation using TypeDoc. + +### Generating Docs + +Run the following command to generate the HTML documentation in the `docs` folder: + +```bash +npm run docs +``` + +Open `docs/index.html` in your browser to view the documentation. + +## Running Tests + +To run the tests, use: + +```bash +npm test +``` + +See `test/README.md` for more details on setting up and running tests. + +## Running Examples + +The SDK includes an example script demonstrating chat completion. To run it: + +1. Ensure you have the necessary core libraries and a model available (see Tests Prerequisites). +2. Run the example command: + +```bash +npm run example +``` + +This will execute `examples/chat-completion.ts`. diff --git a/sdk_v2/js/docs/.nojekyll b/sdk_v2/js/docs/.nojekyll new file mode 100644 index 0000000..e2ac661 --- /dev/null +++ b/sdk_v2/js/docs/.nojekyll @@ -0,0 +1 @@ +TypeDoc added this file to prevent GitHub Pages from using Jekyll. You can turn off this behavior by setting the `githubPages` option to false. \ No newline at end of file diff --git a/sdk_v2/js/docs/assets/hierarchy.js b/sdk_v2/js/docs/assets/hierarchy.js new file mode 100644 index 0000000..d273811 --- /dev/null +++ b/sdk_v2/js/docs/assets/hierarchy.js @@ -0,0 +1 @@ +window.hierarchyData = "eJyNjrsOwiAYhd/lzNSWXojhDRxcXZoOpNCUSCEBnBre3VAvUQd1+Yfzf+eywjsXA3hP22Yg8Goyaoza2QC+gnX5WrEocBydVAYEZ20lOK33BBdvwDEaEYIK5Qbs5rhkahPBEYMssqO4CYmAVuwz9SS8Fjb+DL9zf3S0zUvH4X163bFHurZR+UmMKpSH7/OfZH7O2kivLHjPOkIrNqSUrtvQavw=" \ No newline at end of file diff --git a/sdk_v2/js/docs/assets/highlight.css b/sdk_v2/js/docs/assets/highlight.css new file mode 100644 index 0000000..9f769d7 --- /dev/null +++ b/sdk_v2/js/docs/assets/highlight.css @@ -0,0 +1,85 @@ +:root { + --light-hl-0: #795E26; + --dark-hl-0: #DCDCAA; + --light-hl-1: #000000; + --dark-hl-1: #D4D4D4; + --light-hl-2: #A31515; + --dark-hl-2: #CE9178; + --light-hl-3: #AF00DB; + --dark-hl-3: #C586C0; + --light-hl-4: #001080; + --dark-hl-4: #9CDCFE; + --light-hl-5: #0000FF; + --dark-hl-5: #569CD6; + --light-hl-6: #0070C1; + --dark-hl-6: #4FC1FF; + --light-hl-7: #000000FF; + --dark-hl-7: #D4D4D4; + --light-hl-8: #098658; + --dark-hl-8: #B5CEA8; + --light-code-background: #FFFFFF; + --dark-code-background: #1E1E1E; +} + +@media (prefers-color-scheme: light) { :root { + --hl-0: var(--light-hl-0); + --hl-1: var(--light-hl-1); + --hl-2: var(--light-hl-2); + --hl-3: var(--light-hl-3); + --hl-4: var(--light-hl-4); + --hl-5: var(--light-hl-5); + --hl-6: var(--light-hl-6); + --hl-7: var(--light-hl-7); + --hl-8: var(--light-hl-8); + --code-background: var(--light-code-background); +} } + +@media (prefers-color-scheme: dark) { :root { + --hl-0: var(--dark-hl-0); + --hl-1: var(--dark-hl-1); + --hl-2: var(--dark-hl-2); + --hl-3: var(--dark-hl-3); + --hl-4: var(--dark-hl-4); + --hl-5: var(--dark-hl-5); + --hl-6: var(--dark-hl-6); + --hl-7: var(--dark-hl-7); + --hl-8: var(--dark-hl-8); + --code-background: var(--dark-code-background); +} } + +:root[data-theme='light'] { + --hl-0: var(--light-hl-0); + --hl-1: var(--light-hl-1); + --hl-2: var(--light-hl-2); + --hl-3: var(--light-hl-3); + --hl-4: var(--light-hl-4); + --hl-5: var(--light-hl-5); + --hl-6: var(--light-hl-6); + --hl-7: var(--light-hl-7); + --hl-8: var(--light-hl-8); + --code-background: var(--light-code-background); +} + +:root[data-theme='dark'] { + --hl-0: var(--dark-hl-0); + --hl-1: var(--dark-hl-1); + --hl-2: var(--dark-hl-2); + --hl-3: var(--dark-hl-3); + --hl-4: var(--dark-hl-4); + --hl-5: var(--dark-hl-5); + --hl-6: var(--dark-hl-6); + --hl-7: var(--dark-hl-7); + --hl-8: var(--dark-hl-8); + --code-background: var(--dark-code-background); +} + +.hl-0 { color: var(--hl-0); } +.hl-1 { color: var(--hl-1); } +.hl-2 { color: var(--hl-2); } +.hl-3 { color: var(--hl-3); } +.hl-4 { color: var(--hl-4); } +.hl-5 { color: var(--hl-5); } +.hl-6 { color: var(--hl-6); } +.hl-7 { color: var(--hl-7); } +.hl-8 { color: var(--hl-8); } +pre, code { background: var(--code-background); } diff --git a/sdk_v2/js/docs/assets/icons.js b/sdk_v2/js/docs/assets/icons.js new file mode 100644 index 0000000..58882d7 --- /dev/null +++ b/sdk_v2/js/docs/assets/icons.js @@ -0,0 +1,18 @@ +(function() { + addIcons(); + function addIcons() { + if (document.readyState === "loading") return document.addEventListener("DOMContentLoaded", addIcons); + const svg = document.body.appendChild(document.createElementNS("http://www.w3.org/2000/svg", "svg")); + svg.innerHTML = `MMNEPVFCICPMFPCPTTAAATR`; + svg.style.display = "none"; + if (location.protocol === "file:") updateUseElements(); + } + + function updateUseElements() { + document.querySelectorAll("use").forEach(el => { + if (el.getAttribute("href").includes("#icon-")) { + el.setAttribute("href", el.getAttribute("href").replace(/.*#/, "#")); + } + }); + } +})() \ No newline at end of file diff --git a/sdk_v2/js/docs/assets/icons.svg b/sdk_v2/js/docs/assets/icons.svg new file mode 100644 index 0000000..50ad579 --- /dev/null +++ b/sdk_v2/js/docs/assets/icons.svg @@ -0,0 +1 @@ +MMNEPVFCICPMFPCPTTAAATR \ No newline at end of file diff --git a/sdk_v2/js/docs/assets/main.js b/sdk_v2/js/docs/assets/main.js new file mode 100644 index 0000000..64b80ab --- /dev/null +++ b/sdk_v2/js/docs/assets/main.js @@ -0,0 +1,60 @@ +"use strict"; +window.translations={"copy":"Copy","copied":"Copied!","normally_hidden":"This member is normally hidden due to your filter settings.","hierarchy_expand":"Expand","hierarchy_collapse":"Collapse","folder":"Folder","search_index_not_available":"The search index is not available","search_no_results_found_for_0":"No results found for {0}","kind_1":"Project","kind_2":"Module","kind_4":"Namespace","kind_8":"Enumeration","kind_16":"Enumeration Member","kind_32":"Variable","kind_64":"Function","kind_128":"Class","kind_256":"Interface","kind_512":"Constructor","kind_1024":"Property","kind_2048":"Method","kind_4096":"Call Signature","kind_8192":"Index Signature","kind_16384":"Constructor Signature","kind_32768":"Parameter","kind_65536":"Type Literal","kind_131072":"Type Parameter","kind_262144":"Accessor","kind_524288":"Get Signature","kind_1048576":"Set Signature","kind_2097152":"Type Alias","kind_4194304":"Reference","kind_8388608":"Document"}; +"use strict";(()=>{var Ke=Object.create;var he=Object.defineProperty;var Ge=Object.getOwnPropertyDescriptor;var Ze=Object.getOwnPropertyNames;var Xe=Object.getPrototypeOf,Ye=Object.prototype.hasOwnProperty;var et=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var tt=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Ze(e))!Ye.call(t,i)&&i!==n&&he(t,i,{get:()=>e[i],enumerable:!(r=Ge(e,i))||r.enumerable});return t};var nt=(t,e,n)=>(n=t!=null?Ke(Xe(t)):{},tt(e||!t||!t.__esModule?he(n,"default",{value:t,enumerable:!0}):n,t));var ye=et((me,ge)=>{(function(){var t=function(e){var n=new t.Builder;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),n.searchPipeline.add(t.stemmer),e.call(n,n),n.build()};t.version="2.3.9";t.utils={},t.utils.warn=(function(e){return function(n){e.console&&console.warn&&console.warn(n)}})(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var n=Object.create(null),r=Object.keys(e),i=0;i0){var d=t.utils.clone(n)||{};d.position=[a,l],d.index=s.length,s.push(new t.Token(r.slice(a,o),d))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. +`,e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(r){var i=t.Pipeline.registeredFunctions[r];if(i)n.add(i);else throw new Error("Cannot load unregistered function: "+r)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(n){t.Pipeline.warnIfFunctionNotRegistered(n),this._stack.push(n)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");r=r+1,this._stack.splice(r,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");this._stack.splice(r,0,n)},t.Pipeline.prototype.remove=function(e){var n=this._stack.indexOf(e);n!=-1&&this._stack.splice(n,1)},t.Pipeline.prototype.run=function(e){for(var n=this._stack.length,r=0;r1&&(oe&&(r=s),o!=e);)i=r-n,s=n+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(oc?d+=2:a==c&&(n+=r[l+1]*i[d+1],l+=2,d+=2);return n},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),n=1,r=0;n0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var c=s.node.edges["*"];else{var c=new t.TokenSet;s.node.edges["*"]=c}if(s.str.length==0&&(c.final=!0),i.push({node:c,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}s.str.length==1&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var d=s.str.charAt(0),f=s.str.charAt(1),p;f in s.node.edges?p=s.node.edges[f]:(p=new t.TokenSet,s.node.edges[f]=p),s.str.length==1&&(p.final=!0),i.push({node:p,editsRemaining:s.editsRemaining-1,str:d+s.str.slice(2)})}}}return r},t.TokenSet.fromString=function(e){for(var n=new t.TokenSet,r=n,i=0,s=e.length;i=e;n--){var r=this.uncheckedNodes[n],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(n){var r=new t.QueryParser(e,n);r.parse()})},t.Index.prototype.query=function(e){for(var n=new t.Query(this.fields),r=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),c=0;c1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,n){var r=e[this._ref],i=Object.keys(this._fields);this._documents[r]=n||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,n;do e=this.next(),n=e.charCodeAt(0);while(n>47&&n<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var n=e.next();if(n==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(n.charCodeAt(0)==92){e.escapeCharacter();continue}if(n==":")return t.QueryLexer.lexField;if(n=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(n=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(n=="+"&&e.width()===1||n=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(n.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,n){this.lexer=new t.QueryLexer(e),this.query=n,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var n=e.peekLexeme();if(n!=null)switch(n.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+n.type;throw n.str.length>=1&&(r+=" with value '"+n.str+"'"),new t.QueryParseError(r,n.start,n.end)}},t.QueryParser.parsePresence=function(e){var n=e.consumeLexeme();if(n!=null){switch(n.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+n.str+"'";throw new t.QueryParseError(r,n.start,n.end)}var i=e.peekLexeme();if(i==null){var r="expecting term or field, found nothing";throw new t.QueryParseError(r,n.start,n.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(r,i.start,i.end)}}},t.QueryParser.parseField=function(e){var n=e.consumeLexeme();if(n!=null){if(e.query.allFields.indexOf(n.str)==-1){var r=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+n.str+"', possible fields: "+r;throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.fields=[n.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,n.start,n.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var n=e.consumeLexeme();if(n!=null){e.currentClause.term=n.str.toLowerCase(),n.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(r==null){e.nextClause();return}switch(r.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+r.type+"'";throw new t.QueryParseError(i,r.start,r.end)}}},t.QueryParser.parseEditDistance=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="edit distance must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.editDistance=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="boost must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.boost=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},(function(e,n){typeof define=="function"&&define.amd?define(n):typeof me=="object"?ge.exports=n():e.lunr=n()})(this,function(){return t})})()});var M,G={getItem(){return null},setItem(){}},K;try{K=localStorage,M=K}catch{K=G,M=G}var S={getItem:t=>M.getItem(t),setItem:(t,e)=>M.setItem(t,e),disableWritingLocalStorage(){M=G},disable(){localStorage.clear(),M=G},enable(){M=K}};window.TypeDoc||={disableWritingLocalStorage(){S.disableWritingLocalStorage()},disableLocalStorage:()=>{S.disable()},enableLocalStorage:()=>{S.enable()}};window.translations||={copy:"Copy",copied:"Copied!",normally_hidden:"This member is normally hidden due to your filter settings.",hierarchy_expand:"Expand",hierarchy_collapse:"Collapse",search_index_not_available:"The search index is not available",search_no_results_found_for_0:"No results found for {0}",folder:"Folder",kind_1:"Project",kind_2:"Module",kind_4:"Namespace",kind_8:"Enumeration",kind_16:"Enumeration Member",kind_32:"Variable",kind_64:"Function",kind_128:"Class",kind_256:"Interface",kind_512:"Constructor",kind_1024:"Property",kind_2048:"Method",kind_4096:"Call Signature",kind_8192:"Index Signature",kind_16384:"Constructor Signature",kind_32768:"Parameter",kind_65536:"Type Literal",kind_131072:"Type Parameter",kind_262144:"Accessor",kind_524288:"Get Signature",kind_1048576:"Set Signature",kind_2097152:"Type Alias",kind_4194304:"Reference",kind_8388608:"Document"};var pe=[];function X(t,e){pe.push({selector:e,constructor:t})}var Z=class{alwaysVisibleMember=null;constructor(){this.createComponents(document.body),this.ensureFocusedElementVisible(),this.listenForCodeCopies(),window.addEventListener("hashchange",()=>this.ensureFocusedElementVisible()),document.body.style.display||(this.ensureFocusedElementVisible(),this.updateIndexVisibility(),this.scrollToHash())}createComponents(e){pe.forEach(n=>{e.querySelectorAll(n.selector).forEach(r=>{r.dataset.hasInstance||(new n.constructor({el:r,app:this}),r.dataset.hasInstance=String(!0))})})}filterChanged(){this.ensureFocusedElementVisible()}showPage(){document.body.style.display&&(document.body.style.removeProperty("display"),this.ensureFocusedElementVisible(),this.updateIndexVisibility(),this.scrollToHash())}scrollToHash(){if(location.hash){let e=document.getElementById(location.hash.substring(1));if(!e)return;e.scrollIntoView({behavior:"instant",block:"start"})}}ensureActivePageVisible(){let e=document.querySelector(".tsd-navigation .current"),n=e?.parentElement;for(;n&&!n.classList.contains(".tsd-navigation");)n instanceof HTMLDetailsElement&&(n.open=!0),n=n.parentElement;if(e&&!rt(e)){let r=e.getBoundingClientRect().top-document.documentElement.clientHeight/4;document.querySelector(".site-menu").scrollTop=r,document.querySelector(".col-sidebar").scrollTop=r}}updateIndexVisibility(){let e=document.querySelector(".tsd-index-content"),n=e?.open;e&&(e.open=!0),document.querySelectorAll(".tsd-index-section").forEach(r=>{r.style.display="block";let i=Array.from(r.querySelectorAll(".tsd-index-link")).every(s=>s.offsetParent==null);r.style.display=i?"none":"block"}),e&&(e.open=n)}ensureFocusedElementVisible(){if(this.alwaysVisibleMember&&(this.alwaysVisibleMember.classList.remove("always-visible"),this.alwaysVisibleMember.firstElementChild.remove(),this.alwaysVisibleMember=null),!location.hash)return;let e=document.getElementById(location.hash.substring(1));if(!e)return;let n=e.parentElement;for(;n&&n.tagName!=="SECTION";)n=n.parentElement;if(!n)return;let r=n.offsetParent==null,i=n;for(;i!==document.body;)i instanceof HTMLDetailsElement&&(i.open=!0),i=i.parentElement;if(n.offsetParent==null){this.alwaysVisibleMember=n,n.classList.add("always-visible");let s=document.createElement("p");s.classList.add("warning"),s.textContent=window.translations.normally_hidden,n.prepend(s)}r&&e.scrollIntoView()}listenForCodeCopies(){document.querySelectorAll("pre > button").forEach(e=>{let n;e.addEventListener("click",()=>{e.previousElementSibling instanceof HTMLElement&&navigator.clipboard.writeText(e.previousElementSibling.innerText.trim()),e.textContent=window.translations.copied,e.classList.add("visible"),clearTimeout(n),n=setTimeout(()=>{e.classList.remove("visible"),n=setTimeout(()=>{e.textContent=window.translations.copy},100)},1e3)})})}};function rt(t){let e=t.getBoundingClientRect(),n=Math.max(document.documentElement.clientHeight,window.innerHeight);return!(e.bottom<0||e.top-n>=0)}var fe=(t,e=100)=>{let n;return()=>{clearTimeout(n),n=setTimeout(()=>t(),e)}};var Ie=nt(ye(),1);async function R(t){let e=Uint8Array.from(atob(t),s=>s.charCodeAt(0)),r=new Blob([e]).stream().pipeThrough(new DecompressionStream("deflate")),i=await new Response(r).text();return JSON.parse(i)}var Y="closing",ae="tsd-overlay";function it(){let t=Math.abs(window.innerWidth-document.documentElement.clientWidth);document.body.style.overflow="hidden",document.body.style.paddingRight=`${t}px`}function st(){document.body.style.removeProperty("overflow"),document.body.style.removeProperty("padding-right")}function xe(t,e){t.addEventListener("animationend",()=>{t.classList.contains(Y)&&(t.classList.remove(Y),document.getElementById(ae)?.remove(),t.close(),st())}),t.addEventListener("cancel",n=>{n.preventDefault(),ve(t)}),e?.closeOnClick&&document.addEventListener("click",n=>{t.open&&!t.contains(n.target)&&ve(t)},!0)}function Ee(t){if(t.open)return;let e=document.createElement("div");e.id=ae,document.body.appendChild(e),t.showModal(),it()}function ve(t){if(!t.open)return;document.getElementById(ae)?.classList.add(Y),t.classList.add(Y)}var I=class{el;app;constructor(e){this.el=e.el,this.app=e.app}};var be=document.head.appendChild(document.createElement("style"));be.dataset.for="filters";var le={};function we(t){for(let e of t.split(/\s+/))if(le.hasOwnProperty(e)&&!le[e])return!0;return!1}var ee=class extends I{key;value;constructor(e){super(e),this.key=`filter-${this.el.name}`,this.value=this.el.checked,this.el.addEventListener("change",()=>{this.setLocalStorage(this.el.checked)}),this.setLocalStorage(this.fromLocalStorage()),be.innerHTML+=`html:not(.${this.key}) .tsd-is-${this.el.name} { display: none; } +`,this.app.updateIndexVisibility()}fromLocalStorage(){let e=S.getItem(this.key);return e?e==="true":this.el.checked}setLocalStorage(e){S.setItem(this.key,e.toString()),this.value=e,this.handleValueChange()}handleValueChange(){this.el.checked=this.value,document.documentElement.classList.toggle(this.key,this.value),le[`tsd-is-${this.el.name}`]=this.value,this.app.filterChanged(),this.app.updateIndexVisibility()}};var Le=0;async function Se(t,e){if(!window.searchData)return;let n=await R(window.searchData);t.data=n,t.index=Ie.Index.load(n.index),e.innerHTML=""}function _e(){let t=document.getElementById("tsd-search-trigger"),e=document.getElementById("tsd-search"),n=document.getElementById("tsd-search-input"),r=document.getElementById("tsd-search-results"),i=document.getElementById("tsd-search-script"),s=document.getElementById("tsd-search-status");if(!(t&&e&&n&&r&&i&&s))throw new Error("Search controls missing");let o={base:document.documentElement.dataset.base};o.base.endsWith("/")||(o.base+="/"),i.addEventListener("error",()=>{let a=window.translations.search_index_not_available;Pe(s,a)}),i.addEventListener("load",()=>{Se(o,s)}),Se(o,s),ot({trigger:t,searchEl:e,results:r,field:n,status:s},o)}function ot(t,e){let{field:n,results:r,searchEl:i,status:s,trigger:o}=t;xe(i,{closeOnClick:!0});function a(){Ee(i),n.setSelectionRange(0,n.value.length)}o.addEventListener("click",a),n.addEventListener("input",fe(()=>{at(r,n,s,e)},200)),n.addEventListener("keydown",l=>{if(r.childElementCount===0||l.ctrlKey||l.metaKey||l.altKey)return;let d=n.getAttribute("aria-activedescendant"),f=d?document.getElementById(d):null;if(f){let p=!1,v=!1;switch(l.key){case"Home":case"End":case"ArrowLeft":case"ArrowRight":v=!0;break;case"ArrowDown":case"ArrowUp":p=l.shiftKey;break}(p||v)&&ke(n)}if(!l.shiftKey)switch(l.key){case"Enter":f?.querySelector("a")?.click();break;case"ArrowUp":Te(r,n,f,-1),l.preventDefault();break;case"ArrowDown":Te(r,n,f,1),l.preventDefault();break}});function c(){ke(n)}n.addEventListener("change",c),n.addEventListener("blur",c),n.addEventListener("click",c),document.body.addEventListener("keydown",l=>{if(l.altKey||l.metaKey||l.shiftKey)return;let d=l.ctrlKey&&l.key==="k",f=!l.ctrlKey&&!ut()&&l.key==="/";(d||f)&&(l.preventDefault(),a())})}function at(t,e,n,r){if(!r.index||!r.data)return;t.innerHTML="",n.innerHTML="",Le+=1;let i=e.value.trim(),s;if(i){let a=i.split(" ").map(c=>c.length?`*${c}*`:"").join(" ");s=r.index.search(a).filter(({ref:c})=>{let l=r.data.rows[Number(c)].classes;return!l||!we(l)})}else s=[];if(s.length===0&&i){let a=window.translations.search_no_results_found_for_0.replace("{0}",` "${te(i)}" `);Pe(n,a);return}for(let a=0;ac.score-a.score);let o=Math.min(10,s.length);for(let a=0;a`,f=Ce(c.name,i);globalThis.DEBUG_SEARCH_WEIGHTS&&(f+=` (score: ${s[a].score.toFixed(2)})`),c.parent&&(f=` + ${Ce(c.parent,i)}.${f}`);let p=document.createElement("li");p.id=`tsd-search:${Le}-${a}`,p.role="option",p.ariaSelected="false",p.classList.value=c.classes??"";let v=document.createElement("a");v.tabIndex=-1,v.href=r.base+c.url,v.innerHTML=d+`${f}`,p.append(v),t.appendChild(p)}}function Te(t,e,n,r){let i;if(r===1?i=n?.nextElementSibling||t.firstElementChild:i=n?.previousElementSibling||t.lastElementChild,i!==n){if(!i||i.role!=="option"){console.error("Option missing");return}i.ariaSelected="true",i.scrollIntoView({behavior:"smooth",block:"nearest"}),e.setAttribute("aria-activedescendant",i.id),n?.setAttribute("aria-selected","false")}}function ke(t){let e=t.getAttribute("aria-activedescendant");(e?document.getElementById(e):null)?.setAttribute("aria-selected","false"),t.setAttribute("aria-activedescendant","")}function Ce(t,e){if(e==="")return t;let n=t.toLocaleLowerCase(),r=e.toLocaleLowerCase(),i=[],s=0,o=n.indexOf(r);for(;o!=-1;)i.push(te(t.substring(s,o)),`${te(t.substring(o,o+r.length))}`),s=o+r.length,o=n.indexOf(r,s);return i.push(te(t.substring(s))),i.join("")}var lt={"&":"&","<":"<",">":">","'":"'",'"':"""};function te(t){return t.replace(/[&<>"'"]/g,e=>lt[e])}function Pe(t,e){t.innerHTML=e?`

`:""}var ct=["button","checkbox","file","hidden","image","radio","range","reset","submit"];function ut(){let t=document.activeElement;return t?t.isContentEditable||t.tagName==="TEXTAREA"||t.tagName==="SEARCH"?!0:t.tagName==="INPUT"&&!ct.includes(t.type):!1}var D="mousedown",Me="mousemove",$="mouseup",ne={x:0,y:0},Qe=!1,ce=!1,dt=!1,F=!1,Oe=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(Oe?"is-mobile":"not-mobile");Oe&&"ontouchstart"in document.documentElement&&(dt=!0,D="touchstart",Me="touchmove",$="touchend");document.addEventListener(D,t=>{ce=!0,F=!1;let e=D=="touchstart"?t.targetTouches[0]:t;ne.y=e.pageY||0,ne.x=e.pageX||0});document.addEventListener(Me,t=>{if(ce&&!F){let e=D=="touchstart"?t.targetTouches[0]:t,n=ne.x-(e.pageX||0),r=ne.y-(e.pageY||0);F=Math.sqrt(n*n+r*r)>10}});document.addEventListener($,()=>{ce=!1});document.addEventListener("click",t=>{Qe&&(t.preventDefault(),t.stopImmediatePropagation(),Qe=!1)});var re=class extends I{active;className;constructor(e){super(e),this.className=this.el.dataset.toggle||"",this.el.addEventListener($,n=>this.onPointerUp(n)),this.el.addEventListener("click",n=>n.preventDefault()),document.addEventListener(D,n=>this.onDocumentPointerDown(n)),document.addEventListener($,n=>this.onDocumentPointerUp(n))}setActive(e){if(this.active==e)return;this.active=e,document.documentElement.classList.toggle("has-"+this.className,e),this.el.classList.toggle("active",e);let n=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(n),setTimeout(()=>document.documentElement.classList.remove(n),500)}onPointerUp(e){F||(this.setActive(!0),e.preventDefault())}onDocumentPointerDown(e){if(this.active){if(e.target.closest(".col-sidebar, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(e){if(!F&&this.active&&e.target.closest(".col-sidebar")){let n=e.target.closest("a");if(n){let r=window.location.href;r.indexOf("#")!=-1&&(r=r.substring(0,r.indexOf("#"))),n.href.substring(0,r.length)==r&&setTimeout(()=>this.setActive(!1),250)}}}};var ue=new Map,de=class{open;accordions=[];key;constructor(e,n){this.key=e,this.open=n}add(e){this.accordions.push(e),e.open=this.open,e.addEventListener("toggle",()=>{this.toggle(e.open)})}toggle(e){for(let n of this.accordions)n.open=e;S.setItem(this.key,e.toString())}},ie=class extends I{constructor(e){super(e);let n=this.el.querySelector("summary"),r=n.querySelector("a");r&&r.addEventListener("click",()=>{location.assign(r.href)});let i=`tsd-accordion-${n.dataset.key??n.textContent.trim().replace(/\s+/g,"-").toLowerCase()}`,s;if(ue.has(i))s=ue.get(i);else{let o=S.getItem(i),a=o?o==="true":this.el.open;s=new de(i,a),ue.set(i,s)}s.add(this.el)}};function He(t){let e=S.getItem("tsd-theme")||"os";t.value=e,Ae(e),t.addEventListener("change",()=>{S.setItem("tsd-theme",t.value),Ae(t.value)})}function Ae(t){document.documentElement.dataset.theme=t}var se;function Ne(){let t=document.getElementById("tsd-nav-script");t&&(t.addEventListener("load",Re),Re())}async function Re(){let t=document.getElementById("tsd-nav-container");if(!t||!window.navigationData)return;let e=await R(window.navigationData);se=document.documentElement.dataset.base,se.endsWith("/")||(se+="/"),t.innerHTML="";for(let n of e)Be(n,t,[]);window.app.createComponents(t),window.app.showPage(),window.app.ensureActivePageVisible()}function Be(t,e,n){let r=e.appendChild(document.createElement("li"));if(t.children){let i=[...n,t.text],s=r.appendChild(document.createElement("details"));s.className=t.class?`${t.class} tsd-accordion`:"tsd-accordion";let o=s.appendChild(document.createElement("summary"));o.className="tsd-accordion-summary",o.dataset.key=i.join("$"),o.innerHTML='',De(t,o);let a=s.appendChild(document.createElement("div"));a.className="tsd-accordion-details";let c=a.appendChild(document.createElement("ul"));c.className="tsd-nested-navigation";for(let l of t.children)Be(l,c,i)}else De(t,r,t.class)}function De(t,e,n){if(t.path){let r=e.appendChild(document.createElement("a"));if(r.href=se+t.path,n&&(r.className=n),location.pathname===r.pathname&&!r.href.includes("#")&&(r.classList.add("current"),r.ariaCurrent="page"),t.kind){let i=window.translations[`kind_${t.kind}`].replaceAll('"',""");r.innerHTML=``}r.appendChild(Fe(t.text,document.createElement("span")))}else{let r=e.appendChild(document.createElement("span")),i=window.translations.folder.replaceAll('"',""");r.innerHTML=``,r.appendChild(Fe(t.text,document.createElement("span")))}}function Fe(t,e){let n=t.split(/(?<=[^A-Z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])|(?<=[_-])(?=[^_-])/);for(let r=0;r{let i=r.target;for(;i.parentElement&&i.parentElement.tagName!="LI";)i=i.parentElement;i.dataset.dropdown&&(i.dataset.dropdown=String(i.dataset.dropdown!=="true"))});let t=new Map,e=new Set;for(let r of document.querySelectorAll(".tsd-full-hierarchy [data-refl]")){let i=r.querySelector("ul");t.has(r.dataset.refl)?e.add(r.dataset.refl):i&&t.set(r.dataset.refl,i)}for(let r of e)n(r);function n(r){let i=t.get(r).cloneNode(!0);i.querySelectorAll("[id]").forEach(s=>{s.removeAttribute("id")}),i.querySelectorAll("[data-dropdown]").forEach(s=>{s.dataset.dropdown="false"});for(let s of document.querySelectorAll(`[data-refl="${r}"]`)){let o=gt(),a=s.querySelector("ul");s.insertBefore(o,a),o.dataset.dropdown=String(!!a),a||s.appendChild(i.cloneNode(!0))}}}function pt(){let t=document.getElementById("tsd-hierarchy-script");t&&(t.addEventListener("load",Ve),Ve())}async function Ve(){let t=document.querySelector(".tsd-panel.tsd-hierarchy:has(h4 a)");if(!t||!window.hierarchyData)return;let e=+t.dataset.refl,n=await R(window.hierarchyData),r=t.querySelector("ul"),i=document.createElement("ul");if(i.classList.add("tsd-hierarchy"),ft(i,n,e),r.querySelectorAll("li").length==i.querySelectorAll("li").length)return;let s=document.createElement("span");s.classList.add("tsd-hierarchy-toggle"),s.textContent=window.translations.hierarchy_expand,t.querySelector("h4 a")?.insertAdjacentElement("afterend",s),s.insertAdjacentText("beforebegin",", "),s.addEventListener("click",()=>{s.textContent===window.translations.hierarchy_expand?(r.insertAdjacentElement("afterend",i),r.remove(),s.textContent=window.translations.hierarchy_collapse):(i.insertAdjacentElement("afterend",r),i.remove(),s.textContent=window.translations.hierarchy_expand)})}function ft(t,e,n){let r=e.roots.filter(i=>mt(e,i,n));for(let i of r)t.appendChild(je(e,i,n))}function je(t,e,n,r=new Set){if(r.has(e))return;r.add(e);let i=t.reflections[e],s=document.createElement("li");if(s.classList.add("tsd-hierarchy-item"),e===n){let o=s.appendChild(document.createElement("span"));o.textContent=i.name,o.classList.add("tsd-hierarchy-target")}else{for(let a of i.uniqueNameParents||[]){let c=t.reflections[a],l=s.appendChild(document.createElement("a"));l.textContent=c.name,l.href=oe+c.url,l.className=c.class+" tsd-signature-type",s.append(document.createTextNode("."))}let o=s.appendChild(document.createElement("a"));o.textContent=t.reflections[e].name,o.href=oe+i.url,o.className=i.class+" tsd-signature-type"}if(i.children){let o=s.appendChild(document.createElement("ul"));o.classList.add("tsd-hierarchy");for(let a of i.children){let c=je(t,a,n,r);c&&o.appendChild(c)}}return r.delete(e),s}function mt(t,e,n){if(e===n)return!0;let r=new Set,i=[t.reflections[e]];for(;i.length;){let s=i.pop();if(!r.has(s)){r.add(s);for(let o of s.children||[]){if(o===n)return!0;i.push(t.reflections[o])}}}return!1}function gt(){let t=document.createElementNS("http://www.w3.org/2000/svg","svg");return t.setAttribute("width","20"),t.setAttribute("height","20"),t.setAttribute("viewBox","0 0 24 24"),t.setAttribute("fill","none"),t.innerHTML='',t}X(re,"a[data-toggle]");X(ie,".tsd-accordion");X(ee,".tsd-filter-item input[type=checkbox]");var qe=document.getElementById("tsd-theme");qe&&He(qe);var yt=new Z;Object.defineProperty(window,"app",{value:yt});_e();Ne();$e();"virtualKeyboard"in navigator&&(navigator.virtualKeyboard.overlaysContent=!0);})(); +/*! Bundled license information: + +lunr/lunr.js: + (** + * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9 + * Copyright (C) 2020 Oliver Nightingale + * @license MIT + *) + (*! + * lunr.utils + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.Set + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.tokenizer + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.Pipeline + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.Vector + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.stemmer + * Copyright (C) 2020 Oliver Nightingale + * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt + *) + (*! + * lunr.stopWordFilter + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.trimmer + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.TokenSet + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.Index + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.Builder + * Copyright (C) 2020 Oliver Nightingale + *) +*/ diff --git a/sdk_v2/js/docs/assets/navigation.js b/sdk_v2/js/docs/assets/navigation.js new file mode 100644 index 0000000..e30bbe2 --- /dev/null +++ b/sdk_v2/js/docs/assets/navigation.js @@ -0,0 +1 @@ +window.navigationData = "eJyNkVELgjAUhf/LfZYioQjfQgiEfO0leri4qaO1G/MKRfTfAwubOrXXfed8G2enJ7C8M0Swq4WiWCtpGAK4IZcQQaaxqmS1dOCi5KuGAC7KCIhW4fYVtI4YGTUVw/4XTHZL5LHrf2zKsKfaCPs4UIY6RYOFtEOVJzTlTElIPbQ0x7O9A6EYfUg/MWs7olXoW8el/+4Tk8mV81HKsLQ5Zr2FPrGuNFxvHGnSW8gRJZ6VuuUmkJicvP2WDhXnN2ST6pM=" \ No newline at end of file diff --git a/sdk_v2/js/docs/assets/search.js b/sdk_v2/js/docs/assets/search.js new file mode 100644 index 0000000..f4b184a --- /dev/null +++ b/sdk_v2/js/docs/assets/search.js @@ -0,0 +1 @@ +window.searchData = "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"; \ No newline at end of file diff --git a/sdk_v2/js/docs/assets/style.css b/sdk_v2/js/docs/assets/style.css new file mode 100644 index 0000000..44328e9 --- /dev/null +++ b/sdk_v2/js/docs/assets/style.css @@ -0,0 +1,1633 @@ +@layer typedoc { + :root { + --dim-toolbar-contents-height: 2.5rem; + --dim-toolbar-border-bottom-width: 1px; + --dim-header-height: calc( + var(--dim-toolbar-border-bottom-width) + + var(--dim-toolbar-contents-height) + ); + + /* 0rem For mobile; unit is required for calculation in `calc` */ + --dim-container-main-margin-y: 0rem; + + --dim-footer-height: 3.5rem; + + --modal-animation-duration: 0.2s; + } + + :root { + /* Light */ + --light-color-background: #f2f4f8; + --light-color-background-secondary: #eff0f1; + /* Not to be confused with [:active](https://developer.mozilla.org/en-US/docs/Web/CSS/:active) */ + --light-color-background-active: #d6d8da; + --light-color-background-warning: #e6e600; + --light-color-warning-text: #222; + --light-color-accent: #c5c7c9; + --light-color-active-menu-item: var(--light-color-background-active); + --light-color-text: #222; + --light-color-contrast-text: #000; + --light-color-text-aside: #5e5e5e; + + --light-color-icon-background: var(--light-color-background); + --light-color-icon-text: var(--light-color-text); + + --light-color-comment-tag-text: var(--light-color-text); + --light-color-comment-tag: var(--light-color-background); + + --light-color-link: #1f70c2; + --light-color-focus-outline: #3584e4; + + --light-color-ts-keyword: #056bd6; + --light-color-ts-project: #b111c9; + --light-color-ts-module: var(--light-color-ts-project); + --light-color-ts-namespace: var(--light-color-ts-project); + --light-color-ts-enum: #7e6f15; + --light-color-ts-enum-member: var(--light-color-ts-enum); + --light-color-ts-variable: #4760ec; + --light-color-ts-function: #572be7; + --light-color-ts-class: #1f70c2; + --light-color-ts-interface: #108024; + --light-color-ts-constructor: var(--light-color-ts-class); + --light-color-ts-property: #9f5f30; + --light-color-ts-method: #be3989; + --light-color-ts-reference: #ff4d82; + --light-color-ts-call-signature: var(--light-color-ts-method); + --light-color-ts-index-signature: var(--light-color-ts-property); + --light-color-ts-constructor-signature: var( + --light-color-ts-constructor + ); + --light-color-ts-parameter: var(--light-color-ts-variable); + /* type literal not included as links will never be generated to it */ + --light-color-ts-type-parameter: #a55c0e; + --light-color-ts-accessor: #c73c3c; + --light-color-ts-get-signature: var(--light-color-ts-accessor); + --light-color-ts-set-signature: var(--light-color-ts-accessor); + --light-color-ts-type-alias: #d51270; + /* reference not included as links will be colored with the kind that it points to */ + --light-color-document: #000000; + + --light-color-alert-note: #0969d9; + --light-color-alert-tip: #1a7f37; + --light-color-alert-important: #8250df; + --light-color-alert-warning: #9a6700; + --light-color-alert-caution: #cf222e; + + --light-external-icon: url("data:image/svg+xml;utf8,"); + --light-color-scheme: light; + } + + :root { + /* Dark */ + --dark-color-background: #2b2e33; + --dark-color-background-secondary: #1e2024; + /* Not to be confused with [:active](https://developer.mozilla.org/en-US/docs/Web/CSS/:active) */ + --dark-color-background-active: #5d5d6a; + --dark-color-background-warning: #bebe00; + --dark-color-warning-text: #222; + --dark-color-accent: #9096a2; + --dark-color-active-menu-item: var(--dark-color-background-active); + --dark-color-text: #f5f5f5; + --dark-color-contrast-text: #ffffff; + --dark-color-text-aside: #dddddd; + + --dark-color-icon-background: var(--dark-color-background-secondary); + --dark-color-icon-text: var(--dark-color-text); + + --dark-color-comment-tag-text: var(--dark-color-text); + --dark-color-comment-tag: var(--dark-color-background); + + --dark-color-link: #00aff4; + --dark-color-focus-outline: #4c97f2; + + --dark-color-ts-keyword: #3399ff; + --dark-color-ts-project: #e358ff; + --dark-color-ts-module: var(--dark-color-ts-project); + --dark-color-ts-namespace: var(--dark-color-ts-project); + --dark-color-ts-enum: #f4d93e; + --dark-color-ts-enum-member: var(--dark-color-ts-enum); + --dark-color-ts-variable: #798dff; + --dark-color-ts-function: #a280ff; + --dark-color-ts-class: #8ac4ff; + --dark-color-ts-interface: #6cff87; + --dark-color-ts-constructor: var(--dark-color-ts-class); + --dark-color-ts-property: #ff984d; + --dark-color-ts-method: #ff4db8; + --dark-color-ts-reference: #ff4d82; + --dark-color-ts-call-signature: var(--dark-color-ts-method); + --dark-color-ts-index-signature: var(--dark-color-ts-property); + --dark-color-ts-constructor-signature: var(--dark-color-ts-constructor); + --dark-color-ts-parameter: var(--dark-color-ts-variable); + /* type literal not included as links will never be generated to it */ + --dark-color-ts-type-parameter: #e07d13; + --dark-color-ts-accessor: #ff6060; + --dark-color-ts-get-signature: var(--dark-color-ts-accessor); + --dark-color-ts-set-signature: var(--dark-color-ts-accessor); + --dark-color-ts-type-alias: #ff6492; + /* reference not included as links will be colored with the kind that it points to */ + --dark-color-document: #ffffff; + + --dark-color-alert-note: #0969d9; + --dark-color-alert-tip: #1a7f37; + --dark-color-alert-important: #8250df; + --dark-color-alert-warning: #9a6700; + --dark-color-alert-caution: #cf222e; + + --dark-external-icon: url("data:image/svg+xml;utf8,"); + --dark-color-scheme: dark; + } + + @media (prefers-color-scheme: light) { + :root { + --color-background: var(--light-color-background); + --color-background-secondary: var( + --light-color-background-secondary + ); + --color-background-active: var(--light-color-background-active); + --color-background-warning: var(--light-color-background-warning); + --color-warning-text: var(--light-color-warning-text); + --color-accent: var(--light-color-accent); + --color-active-menu-item: var(--light-color-active-menu-item); + --color-text: var(--light-color-text); + --color-contrast-text: var(--light-color-contrast-text); + --color-text-aside: var(--light-color-text-aside); + + --color-icon-background: var(--light-color-icon-background); + --color-icon-text: var(--light-color-icon-text); + + --color-comment-tag-text: var(--light-color-text); + --color-comment-tag: var(--light-color-background); + + --color-link: var(--light-color-link); + --color-focus-outline: var(--light-color-focus-outline); + + --color-ts-keyword: var(--light-color-ts-keyword); + --color-ts-project: var(--light-color-ts-project); + --color-ts-module: var(--light-color-ts-module); + --color-ts-namespace: var(--light-color-ts-namespace); + --color-ts-enum: var(--light-color-ts-enum); + --color-ts-enum-member: var(--light-color-ts-enum-member); + --color-ts-variable: var(--light-color-ts-variable); + --color-ts-function: var(--light-color-ts-function); + --color-ts-class: var(--light-color-ts-class); + --color-ts-interface: var(--light-color-ts-interface); + --color-ts-constructor: var(--light-color-ts-constructor); + --color-ts-property: var(--light-color-ts-property); + --color-ts-method: var(--light-color-ts-method); + --color-ts-reference: var(--light-color-ts-reference); + --color-ts-call-signature: var(--light-color-ts-call-signature); + --color-ts-index-signature: var(--light-color-ts-index-signature); + --color-ts-constructor-signature: var( + --light-color-ts-constructor-signature + ); + --color-ts-parameter: var(--light-color-ts-parameter); + --color-ts-type-parameter: var(--light-color-ts-type-parameter); + --color-ts-accessor: var(--light-color-ts-accessor); + --color-ts-get-signature: var(--light-color-ts-get-signature); + --color-ts-set-signature: var(--light-color-ts-set-signature); + --color-ts-type-alias: var(--light-color-ts-type-alias); + --color-document: var(--light-color-document); + + --color-alert-note: var(--light-color-alert-note); + --color-alert-tip: var(--light-color-alert-tip); + --color-alert-important: var(--light-color-alert-important); + --color-alert-warning: var(--light-color-alert-warning); + --color-alert-caution: var(--light-color-alert-caution); + + --external-icon: var(--light-external-icon); + --color-scheme: var(--light-color-scheme); + } + } + + @media (prefers-color-scheme: dark) { + :root { + --color-background: var(--dark-color-background); + --color-background-secondary: var( + --dark-color-background-secondary + ); + --color-background-active: var(--dark-color-background-active); + --color-background-warning: var(--dark-color-background-warning); + --color-warning-text: var(--dark-color-warning-text); + --color-accent: var(--dark-color-accent); + --color-active-menu-item: var(--dark-color-active-menu-item); + --color-text: var(--dark-color-text); + --color-contrast-text: var(--dark-color-contrast-text); + --color-text-aside: var(--dark-color-text-aside); + + --color-icon-background: var(--dark-color-icon-background); + --color-icon-text: var(--dark-color-icon-text); + + --color-comment-tag-text: var(--dark-color-text); + --color-comment-tag: var(--dark-color-background); + + --color-link: var(--dark-color-link); + --color-focus-outline: var(--dark-color-focus-outline); + + --color-ts-keyword: var(--dark-color-ts-keyword); + --color-ts-project: var(--dark-color-ts-project); + --color-ts-module: var(--dark-color-ts-module); + --color-ts-namespace: var(--dark-color-ts-namespace); + --color-ts-enum: var(--dark-color-ts-enum); + --color-ts-enum-member: var(--dark-color-ts-enum-member); + --color-ts-variable: var(--dark-color-ts-variable); + --color-ts-function: var(--dark-color-ts-function); + --color-ts-class: var(--dark-color-ts-class); + --color-ts-interface: var(--dark-color-ts-interface); + --color-ts-constructor: var(--dark-color-ts-constructor); + --color-ts-property: var(--dark-color-ts-property); + --color-ts-method: var(--dark-color-ts-method); + --color-ts-reference: var(--dark-color-ts-reference); + --color-ts-call-signature: var(--dark-color-ts-call-signature); + --color-ts-index-signature: var(--dark-color-ts-index-signature); + --color-ts-constructor-signature: var( + --dark-color-ts-constructor-signature + ); + --color-ts-parameter: var(--dark-color-ts-parameter); + --color-ts-type-parameter: var(--dark-color-ts-type-parameter); + --color-ts-accessor: var(--dark-color-ts-accessor); + --color-ts-get-signature: var(--dark-color-ts-get-signature); + --color-ts-set-signature: var(--dark-color-ts-set-signature); + --color-ts-type-alias: var(--dark-color-ts-type-alias); + --color-document: var(--dark-color-document); + + --color-alert-note: var(--dark-color-alert-note); + --color-alert-tip: var(--dark-color-alert-tip); + --color-alert-important: var(--dark-color-alert-important); + --color-alert-warning: var(--dark-color-alert-warning); + --color-alert-caution: var(--dark-color-alert-caution); + + --external-icon: var(--dark-external-icon); + --color-scheme: var(--dark-color-scheme); + } + } + + :root[data-theme="light"] { + --color-background: var(--light-color-background); + --color-background-secondary: var(--light-color-background-secondary); + --color-background-active: var(--light-color-background-active); + --color-background-warning: var(--light-color-background-warning); + --color-warning-text: var(--light-color-warning-text); + --color-icon-background: var(--light-color-icon-background); + --color-accent: var(--light-color-accent); + --color-active-menu-item: var(--light-color-active-menu-item); + --color-text: var(--light-color-text); + --color-contrast-text: var(--light-color-contrast-text); + --color-text-aside: var(--light-color-text-aside); + --color-icon-text: var(--light-color-icon-text); + + --color-comment-tag-text: var(--light-color-text); + --color-comment-tag: var(--light-color-background); + + --color-link: var(--light-color-link); + --color-focus-outline: var(--light-color-focus-outline); + + --color-ts-keyword: var(--light-color-ts-keyword); + --color-ts-project: var(--light-color-ts-project); + --color-ts-module: var(--light-color-ts-module); + --color-ts-namespace: var(--light-color-ts-namespace); + --color-ts-enum: var(--light-color-ts-enum); + --color-ts-enum-member: var(--light-color-ts-enum-member); + --color-ts-variable: var(--light-color-ts-variable); + --color-ts-function: var(--light-color-ts-function); + --color-ts-class: var(--light-color-ts-class); + --color-ts-interface: var(--light-color-ts-interface); + --color-ts-constructor: var(--light-color-ts-constructor); + --color-ts-property: var(--light-color-ts-property); + --color-ts-method: var(--light-color-ts-method); + --color-ts-reference: var(--light-color-ts-reference); + --color-ts-call-signature: var(--light-color-ts-call-signature); + --color-ts-index-signature: var(--light-color-ts-index-signature); + --color-ts-constructor-signature: var( + --light-color-ts-constructor-signature + ); + --color-ts-parameter: var(--light-color-ts-parameter); + --color-ts-type-parameter: var(--light-color-ts-type-parameter); + --color-ts-accessor: var(--light-color-ts-accessor); + --color-ts-get-signature: var(--light-color-ts-get-signature); + --color-ts-set-signature: var(--light-color-ts-set-signature); + --color-ts-type-alias: var(--light-color-ts-type-alias); + --color-document: var(--light-color-document); + + --color-note: var(--light-color-note); + --color-tip: var(--light-color-tip); + --color-important: var(--light-color-important); + --color-warning: var(--light-color-warning); + --color-caution: var(--light-color-caution); + + --external-icon: var(--light-external-icon); + --color-scheme: var(--light-color-scheme); + } + + :root[data-theme="dark"] { + --color-background: var(--dark-color-background); + --color-background-secondary: var(--dark-color-background-secondary); + --color-background-active: var(--dark-color-background-active); + --color-background-warning: var(--dark-color-background-warning); + --color-warning-text: var(--dark-color-warning-text); + --color-icon-background: var(--dark-color-icon-background); + --color-accent: var(--dark-color-accent); + --color-active-menu-item: var(--dark-color-active-menu-item); + --color-text: var(--dark-color-text); + --color-contrast-text: var(--dark-color-contrast-text); + --color-text-aside: var(--dark-color-text-aside); + --color-icon-text: var(--dark-color-icon-text); + + --color-comment-tag-text: var(--dark-color-text); + --color-comment-tag: var(--dark-color-background); + + --color-link: var(--dark-color-link); + --color-focus-outline: var(--dark-color-focus-outline); + + --color-ts-keyword: var(--dark-color-ts-keyword); + --color-ts-project: var(--dark-color-ts-project); + --color-ts-module: var(--dark-color-ts-module); + --color-ts-namespace: var(--dark-color-ts-namespace); + --color-ts-enum: var(--dark-color-ts-enum); + --color-ts-enum-member: var(--dark-color-ts-enum-member); + --color-ts-variable: var(--dark-color-ts-variable); + --color-ts-function: var(--dark-color-ts-function); + --color-ts-class: var(--dark-color-ts-class); + --color-ts-interface: var(--dark-color-ts-interface); + --color-ts-constructor: var(--dark-color-ts-constructor); + --color-ts-property: var(--dark-color-ts-property); + --color-ts-method: var(--dark-color-ts-method); + --color-ts-reference: var(--dark-color-ts-reference); + --color-ts-call-signature: var(--dark-color-ts-call-signature); + --color-ts-index-signature: var(--dark-color-ts-index-signature); + --color-ts-constructor-signature: var( + --dark-color-ts-constructor-signature + ); + --color-ts-parameter: var(--dark-color-ts-parameter); + --color-ts-type-parameter: var(--dark-color-ts-type-parameter); + --color-ts-accessor: var(--dark-color-ts-accessor); + --color-ts-get-signature: var(--dark-color-ts-get-signature); + --color-ts-set-signature: var(--dark-color-ts-set-signature); + --color-ts-type-alias: var(--dark-color-ts-type-alias); + --color-document: var(--dark-color-document); + + --color-note: var(--dark-color-note); + --color-tip: var(--dark-color-tip); + --color-important: var(--dark-color-important); + --color-warning: var(--dark-color-warning); + --color-caution: var(--dark-color-caution); + + --external-icon: var(--dark-external-icon); + --color-scheme: var(--dark-color-scheme); + } + + html { + color-scheme: var(--color-scheme); + @media (prefers-reduced-motion: no-preference) { + scroll-behavior: smooth; + } + } + + *:focus-visible, + .tsd-accordion-summary:focus-visible svg { + outline: 2px solid var(--color-focus-outline); + } + + .always-visible, + .always-visible .tsd-signatures { + display: inherit !important; + } + + h1, + h2, + h3, + h4, + h5, + h6 { + line-height: 1.2; + } + + h1 { + font-size: 1.875rem; + margin: 0.67rem 0; + } + + h2 { + font-size: 1.5rem; + margin: 0.83rem 0; + } + + h3 { + font-size: 1.25rem; + margin: 1rem 0; + } + + h4 { + font-size: 1.05rem; + margin: 1.33rem 0; + } + + h5 { + font-size: 1rem; + margin: 1.5rem 0; + } + + h6 { + font-size: 0.875rem; + margin: 2.33rem 0; + } + + dl, + menu, + ol, + ul { + margin: 1em 0; + } + + dd { + margin: 0 0 0 34px; + } + + .container { + max-width: 1700px; + padding: 0 2rem; + } + + /* Footer */ + footer { + border-top: 1px solid var(--color-accent); + padding-top: 1rem; + padding-bottom: 1rem; + max-height: var(--dim-footer-height); + } + footer > p { + margin: 0 1em; + } + + .container-main { + margin: var(--dim-container-main-margin-y) auto; + /* toolbar, footer, margin */ + min-height: calc( + 100svh - var(--dim-header-height) - var(--dim-footer-height) - + 2 * var(--dim-container-main-margin-y) + ); + } + + @keyframes fade-in { + from { + opacity: 0; + } + to { + opacity: 1; + } + } + @keyframes fade-out { + from { + opacity: 1; + visibility: visible; + } + to { + opacity: 0; + } + } + @keyframes pop-in-from-right { + from { + transform: translate(100%, 0); + } + to { + transform: translate(0, 0); + } + } + @keyframes pop-out-to-right { + from { + transform: translate(0, 0); + visibility: visible; + } + to { + transform: translate(100%, 0); + } + } + body { + background: var(--color-background); + font-family: + -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", + Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; + font-size: 16px; + color: var(--color-text); + margin: 0; + } + + a { + color: var(--color-link); + text-decoration: none; + } + a:hover { + text-decoration: underline; + } + a.external[target="_blank"] { + background-image: var(--external-icon); + background-position: top 3px right; + background-repeat: no-repeat; + padding-right: 13px; + } + a.tsd-anchor-link { + color: var(--color-text); + } + :target { + scroll-margin-block: calc(var(--dim-header-height) + 0.5rem); + } + + code, + pre { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; + padding: 0.2em; + margin: 0; + font-size: 0.875rem; + border-radius: 0.8em; + } + + pre { + position: relative; + white-space: pre-wrap; + word-wrap: break-word; + padding: 10px; + border: 1px solid var(--color-accent); + margin-bottom: 8px; + } + pre code { + padding: 0; + font-size: 100%; + } + pre > button { + position: absolute; + top: 10px; + right: 10px; + opacity: 0; + transition: opacity 0.1s; + box-sizing: border-box; + } + pre:hover > button, + pre > button.visible, + pre > button:focus-visible { + opacity: 1; + } + + blockquote { + margin: 1em 0; + padding-left: 1em; + border-left: 4px solid gray; + } + + img { + max-width: 100%; + } + + * { + scrollbar-width: thin; + scrollbar-color: var(--color-accent) var(--color-icon-background); + } + + *::-webkit-scrollbar { + width: 0.75rem; + } + + *::-webkit-scrollbar-track { + background: var(--color-icon-background); + } + + *::-webkit-scrollbar-thumb { + background-color: var(--color-accent); + border-radius: 999rem; + border: 0.25rem solid var(--color-icon-background); + } + + dialog { + border: none; + outline: none; + padding: 0; + background-color: var(--color-background); + } + dialog::backdrop { + display: none; + } + #tsd-overlay { + background-color: rgba(0, 0, 0, 0.5); + position: fixed; + z-index: 9999; + top: 0; + left: 0; + right: 0; + bottom: 0; + animation: fade-in var(--modal-animation-duration) forwards; + } + #tsd-overlay.closing { + animation-name: fade-out; + } + + .tsd-typography { + line-height: 1.333em; + } + .tsd-typography ul { + list-style: square; + padding: 0 0 0 20px; + margin: 0; + } + .tsd-typography .tsd-index-panel h3, + .tsd-index-panel .tsd-typography h3, + .tsd-typography h4, + .tsd-typography h5, + .tsd-typography h6 { + font-size: 1em; + } + .tsd-typography h5, + .tsd-typography h6 { + font-weight: normal; + } + .tsd-typography p, + .tsd-typography ul, + .tsd-typography ol { + margin: 1em 0; + } + .tsd-typography table { + border-collapse: collapse; + border: none; + } + .tsd-typography td, + .tsd-typography th { + padding: 6px 13px; + border: 1px solid var(--color-accent); + } + .tsd-typography thead, + .tsd-typography tr:nth-child(even) { + background-color: var(--color-background-secondary); + } + + .tsd-alert { + padding: 8px 16px; + margin-bottom: 16px; + border-left: 0.25em solid var(--alert-color); + } + .tsd-alert blockquote > :last-child, + .tsd-alert > :last-child { + margin-bottom: 0; + } + .tsd-alert-title { + color: var(--alert-color); + display: inline-flex; + align-items: center; + } + .tsd-alert-title span { + margin-left: 4px; + } + + .tsd-alert-note { + --alert-color: var(--color-alert-note); + } + .tsd-alert-tip { + --alert-color: var(--color-alert-tip); + } + .tsd-alert-important { + --alert-color: var(--color-alert-important); + } + .tsd-alert-warning { + --alert-color: var(--color-alert-warning); + } + .tsd-alert-caution { + --alert-color: var(--color-alert-caution); + } + + .tsd-breadcrumb { + margin: 0; + margin-top: 1rem; + padding: 0; + color: var(--color-text-aside); + } + .tsd-breadcrumb a { + color: var(--color-text-aside); + text-decoration: none; + } + .tsd-breadcrumb a:hover { + text-decoration: underline; + } + .tsd-breadcrumb li { + display: inline; + } + .tsd-breadcrumb li:after { + content: " / "; + } + + .tsd-comment-tags { + display: flex; + flex-direction: column; + } + dl.tsd-comment-tag-group { + display: flex; + align-items: center; + overflow: hidden; + margin: 0.5em 0; + } + dl.tsd-comment-tag-group dt { + display: flex; + margin-right: 0.5em; + font-size: 0.875em; + font-weight: normal; + } + dl.tsd-comment-tag-group dd { + margin: 0; + } + code.tsd-tag { + padding: 0.25em 0.4em; + border: 0.1em solid var(--color-accent); + margin-right: 0.25em; + font-size: 70%; + } + h1 code.tsd-tag:first-of-type { + margin-left: 0.25em; + } + + dl.tsd-comment-tag-group dd:before, + dl.tsd-comment-tag-group dd:after { + content: " "; + } + dl.tsd-comment-tag-group dd pre, + dl.tsd-comment-tag-group dd:after { + clear: both; + } + dl.tsd-comment-tag-group p { + margin: 0; + } + + .tsd-panel.tsd-comment .lead { + font-size: 1.1em; + line-height: 1.333em; + margin-bottom: 2em; + } + .tsd-panel.tsd-comment .lead:last-child { + margin-bottom: 0; + } + + .tsd-filter-visibility h4 { + font-size: 1rem; + padding-top: 0.75rem; + padding-bottom: 0.5rem; + margin: 0; + } + .tsd-filter-item:not(:last-child) { + margin-bottom: 0.5rem; + } + .tsd-filter-input { + display: flex; + width: -moz-fit-content; + width: fit-content; + align-items: center; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + } + .tsd-filter-input input[type="checkbox"] { + cursor: pointer; + position: absolute; + width: 1.5em; + height: 1.5em; + opacity: 0; + } + .tsd-filter-input input[type="checkbox"]:disabled { + pointer-events: none; + } + .tsd-filter-input svg { + cursor: pointer; + width: 1.5em; + height: 1.5em; + margin-right: 0.5em; + border-radius: 0.33em; + /* Leaving this at full opacity breaks event listeners on Firefox. + Don't remove unless you know what you're doing. */ + opacity: 0.99; + } + .tsd-filter-input input[type="checkbox"]:focus-visible + svg { + outline: 2px solid var(--color-focus-outline); + } + .tsd-checkbox-background { + fill: var(--color-accent); + } + input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { + stroke: var(--color-text); + } + .tsd-filter-input input:disabled ~ svg > .tsd-checkbox-background { + fill: var(--color-background); + stroke: var(--color-accent); + stroke-width: 0.25rem; + } + .tsd-filter-input input:disabled ~ svg > .tsd-checkbox-checkmark { + stroke: var(--color-accent); + } + + .settings-label { + font-weight: bold; + text-transform: uppercase; + display: inline-block; + } + + .tsd-filter-visibility .settings-label { + margin: 0.75rem 0 0.5rem 0; + } + + .tsd-theme-toggle .settings-label { + margin: 0.75rem 0.75rem 0 0; + } + + .tsd-hierarchy h4 label:hover span { + text-decoration: underline; + } + + .tsd-hierarchy { + list-style: square; + margin: 0; + } + .tsd-hierarchy-target { + font-weight: bold; + } + .tsd-hierarchy-toggle { + color: var(--color-link); + cursor: pointer; + } + + .tsd-full-hierarchy:not(:last-child) { + margin-bottom: 1em; + padding-bottom: 1em; + border-bottom: 1px solid var(--color-accent); + } + .tsd-full-hierarchy, + .tsd-full-hierarchy ul { + list-style: none; + margin: 0; + padding: 0; + } + .tsd-full-hierarchy ul { + padding-left: 1.5rem; + } + .tsd-full-hierarchy a { + padding: 0.25rem 0 !important; + font-size: 1rem; + display: inline-flex; + align-items: center; + color: var(--color-text); + } + .tsd-full-hierarchy svg[data-dropdown] { + cursor: pointer; + } + .tsd-full-hierarchy svg[data-dropdown="false"] { + transform: rotate(-90deg); + } + .tsd-full-hierarchy svg[data-dropdown="false"] ~ ul { + display: none; + } + + .tsd-panel-group.tsd-index-group { + margin-bottom: 0; + } + .tsd-index-panel .tsd-index-list { + list-style: none; + line-height: 1.333em; + margin: 0; + padding: 0.25rem 0 0 0; + overflow: hidden; + display: grid; + grid-template-columns: repeat(3, 1fr); + column-gap: 1rem; + grid-template-rows: auto; + } + @media (max-width: 1024px) { + .tsd-index-panel .tsd-index-list { + grid-template-columns: repeat(2, 1fr); + } + } + @media (max-width: 768px) { + .tsd-index-panel .tsd-index-list { + grid-template-columns: repeat(1, 1fr); + } + } + .tsd-index-panel .tsd-index-list li { + -webkit-page-break-inside: avoid; + -moz-page-break-inside: avoid; + -ms-page-break-inside: avoid; + -o-page-break-inside: avoid; + page-break-inside: avoid; + } + + .tsd-flag { + display: inline-block; + padding: 0.25em 0.4em; + border-radius: 4px; + color: var(--color-comment-tag-text); + background-color: var(--color-comment-tag); + text-indent: 0; + font-size: 75%; + line-height: 1; + font-weight: normal; + } + + .tsd-anchor { + position: relative; + top: -100px; + } + + .tsd-member { + position: relative; + } + .tsd-member .tsd-anchor + h3 { + display: flex; + align-items: center; + margin-top: 0; + margin-bottom: 0; + border-bottom: none; + } + + .tsd-navigation.settings { + margin: 0; + margin-bottom: 1rem; + } + .tsd-navigation > a, + .tsd-navigation .tsd-accordion-summary { + width: calc(100% - 0.25rem); + display: flex; + align-items: center; + } + .tsd-navigation a, + .tsd-navigation summary > span, + .tsd-page-navigation a { + display: flex; + width: calc(100% - 0.25rem); + align-items: center; + padding: 0.25rem; + color: var(--color-text); + text-decoration: none; + box-sizing: border-box; + } + .tsd-navigation a.current, + .tsd-page-navigation a.current { + background: var(--color-active-menu-item); + color: var(--color-contrast-text); + } + .tsd-navigation a:hover, + .tsd-page-navigation a:hover { + text-decoration: underline; + } + .tsd-navigation ul, + .tsd-page-navigation ul { + margin-top: 0; + margin-bottom: 0; + padding: 0; + list-style: none; + } + .tsd-navigation li, + .tsd-page-navigation li { + padding: 0; + max-width: 100%; + } + .tsd-navigation .tsd-nav-link { + display: none; + } + .tsd-nested-navigation { + margin-left: 3rem; + } + .tsd-nested-navigation > li > details { + margin-left: -1.5rem; + } + .tsd-small-nested-navigation { + margin-left: 1.5rem; + } + .tsd-small-nested-navigation > li > details { + margin-left: -1.5rem; + } + + .tsd-page-navigation-section > summary { + padding: 0.25rem; + } + .tsd-page-navigation-section > summary > svg { + margin-right: 0.25rem; + } + .tsd-page-navigation-section > div { + margin-left: 30px; + } + .tsd-page-navigation ul { + padding-left: 1.75rem; + } + + #tsd-sidebar-links a { + margin-top: 0; + margin-bottom: 0.5rem; + line-height: 1.25rem; + } + #tsd-sidebar-links a:last-of-type { + margin-bottom: 0; + } + + a.tsd-index-link { + padding: 0.25rem 0 !important; + font-size: 1rem; + line-height: 1.25rem; + display: inline-flex; + align-items: center; + color: var(--color-text); + } + .tsd-accordion-summary { + list-style-type: none; /* hide marker on non-safari */ + outline: none; /* broken on safari, so just hide it */ + display: flex; + align-items: center; + gap: 0.25rem; + box-sizing: border-box; + } + .tsd-accordion-summary::-webkit-details-marker { + display: none; /* hide marker on safari */ + } + .tsd-accordion-summary, + .tsd-accordion-summary a { + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + user-select: none; + + cursor: pointer; + } + .tsd-accordion-summary a { + width: calc(100% - 1.5rem); + } + .tsd-accordion-summary > * { + margin-top: 0; + margin-bottom: 0; + padding-top: 0; + padding-bottom: 0; + } + /* + * We need to be careful to target the arrow indicating whether the accordion + * is open, but not any other SVGs included in the details element. + */ + .tsd-accordion:not([open]) > .tsd-accordion-summary > svg:first-child { + transform: rotate(-90deg); + } + .tsd-index-content > :not(:first-child) { + margin-top: 0.75rem; + } + .tsd-index-summary { + margin-top: 1.5rem; + margin-bottom: 0.75rem; + display: flex; + align-content: center; + } + + .tsd-no-select { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + } + .tsd-kind-icon { + margin-right: 0.5rem; + width: 1.25rem; + height: 1.25rem; + min-width: 1.25rem; + min-height: 1.25rem; + } + .tsd-signature > .tsd-kind-icon { + margin-right: 0.8rem; + } + + .tsd-panel { + margin-bottom: 2.5rem; + } + .tsd-panel.tsd-member { + margin-bottom: 4rem; + } + .tsd-panel:empty { + display: none; + } + .tsd-panel > h1, + .tsd-panel > h2, + .tsd-panel > h3 { + margin: 1.5rem -1.5rem 0.75rem -1.5rem; + padding: 0 1.5rem 0.75rem 1.5rem; + } + .tsd-panel > h1.tsd-before-signature, + .tsd-panel > h2.tsd-before-signature, + .tsd-panel > h3.tsd-before-signature { + margin-bottom: 0; + border-bottom: none; + } + + .tsd-panel-group { + margin: 2rem 0; + } + .tsd-panel-group.tsd-index-group { + margin: 2rem 0; + } + .tsd-panel-group.tsd-index-group details { + margin: 2rem 0; + } + .tsd-panel-group > .tsd-accordion-summary { + margin-bottom: 1rem; + } + + #tsd-search[open] { + animation: fade-in var(--modal-animation-duration) ease-out forwards; + } + #tsd-search[open].closing { + animation-name: fade-out; + } + + /* Avoid setting `display` on closed dialog */ + #tsd-search[open] { + display: flex; + flex-direction: column; + padding: 1rem; + width: 32rem; + max-width: 90vw; + max-height: calc(100vh - env(keyboard-inset-height, 0px) - 25vh); + /* Anchor dialog to top */ + margin-top: 10vh; + border-radius: 6px; + will-change: max-height; + } + #tsd-search-input { + box-sizing: border-box; + width: 100%; + padding: 0 0.625rem; /* 10px */ + outline: 0; + border: 2px solid var(--color-accent); + background-color: transparent; + color: var(--color-text); + border-radius: 4px; + height: 2.5rem; + flex: 0 0 auto; + font-size: 0.875rem; + transition: border-color 0.2s, background-color 0.2s; + } + #tsd-search-input:focus-visible { + background-color: var(--color-background-active); + border-color: transparent; + color: var(--color-contrast-text); + } + #tsd-search-input::placeholder { + color: inherit; + opacity: 0.8; + } + #tsd-search-results { + margin: 0; + padding: 0; + list-style: none; + flex: 1 1 auto; + display: flex; + flex-direction: column; + overflow-y: auto; + } + #tsd-search-results:not(:empty) { + margin-top: 0.5rem; + } + #tsd-search-results > li { + background-color: var(--color-background); + line-height: 1.5; + box-sizing: border-box; + border-radius: 4px; + } + #tsd-search-results > li:nth-child(even) { + background-color: var(--color-background-secondary); + } + #tsd-search-results > li:is(:hover, [aria-selected="true"]) { + background-color: var(--color-background-active); + color: var(--color-contrast-text); + } + /* It's important that this takes full size of parent `li`, to capture a click on `li` */ + #tsd-search-results > li > a { + display: flex; + align-items: center; + padding: 0.5rem 0.25rem; + box-sizing: border-box; + width: 100%; + } + #tsd-search-results > li > a > .text { + flex: 1 1 auto; + min-width: 0; + overflow-wrap: anywhere; + } + #tsd-search-results > li > a .parent { + color: var(--color-text-aside); + } + #tsd-search-results > li > a mark { + color: inherit; + background-color: inherit; + font-weight: bold; + } + #tsd-search-status { + flex: 1; + display: grid; + place-content: center; + text-align: center; + overflow-wrap: anywhere; + } + #tsd-search-status:not(:empty) { + min-height: 6rem; + } + + .tsd-signature { + margin: 0 0 1rem 0; + padding: 1rem 0.5rem; + border: 1px solid var(--color-accent); + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; + font-size: 14px; + overflow-x: auto; + } + + .tsd-signature-keyword { + color: var(--color-ts-keyword); + font-weight: normal; + } + + .tsd-signature-symbol { + color: var(--color-text-aside); + font-weight: normal; + } + + .tsd-signature-type { + font-style: italic; + font-weight: normal; + } + + .tsd-signatures { + padding: 0; + margin: 0 0 1em 0; + list-style-type: none; + } + .tsd-signatures .tsd-signature { + margin: 0; + border-color: var(--color-accent); + border-width: 1px 0; + transition: background-color 0.1s; + } + .tsd-signatures .tsd-index-signature:not(:last-child) { + margin-bottom: 1em; + } + .tsd-signatures .tsd-index-signature .tsd-signature { + border-width: 1px; + } + .tsd-description .tsd-signatures .tsd-signature { + border-width: 1px; + } + + ul.tsd-parameter-list, + ul.tsd-type-parameter-list { + list-style: square; + margin: 0; + padding-left: 20px; + } + ul.tsd-parameter-list > li.tsd-parameter-signature, + ul.tsd-type-parameter-list > li.tsd-parameter-signature { + list-style: none; + margin-left: -20px; + } + ul.tsd-parameter-list h5, + ul.tsd-type-parameter-list h5 { + font-size: 16px; + margin: 1em 0 0.5em 0; + } + .tsd-sources { + margin-top: 1rem; + font-size: 0.875em; + } + .tsd-sources a { + color: var(--color-text-aside); + text-decoration: underline; + } + .tsd-sources ul { + list-style: none; + padding: 0; + } + + .tsd-page-toolbar { + position: sticky; + z-index: 1; + top: 0; + left: 0; + width: 100%; + color: var(--color-text); + background: var(--color-background-secondary); + border-bottom: var(--dim-toolbar-border-bottom-width) + var(--color-accent) solid; + transition: transform 0.3s ease-in-out; + } + .tsd-page-toolbar a { + color: var(--color-text); + } + .tsd-toolbar-contents { + display: flex; + align-items: center; + height: var(--dim-toolbar-contents-height); + margin: 0 auto; + } + .tsd-toolbar-contents > .title { + font-weight: bold; + margin-right: auto; + } + #tsd-toolbar-links { + display: flex; + align-items: center; + gap: 1.5rem; + margin-right: 1rem; + } + + .tsd-widget { + box-sizing: border-box; + display: inline-block; + opacity: 0.8; + height: 2.5rem; + width: 2.5rem; + transition: opacity 0.1s, background-color 0.1s; + text-align: center; + cursor: pointer; + border: none; + background-color: transparent; + } + .tsd-widget:hover { + opacity: 0.9; + } + .tsd-widget:active { + opacity: 1; + background-color: var(--color-accent); + } + #tsd-toolbar-menu-trigger { + display: none; + } + + .tsd-member-summary-name { + display: inline-flex; + align-items: center; + padding: 0.25rem; + text-decoration: none; + } + + .tsd-anchor-icon { + display: inline-flex; + align-items: center; + margin-left: 0.5rem; + color: var(--color-text); + vertical-align: middle; + } + + .tsd-anchor-icon svg { + width: 1em; + height: 1em; + visibility: hidden; + } + + .tsd-member-summary-name:hover > .tsd-anchor-icon svg, + .tsd-anchor-link:hover > .tsd-anchor-icon svg, + .tsd-anchor-icon:focus-visible svg { + visibility: visible; + } + + .deprecated { + text-decoration: line-through !important; + } + + .warning { + padding: 1rem; + color: var(--color-warning-text); + background: var(--color-background-warning); + } + + .tsd-kind-project { + color: var(--color-ts-project); + } + .tsd-kind-module { + color: var(--color-ts-module); + } + .tsd-kind-namespace { + color: var(--color-ts-namespace); + } + .tsd-kind-enum { + color: var(--color-ts-enum); + } + .tsd-kind-enum-member { + color: var(--color-ts-enum-member); + } + .tsd-kind-variable { + color: var(--color-ts-variable); + } + .tsd-kind-function { + color: var(--color-ts-function); + } + .tsd-kind-class { + color: var(--color-ts-class); + } + .tsd-kind-interface { + color: var(--color-ts-interface); + } + .tsd-kind-constructor { + color: var(--color-ts-constructor); + } + .tsd-kind-property { + color: var(--color-ts-property); + } + .tsd-kind-method { + color: var(--color-ts-method); + } + .tsd-kind-reference { + color: var(--color-ts-reference); + } + .tsd-kind-call-signature { + color: var(--color-ts-call-signature); + } + .tsd-kind-index-signature { + color: var(--color-ts-index-signature); + } + .tsd-kind-constructor-signature { + color: var(--color-ts-constructor-signature); + } + .tsd-kind-parameter { + color: var(--color-ts-parameter); + } + .tsd-kind-type-parameter { + color: var(--color-ts-type-parameter); + } + .tsd-kind-accessor { + color: var(--color-ts-accessor); + } + .tsd-kind-get-signature { + color: var(--color-ts-get-signature); + } + .tsd-kind-set-signature { + color: var(--color-ts-set-signature); + } + .tsd-kind-type-alias { + color: var(--color-ts-type-alias); + } + + /* if we have a kind icon, don't color the text by kind */ + .tsd-kind-icon ~ span { + color: var(--color-text); + } + + /* mobile */ + @media (max-width: 769px) { + #tsd-toolbar-menu-trigger { + display: inline-block; + /* temporary fix to vertically align, for compatibility */ + line-height: 2.5; + } + #tsd-toolbar-links { + display: none; + } + + .container-main { + display: flex; + } + .col-content { + float: none; + max-width: 100%; + width: 100%; + } + .col-sidebar { + position: fixed !important; + overflow-y: auto; + -webkit-overflow-scrolling: touch; + z-index: 1024; + top: 0 !important; + bottom: 0 !important; + left: auto !important; + right: 0 !important; + padding: 1.5rem 1.5rem 0 0; + width: 75vw; + visibility: hidden; + background-color: var(--color-background); + transform: translate(100%, 0); + } + .col-sidebar > *:last-child { + padding-bottom: 20px; + } + .overlay { + content: ""; + display: block; + position: fixed; + z-index: 1023; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: rgba(0, 0, 0, 0.75); + visibility: hidden; + } + + .to-has-menu .overlay { + animation: fade-in 0.4s; + } + + .to-has-menu .col-sidebar { + animation: pop-in-from-right 0.4s; + } + + .from-has-menu .overlay { + animation: fade-out 0.4s; + } + + .from-has-menu .col-sidebar { + animation: pop-out-to-right 0.4s; + } + + .has-menu body { + overflow: hidden; + } + .has-menu .overlay { + visibility: visible; + } + .has-menu .col-sidebar { + visibility: visible; + transform: translate(0, 0); + display: flex; + flex-direction: column; + gap: 1.5rem; + max-height: 100vh; + padding: 1rem 2rem; + } + .has-menu .tsd-navigation { + max-height: 100%; + } + .tsd-navigation .tsd-nav-link { + display: flex; + } + } + + /* one sidebar */ + @media (min-width: 770px) { + .container-main { + display: grid; + grid-template-columns: minmax(0, 1fr) minmax(0, 2fr); + grid-template-areas: "sidebar content"; + --dim-container-main-margin-y: 2rem; + } + + .tsd-breadcrumb { + margin-top: 0; + } + + .col-sidebar { + grid-area: sidebar; + } + .col-content { + grid-area: content; + padding: 0 1rem; + } + } + @media (min-width: 770px) and (max-width: 1399px) { + .col-sidebar { + max-height: calc( + 100vh - var(--dim-header-height) - var(--dim-footer-height) - + 2 * var(--dim-container-main-margin-y) + ); + overflow: auto; + position: sticky; + top: calc( + var(--dim-header-height) + var(--dim-container-main-margin-y) + ); + } + .site-menu { + margin-top: 1rem; + } + } + + /* two sidebars */ + @media (min-width: 1200px) { + .container-main { + grid-template-columns: + minmax(0, 1fr) minmax(0, 2.5fr) minmax( + 0, + 20rem + ); + grid-template-areas: "sidebar content toc"; + } + + .col-sidebar { + display: contents; + } + + .page-menu { + grid-area: toc; + padding-left: 1rem; + } + .site-menu { + grid-area: sidebar; + } + + .site-menu { + margin-top: 0rem; + } + + .page-menu, + .site-menu { + max-height: calc( + 100vh - var(--dim-header-height) - var(--dim-footer-height) - + 2 * var(--dim-container-main-margin-y) + ); + overflow: auto; + position: sticky; + top: calc( + var(--dim-header-height) + var(--dim-container-main-margin-y) + ); + } + } +} diff --git a/sdk_v2/js/docs/classes/AudioClient.html b/sdk_v2/js/docs/classes/AudioClient.html new file mode 100644 index 0000000..91f4dca --- /dev/null +++ b/sdk_v2/js/docs/classes/AudioClient.html @@ -0,0 +1,16 @@ +AudioClient | foundry-local-sdk
foundry-local-sdk
    Preparing search index...

    Class AudioClient

    Client for performing audio operations (transcription, translation) with a loaded model. +Follows the OpenAI Audio API structure.

    +
    Index

    Constructors

    • Parameters

      • modelId: string
      • coreInterop: CoreInterop

      Returns AudioClient

    Methods

    • Transcribes audio into the input language.

      +

      Parameters

      • audioFile: any

        The audio file to transcribe.

        +
      • Optionaloptions: any

        Optional parameters for transcription.

        +

      Returns Promise<any>

      The transcription result.

      +

      Error - Not implemented.

      +
    • Transcribes audio into the input language using streaming.

      +

      Parameters

      • audioFile: any

        The audio file to transcribe.

        +
      • Optionaloptions: any

        Optional parameters for transcription.

        +

      Returns Promise<any>

      The transcription result.

      +

      Error - Not implemented.

      +
    diff --git a/sdk_v2/js/docs/classes/Catalog.html b/sdk_v2/js/docs/classes/Catalog.html new file mode 100644 index 0000000..621ce7c --- /dev/null +++ b/sdk_v2/js/docs/classes/Catalog.html @@ -0,0 +1,30 @@ +Catalog | foundry-local-sdk
    foundry-local-sdk
      Preparing search index...

      Class Catalog

      Represents a catalog of AI models available in the system. +Provides methods to discover, list, and retrieve models and their variants.

      +
      Index

      Constructors

      Accessors

      • get name(): string

        Gets the name of the catalog.

        +

        Returns string

        The name of the catalog.

        +

      Methods

      • Retrieves a list of all locally cached model variants. +This method is asynchronous as it may involve file I/O or querying the underlying core.

        +

        Returns Promise<ModelVariant[]>

        A Promise that resolves to an array of cached ModelVariant objects.

        +
      • Retrieves a list of all currently loaded model variants. +This operation is asynchronous because checking the loaded status may involve querying +the underlying core or an external service, which can be an I/O bound operation.

        +

        Returns Promise<ModelVariant[]>

        A Promise that resolves to an array of loaded ModelVariant objects.

        +
      • Retrieves a model by its alias. +This method is asynchronous as it may ensure the catalog is up-to-date by fetching from a remote service.

        +

        Parameters

        • alias: string

          The alias of the model to retrieve.

          +

        Returns Promise<Model | undefined>

        A Promise that resolves to the Model object if found, otherwise undefined.

        +
      • Lists all available models in the catalog. +This method is asynchronous as it may fetch the model list from a remote service or perform file I/O.

        +

        Returns Promise<Model[]>

        A Promise that resolves to an array of Model objects.

        +
      • Retrieves a specific model variant by its ID. +This method is asynchronous as it may ensure the catalog is up-to-date by fetching from a remote service.

        +

        Parameters

        • modelId: string

          The unique identifier of the model variant.

          +

        Returns Promise<ModelVariant | undefined>

        A Promise that resolves to the ModelVariant object if found, otherwise undefined.

        +
      diff --git a/sdk_v2/js/docs/classes/ChatClient.html b/sdk_v2/js/docs/classes/ChatClient.html new file mode 100644 index 0000000..ad72263 --- /dev/null +++ b/sdk_v2/js/docs/classes/ChatClient.html @@ -0,0 +1,15 @@ +ChatClient | foundry-local-sdk
      foundry-local-sdk
        Preparing search index...

        Class ChatClient

        Client for performing chat completions with a loaded model. +Follows the OpenAI Chat Completion API structure.

        +
        Index

        Constructors

        Properties

        Methods

        Constructors

        • Parameters

          • modelId: string
          • coreInterop: CoreInterop

          Returns ChatClient

        Properties

        settings: ChatClientSettings = ...

        Configuration settings for chat completions.

        +

        Methods

        • Performs a synchronous chat completion.

          +

          Parameters

          • messages: any[]

            An array of message objects (e.g., { role: 'user', content: 'Hello' }).

            +

          Returns Promise<any>

          The chat completion response object.

          +
        • Performs a streaming chat completion.

          +

          Parameters

          • messages: any[]

            An array of message objects.

            +
          • callback: (chunk: any) => void

            A callback function that receives each chunk of the streaming response.

            +

          Returns Promise<void>

          A promise that resolves when the stream is complete.

          +
        diff --git a/sdk_v2/js/docs/classes/FoundryLocalManager.html b/sdk_v2/js/docs/classes/FoundryLocalManager.html new file mode 100644 index 0000000..17cddf0 --- /dev/null +++ b/sdk_v2/js/docs/classes/FoundryLocalManager.html @@ -0,0 +1,28 @@ +FoundryLocalManager | foundry-local-sdk
        foundry-local-sdk
          Preparing search index...

          Class FoundryLocalManager

          The main entry point for the Foundry Local SDK. +Manages the initialization of the core system and provides access to the Catalog and ModelLoadManager.

          +
          Index

          Accessors

          • get catalog(): Catalog

            Gets the Catalog instance for discovering and managing models.

            +

            Returns Catalog

            The Catalog instance.

            +
          • get urls(): string[]

            Gets the URLs where the web service is listening. +Returns an empty array if the web service is not running.

            +

            Returns string[]

            An array of URLs.

            +

          Methods

          • Ensures that the necessary execution providers (EPs) are downloaded. +Also serves as a manual trigger for EP download if ManualEpDownload is enabled.

            +

            Returns void

          • Starts the local web service. +Use the urls property to retrieve the bound addresses after the service has started. +If no listener address is configured, the service defaults to 127.0.0.1:0 (binding to a random ephemeral port).

            +

            Returns void

            Error - If starting the service fails.

            +
          • Stops the local web service.

            +

            Returns void

            Error - If stopping the service fails.

            +
          • Creates the FoundryLocalManager singleton with the provided configuration.

            +

            Parameters

            Returns FoundryLocalManager

            The initialized FoundryLocalManager instance.

            +
            const manager = FoundryLocalManager.create({
            appName: 'MyApp',
            logLevel: 'info'
            }); +
            + +
          diff --git a/sdk_v2/js/docs/classes/Model.html b/sdk_v2/js/docs/classes/Model.html new file mode 100644 index 0000000..1b44d07 --- /dev/null +++ b/sdk_v2/js/docs/classes/Model.html @@ -0,0 +1,48 @@ +Model | foundry-local-sdk
          foundry-local-sdk
            Preparing search index...

            Class Model

            Represents a high-level AI model that may have multiple variants (e.g., quantized versions, different formats). +Manages the selection and interaction with a specific model variant.

            +

            Implements

            Index

            Constructors

            Accessors

            • get alias(): string

              Gets the alias of the model.

              +

              Returns string

              The model alias.

              +
            • get id(): string

              Gets the ID of the currently selected variant.

              +

              Returns string

              The ID of the selected variant.

              +
            • get isCached(): boolean

              Checks if the currently selected variant is cached locally.

              +

              Returns boolean

              True if cached, false otherwise.

              +
            • get path(): string

              Gets the local file path of the currently selected variant.

              +

              Returns string

              The local file path.

              +
            • get variants(): ModelVariant[]

              Gets all available variants for this model.

              +

              Returns ModelVariant[]

              An array of ModelVariant objects.

              +

            Methods

            • Adds a new variant to this model. +Automatically selects the new variant if it is cached and the current one is not.

              +

              Parameters

              Returns void

              Error - If the variant's alias does not match the model's alias.

              +
            • Creates a ChatClient for interacting with the model via chat completions.

              +

              Returns ChatClient

              A ChatClient instance.

              +
            • Downloads the currently selected variant.

              +

              Parameters

              • OptionalprogressCallback: (progress: number) => void

                Optional callback to report download progress.

                +

              Returns void

            • Checks if the currently selected variant is loaded in memory.

              +

              Returns Promise<boolean>

              True if loaded, false otherwise.

              +
            • Loads the currently selected variant into memory.

              +

              Returns Promise<void>

              A promise that resolves when the model is loaded.

              +
            • Removes the currently selected variant from the local cache.

              +

              Returns void

            • Selects a specific variant by its ID.

              +

              Parameters

              • modelId: string

                The ID of the variant to select.

                +

              Returns void

              Error - If the variant with the specified ID is not found.

              +
            • Unloads the currently selected variant from memory.

              +

              Returns Promise<void>

              A promise that resolves when the model is unloaded.

              +
            diff --git a/sdk_v2/js/docs/classes/ModelLoadManager.html b/sdk_v2/js/docs/classes/ModelLoadManager.html new file mode 100644 index 0000000..cb6d3d1 --- /dev/null +++ b/sdk_v2/js/docs/classes/ModelLoadManager.html @@ -0,0 +1,16 @@ +ModelLoadManager | foundry-local-sdk
            foundry-local-sdk
              Preparing search index...

              Class ModelLoadManager

              Manages the loading and unloading of models. +Handles communication with the core system or an external service (future support).

              +
              Index

              Constructors

              Methods

              Constructors

              • Parameters

                • coreInterop: CoreInterop
                • OptionalexternalServiceUrl: string

                Returns ModelLoadManager

              Methods

              • Lists the IDs of all currently loaded models.

                +

                Returns Promise<string[]>

                An array of loaded model IDs.

                +

                Error - If listing via external service fails or if JSON parsing fails.

                +
              • Loads a model into memory.

                +

                Parameters

                • modelId: string

                  The ID of the model to load.

                  +

                Returns Promise<void>

                Error - If loading via external service fails.

                +
              • Unloads a model from memory.

                +

                Parameters

                • modelId: string

                  The ID of the model to unload.

                  +

                Returns Promise<void>

                Error - If unloading via external service fails.

                +
              diff --git a/sdk_v2/js/docs/classes/ModelVariant.html b/sdk_v2/js/docs/classes/ModelVariant.html new file mode 100644 index 0000000..3a565a7 --- /dev/null +++ b/sdk_v2/js/docs/classes/ModelVariant.html @@ -0,0 +1,40 @@ +ModelVariant | foundry-local-sdk
              foundry-local-sdk
                Preparing search index...

                Class ModelVariant

                Represents a specific variant of a model (e.g., a specific quantization or format). +Contains the low-level implementation for interacting with the model.

                +

                Implements

                Index

                Constructors

                Accessors

                • get alias(): string

                  Gets the alias of the model.

                  +

                  Returns string

                  The model alias.

                  +
                • get id(): string

                  Gets the unique identifier of the model variant.

                  +

                  Returns string

                  The model ID.

                  +
                • get isCached(): boolean

                  Checks if the model variant is cached locally.

                  +

                  Returns boolean

                  True if cached, false otherwise.

                  +
                • get modelInfo(): ModelInfo

                  Gets the detailed information about the model variant.

                  +

                  Returns ModelInfo

                  The ModelInfo object.

                  +
                • get path(): string

                  Gets the local file path of the model variant.

                  +

                  Returns string

                  The local file path.

                  +

                Methods

                • Creates an AudioClient for interacting with the model via audio operations.

                  +

                  Returns AudioClient

                  An AudioClient instance.

                  +
                • Creates a ChatClient for interacting with the model via chat completions.

                  +

                  Returns ChatClient

                  A ChatClient instance.

                  +
                • Downloads the model variant.

                  +

                  Parameters

                  • OptionalprogressCallback: (progress: number) => void

                    Optional callback to report download progress.

                    +

                  Returns void

                  Error - If progress callback is provided (not implemented).

                  +
                • Checks if the model variant is loaded in memory.

                  +

                  Returns Promise<boolean>

                  True if loaded, false otherwise.

                  +
                • Loads the model variant into memory.

                  +

                  Returns Promise<void>

                  A promise that resolves when the model is loaded.

                  +
                • Removes the model variant from the local cache.

                  +

                  Returns void

                • Unloads the model variant from memory.

                  +

                  Returns Promise<void>

                  A promise that resolves when the model is unloaded.

                  +
                diff --git a/sdk_v2/js/docs/hierarchy.html b/sdk_v2/js/docs/hierarchy.html new file mode 100644 index 0000000..9d025b6 --- /dev/null +++ b/sdk_v2/js/docs/hierarchy.html @@ -0,0 +1 @@ +foundry-local-sdk
                foundry-local-sdk
                  Preparing search index...

                  foundry-local-sdk

                  Hierarchy Summary

                  diff --git a/sdk_v2/js/docs/index.html b/sdk_v2/js/docs/index.html new file mode 100644 index 0000000..68e1317 --- /dev/null +++ b/sdk_v2/js/docs/index.html @@ -0,0 +1,38 @@ +foundry-local-sdk
                  foundry-local-sdk
                    Preparing search index...

                    foundry-local-sdk

                    Foundry Local JS SDK

                    The Foundry Local JS SDK provides a JavaScript/TypeScript interface for interacting with local AI models via the Foundry Local Core. It allows you to discover, download, load, and run inference on models directly on your local machine.

                    +

                    To install the SDK, run the following command in your project directory:

                    +
                    npm install foundry-local-js-sdk
                    +
                    + +

                    Note: Ensure you have the necessary native dependencies configured as per the main repository instructions.

                    +

                    Initialize the FoundryLocalManager with your configuration.

                    +
                    import { FoundryLocalManager } from 'foundry-local-js-sdk';

                    const manager = FoundryLocalManager.create({
                    libraryPath: '/path/to/core/library',
                    modelCacheDir: '/path/to/model/cache',
                    logLevel: 'info'
                    }); +
                    + +

                    Use the Catalog to list available models.

                    +
                    const catalog = manager.catalog;
                    const models = catalog.models;

                    models.forEach(model => {
                    console.log(`Model: ${model.alias}`);
                    }); +
                    + +
                    const model = catalog.getModel('phi-3-mini');

                    if (model) {
                    await model.load();

                    const chatClient = model.createChatClient();
                    const response = await chatClient.completeChat([
                    { role: 'user', content: 'Hello, how are you?' }
                    ]);

                    console.log(response.choices[0].message.content);

                    await model.unload();
                    } +
                    + +

                    The SDK source code is documented using TSDoc. You can generate the API documentation using TypeDoc.

                    +

                    Run the following command to generate the HTML documentation in the docs folder:

                    +
                    npm run docs
                    +
                    + +

                    Open docs/index.html in your browser to view the documentation.

                    +

                    To run the tests, use:

                    +
                    npm test
                    +
                    + +

                    See test/README.md for more details on setting up and running tests.

                    +

                    The SDK includes an example script demonstrating chat completion. To run it:

                    +
                      +
                    1. Ensure you have the necessary core libraries and a model available (see Tests Prerequisites).
                    2. +
                    3. Run the example command:
                    4. +
                    +
                    npm run example
                    +
                    + +

                    This will execute examples/chat-completion.ts.

                    +
                    diff --git a/sdk_v2/js/docs/interfaces/FoundryLocalConfig.html b/sdk_v2/js/docs/interfaces/FoundryLocalConfig.html new file mode 100644 index 0000000..97cfb2a --- /dev/null +++ b/sdk_v2/js/docs/interfaces/FoundryLocalConfig.html @@ -0,0 +1,33 @@ +FoundryLocalConfig | foundry-local-sdk
                    foundry-local-sdk
                      Preparing search index...

                      Interface FoundryLocalConfig

                      Configuration options for the Foundry Local SDK. +Use a plain object with these properties to configure the SDK.

                      +
                      interface FoundryLocalConfig {
                          additionalSettings?: { [key: string]: string };
                          appDataDir?: string;
                          appName: string;
                          libraryPath?: string;
                          logLevel?: "trace" | "debug" | "info" | "warn" | "error" | "fatal";
                          logsDir?: string;
                          modelCacheDir?: string;
                          serviceEndpoint?: string;
                          webServiceUrls?: string;
                      }
                      Index

                      Properties

                      additionalSettings?: { [key: string]: string }

                      Additional settings to pass to the core. +Optional. Internal use only.

                      +
                      appDataDir?: string

                      The directory where application data should be stored. +Optional. Defaults to {user_home}/.{appName}.

                      +
                      appName: string

                      REQUIRED The name of the application using the SDK. +Used for identifying the application in logs and telemetry.

                      +
                      libraryPath?: string

                      The path to the directory containing the native Foundry Local Core libraries. +Optional. This directory must contain Microsoft.AI.Foundry.Local.Core, onnxruntime, and onnxruntime-genai binaries. +If not provided, the SDK attempts to discover them in standard locations.

                      +
                      logLevel?: "trace" | "debug" | "info" | "warn" | "error" | "fatal"

                      The logging level for the SDK. +Optional. Valid values: 'trace', 'debug', 'info', 'warn', 'error', 'fatal'. +Defaults to 'warn'.

                      +
                      logsDir?: string

                      The directory where log files are written. +Optional. Defaults to {appDataDir}/logs.

                      +
                      modelCacheDir?: string

                      The directory where models are downloaded and cached. +Optional. Defaults to {appDataDir}/cache/models.

                      +
                      serviceEndpoint?: string

                      The external URL if the web service is running in a separate process. +Optional. This is used to connect to an existing service instance.

                      +
                      webServiceUrls?: string

                      The URL(s) for the local web service to bind to. +Optional. Multiple URLs can be separated by semicolons. +Example: "http://127.0.0.1:8080"

                      +
                      diff --git a/sdk_v2/js/docs/interfaces/IModel.html b/sdk_v2/js/docs/interfaces/IModel.html new file mode 100644 index 0000000..76c2611 --- /dev/null +++ b/sdk_v2/js/docs/interfaces/IModel.html @@ -0,0 +1,12 @@ +IModel | foundry-local-sdk
                      foundry-local-sdk
                        Preparing search index...

                        Interface IModel

                        interface IModel {
                            get alias(): string;
                            get id(): string;
                            get isCached(): boolean;
                            get path(): string;
                            createAudioClient(): AudioClient;
                            createChatClient(): ChatClient;
                            download(progressCallback?: (progress: number) => void): void;
                            isLoaded(): Promise<boolean>;
                            load(): Promise<void>;
                            removeFromCache(): void;
                            unload(): Promise<void>;
                        }

                        Implemented by

                        Index

                        Accessors

                        • get alias(): string

                          Returns string

                        • get id(): string

                          Returns string

                        • get isCached(): boolean

                          Returns boolean

                        • get path(): string

                          Returns string

                        Methods

                        • Parameters

                          • OptionalprogressCallback: (progress: number) => void

                          Returns void

                        • Returns Promise<boolean>

                        • Returns Promise<void>

                        • Returns void

                        • Returns Promise<void>

                        diff --git a/sdk_v2/js/docs/interfaces/ModelInfo.html b/sdk_v2/js/docs/interfaces/ModelInfo.html new file mode 100644 index 0000000..0711f76 --- /dev/null +++ b/sdk_v2/js/docs/interfaces/ModelInfo.html @@ -0,0 +1,22 @@ +ModelInfo | foundry-local-sdk
                        foundry-local-sdk
                          Preparing search index...

                          Interface ModelInfo

                          interface ModelInfo {
                              alias: string;
                              cached: boolean;
                              createdAtUnix: number;
                              displayName?: string | null;
                              fileSizeMb?: number | null;
                              id: string;
                              license?: string | null;
                              licenseDescription?: string | null;
                              maxOutputTokens?: number | null;
                              minFLVersion?: string | null;
                              modelSettings?: ModelSettings | null;
                              modelType: string;
                              name: string;
                              promptTemplate?: PromptTemplate | null;
                              providerType: string;
                              publisher?: string | null;
                              runtime?: Runtime | null;
                              supportsToolCalling?: boolean | null;
                              task?: string | null;
                              uri: string;
                              version: number;
                          }
                          Index

                          Properties

                          alias: string
                          cached: boolean
                          createdAtUnix: number
                          displayName?: string | null
                          fileSizeMb?: number | null
                          id: string
                          license?: string | null
                          licenseDescription?: string | null
                          maxOutputTokens?: number | null
                          minFLVersion?: string | null
                          modelSettings?: ModelSettings | null
                          modelType: string
                          name: string
                          promptTemplate?: PromptTemplate | null
                          providerType: string
                          publisher?: string | null
                          runtime?: Runtime | null
                          supportsToolCalling?: boolean | null
                          task?: string | null
                          uri: string
                          version: number
                          diff --git a/sdk_v2/js/docs/modules.html b/sdk_v2/js/docs/modules.html new file mode 100644 index 0000000..62bb6d3 --- /dev/null +++ b/sdk_v2/js/docs/modules.html @@ -0,0 +1 @@ +foundry-local-sdk
                          foundry-local-sdk
                            Preparing search index...
                            diff --git a/sdk_v2/js/examples/chat-completion.ts b/sdk_v2/js/examples/chat-completion.ts new file mode 100644 index 0000000..3de70a5 --- /dev/null +++ b/sdk_v2/js/examples/chat-completion.ts @@ -0,0 +1,112 @@ +// ------------------------------------------------------------------------- +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. +// ------------------------------------------------------------------------- + +import { FoundryLocalManager } from '../src/index.js'; + +async function main() { + try { + // Initialize the Foundry Local SDK + console.log('Initializing Foundry Local SDK...'); + + // NOTE: You must update libraryPath to point to your built DLL if not in standard location + const manager = FoundryLocalManager.create({ + appName: 'FoundryLocalExample', + serviceEndpoint: 'http://localhost:5000', + logLevel: 'info' + }); + console.log('✓ SDK initialized successfully'); + + // Explore available models + console.log('\nFetching available models...'); + const catalog = manager.catalog; + const models = await catalog.getModels(); + + console.log(`Found ${models.length} models:`); + for (const model of models) { + console.log(` - ${model.alias}`); + } + + // Explore cached models + console.log('\nFetching cached models...'); + const cachedModels = await catalog.getCachedModels(); + console.log(`Found ${cachedModels.length} cached models:`); + for (const cachedModel of cachedModels) { + console.log(` - ${cachedModel.alias}`); + } + + const modelAlias = 'MODEL_ALIAS'; // Replace with a valid model alias from the list above + + // Load the model first + console.log(`\nLoading model ${modelAlias}...`); + const modelToLoad = await catalog.getModel(modelAlias); + if (!modelToLoad) { + throw new Error(`Model ${modelAlias} not found`); + } + + await modelToLoad.load(); + console.log('✓ Model loaded'); + + // Create chat client + console.log('\nCreating chat client...'); + const chatClient = modelToLoad.createChatClient(); + + // Configure chat settings + chatClient.settings.temperature = 0.7; + chatClient.settings.maxTokens = 800; + + console.log('✓ Chat client created'); + + // Example chat completion + console.log('\nTesting chat completion...'); + const completion = await chatClient.completeChat([ + { role: 'user', content: 'What is the capital of France?' } + ]); + + console.log('\nChat completion result:'); + console.log(completion.choices[0]?.message?.content); + + // Example streaming completion + console.log('\nTesting streaming completion...'); + await chatClient.completeStreamingChat( + [{ role: 'user', content: 'Write a short poem about programming.' }], + (chunk) => { + const content = chunk.choices?.[0]?.message?.content; + if (content) { + process.stdout.write(content); + } + } + ); + console.log('\n'); + + // Model management example + const model = await catalog.getModel(modelAlias); + if (model) { + console.log('\nModel management example:'); + // Already loaded above, but let's check status + console.log(`Checking model: ${model.id}`); + console.log(`✓ Model loaded: ${await model.isLoaded()}`); + + // Unload when done + console.log('Unloading model...'); + await model.unload(); + console.log(`✓ Model loaded: ${await model.isLoaded()}`); + } + + console.log('\n✓ Example completed successfully'); + + } catch (error) { + console.log('Error running example:', error); + // Print stack trace if available + if (error instanceof Error && error.stack) { + console.log(error.stack); + } + process.exit(1); + } +} + +// Run the example +main().catch(console.error); + +export { main }; diff --git a/sdk_v2/js/how-to-publish-dev.md b/sdk_v2/js/how-to-publish-dev.md new file mode 100644 index 0000000..b7b7577 --- /dev/null +++ b/sdk_v2/js/how-to-publish-dev.md @@ -0,0 +1,49 @@ +# How to Publish a Dev Build + +This guide outlines the steps to publish a scoped development build of the Foundry Local SDK to npm. + +## Prerequisites +- An **npm account** (created at npmjs.com) +- An **Access Token** (generated in your npm account settings) + +## Instructions + +### 1. Setup Authentication +First, configure your local npm registry with your authentication token. Replace `{NPM_AUTH_TOKEN}` with your actual token. + +```bash +npm config set //registry.npmjs.org/:_authToken={NPM_AUTH_TOKEN} +``` + +### 2. Initialize Scoped Package +Initialize a new scoped package properly using your npm username. Replace `{USERNAME}` with your npm username. + +```bash +npm init --scope=@{USERNAME} +``` +> **Note:** Follow the interactive prompts to generate a custom `package.json`. + +### 3. Build the Project +Compile the TypeScript source code. + +```bash +npm run build +``` + +### 4. Pack the Artifacts +Create the distribution tarball. This will generate a `.tgz` file containing the `dist/` and `script/` directories, along with the `README.md` and `package.json`. + +```bash +npm pack +``` + +### 5. Publish to npm +Publish the generated tarball to the public registry. Replace `{TGZ_FILEPATH}` with the path to the file generated in the previous step. + +```bash +npm publish {TGZ_FILEPATH} --access public +``` + +--- + + **Reference:** For more details, see the [npm documentation on creating and publishing scoped public packages](https://docs.npmjs.com/creating-and-publishing-scoped-public-packages). diff --git a/sdk_v2/js/package-lock.json b/sdk_v2/js/package-lock.json new file mode 100644 index 0000000..38b195b --- /dev/null +++ b/sdk_v2/js/package-lock.json @@ -0,0 +1,2017 @@ +{ + "name": "@prathikrao/foundry-local-sdk", + "version": "0.0.2", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@prathikrao/foundry-local-sdk", + "version": "0.0.2", + "hasInstallScript": true, + "dependencies": { + "koffi": "^2.9.0" + }, + "devDependencies": { + "@types/chai": "^5.2.3", + "@types/mocha": "^10.0.10", + "@types/node": "^24.10.1", + "chai": "^6.2.1", + "mocha": "^11.7.5", + "tsx": "^4.7.0", + "typedoc": "^0.28.15", + "typescript": "^5.9.3" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.1.tgz", + "integrity": "sha512-HHB50pdsBX6k47S4u5g/CaLjqS3qwaOVE5ILsq64jyzgMhLuCuZ8rGzM9yhsAjfjkbgUPMzZEPa7DAp7yz6vuA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.1.tgz", + "integrity": "sha512-kFqa6/UcaTbGm/NncN9kzVOODjhZW8e+FRdSeypWe6j33gzclHtwlANs26JrupOntlcWmB0u8+8HZo8s7thHvg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.1.tgz", + "integrity": "sha512-45fuKmAJpxnQWixOGCrS+ro4Uvb4Re9+UTieUY2f8AEc+t7d4AaZ6eUJ3Hva7dtrxAAWHtlEFsXFMAgNnGU9uQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.1.tgz", + "integrity": "sha512-LBEpOz0BsgMEeHgenf5aqmn/lLNTFXVfoWMUox8CtWWYK9X4jmQzWjoGoNb8lmAYml/tQ/Ysvm8q7szu7BoxRQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.1.tgz", + "integrity": "sha512-veg7fL8eMSCVKL7IW4pxb54QERtedFDfY/ASrumK/SbFsXnRazxY4YykN/THYqFnFwJ0aVjiUrVG2PwcdAEqQQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.1.tgz", + "integrity": "sha512-+3ELd+nTzhfWb07Vol7EZ+5PTbJ/u74nC6iv4/lwIU99Ip5uuY6QoIf0Hn4m2HoV0qcnRivN3KSqc+FyCHjoVQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.1.tgz", + "integrity": "sha512-/8Rfgns4XD9XOSXlzUDepG8PX+AVWHliYlUkFI3K3GB6tqbdjYqdhcb4BKRd7C0BhZSoaCxhv8kTcBrcZWP+xg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.1.tgz", + "integrity": "sha512-GITpD8dK9C+r+5yRT/UKVT36h/DQLOHdwGVwwoHidlnA168oD3uxA878XloXebK4Ul3gDBBIvEdL7go9gCUFzQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.1.tgz", + "integrity": "sha512-ieMID0JRZY/ZeCrsFQ3Y3NlHNCqIhTprJfDgSB3/lv5jJZ8FX3hqPyXWhe+gvS5ARMBJ242PM+VNz/ctNj//eA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.1.tgz", + "integrity": "sha512-W9//kCrh/6in9rWIBdKaMtuTTzNj6jSeG/haWBADqLLa9P8O5YSRDzgD5y9QBok4AYlzS6ARHifAb75V6G670Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.1.tgz", + "integrity": "sha512-VIUV4z8GD8rtSVMfAj1aXFahsi/+tcoXXNYmXgzISL+KB381vbSTNdeZHHHIYqFyXcoEhu9n5cT+05tRv13rlw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.1.tgz", + "integrity": "sha512-l4rfiiJRN7sTNI//ff65zJ9z8U+k6zcCg0LALU5iEWzY+a1mVZ8iWC1k5EsNKThZ7XCQ6YWtsZ8EWYm7r1UEsg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.1.tgz", + "integrity": "sha512-U0bEuAOLvO/DWFdygTHWY8C067FXz+UbzKgxYhXC0fDieFa0kDIra1FAhsAARRJbvEyso8aAqvPdNxzWuStBnA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.1.tgz", + "integrity": "sha512-NzdQ/Xwu6vPSf/GkdmRNsOfIeSGnh7muundsWItmBsVpMoNPVpM61qNzAVY3pZ1glzzAxLR40UyYM23eaDDbYQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.1.tgz", + "integrity": "sha512-7zlw8p3IApcsN7mFw0O1Z1PyEk6PlKMu18roImfl3iQHTnr/yAfYv6s4hXPidbDoI2Q0pW+5xeoM4eTCC0UdrQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.1.tgz", + "integrity": "sha512-cGj5wli+G+nkVQdZo3+7FDKC25Uh4ZVwOAK6A06Hsvgr8WqBBuOy/1s+PUEd/6Je+vjfm6stX0kmib5b/O2Ykw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.1.tgz", + "integrity": "sha512-z3H/HYI9MM0HTv3hQZ81f+AKb+yEoCRlUby1F80vbQ5XdzEMyY/9iNlAmhqiBKw4MJXwfgsh7ERGEOhrM1niMA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.1.tgz", + "integrity": "sha512-wzC24DxAvk8Em01YmVXyjl96Mr+ecTPyOuADAvjGg+fyBpGmxmcr2E5ttf7Im8D0sXZihpxzO1isus8MdjMCXQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.1.tgz", + "integrity": "sha512-1YQ8ybGi2yIXswu6eNzJsrYIGFpnlzEWRl6iR5gMgmsrR0FcNoV1m9k9sc3PuP5rUBLshOZylc9nqSgymI+TYg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.1.tgz", + "integrity": "sha512-5Z+DzLCrq5wmU7RDaMDe2DVXMRm2tTDvX2KU14JJVBN2CT/qov7XVix85QoJqHltpvAOZUAc3ndU56HSMWrv8g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.1.tgz", + "integrity": "sha512-Q73ENzIdPF5jap4wqLtsfh8YbYSZ8Q0wnxplOlZUOyZy7B4ZKW8DXGWgTCZmF8VWD7Tciwv5F4NsRf6vYlZtqg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.1.tgz", + "integrity": "sha512-ajbHrGM/XiK+sXM0JzEbJAen+0E+JMQZ2l4RR4VFwvV9JEERx+oxtgkpoKv1SevhjavK2z2ReHk32pjzktWbGg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.1.tgz", + "integrity": "sha512-IPUW+y4VIjuDVn+OMzHc5FV4GubIwPnsz6ubkvN8cuhEqH81NovB53IUlrlBkPMEPxvNnf79MGBoz8rZ2iW8HA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.1.tgz", + "integrity": "sha512-RIVRWiljWA6CdVu8zkWcRmGP7iRRIIwvhDKem8UMBjPql2TXM5PkDVvvrzMtj1V+WFPB4K7zkIGM7VzRtFkjdg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.1.tgz", + "integrity": "sha512-2BR5M8CPbptC1AK5JbJT1fWrHLvejwZidKx3UMSF0ecHMa+smhi16drIrCEggkgviBwLYd5nwrFLSl5Kho96RQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.1.tgz", + "integrity": "sha512-d5X6RMYv6taIymSk8JBP+nxv8DQAMY6A51GPgusqLdK9wBz5wWIXy1KjTck6HnjE9hqJzJRdk+1p/t5soSbCtw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@gerrit0/mini-shiki": { + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/@gerrit0/mini-shiki/-/mini-shiki-3.19.0.tgz", + "integrity": "sha512-ZSlWfLvr8Nl0T4iA3FF/8VH8HivYF82xQts2DY0tJxZd4wtXJ8AA0nmdW9lmO4hlrh3f9xNwEPtOgqETPqKwDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/engine-oniguruma": "^3.19.0", + "@shikijs/langs": "^3.19.0", + "@shikijs/themes": "^3.19.0", + "@shikijs/types": "^3.19.0", + "@shikijs/vscode-textmate": "^10.0.2" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@shikijs/engine-oniguruma": { + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.19.0.tgz", + "integrity": "sha512-1hRxtYIJfJSZeM5ivbUXv9hcJP3PWRo5prG/V2sWwiubUKTa+7P62d2qxCW8jiVFX4pgRHhnHNp+qeR7Xl+6kg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.19.0", + "@shikijs/vscode-textmate": "^10.0.2" + } + }, + "node_modules/@shikijs/langs": { + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.19.0.tgz", + "integrity": "sha512-dBMFzzg1QiXqCVQ5ONc0z2ebyoi5BKz+MtfByLm0o5/nbUu3Iz8uaTCa5uzGiscQKm7lVShfZHU1+OG3t5hgwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.19.0" + } + }, + "node_modules/@shikijs/themes": { + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.19.0.tgz", + "integrity": "sha512-H36qw+oh91Y0s6OlFfdSuQ0Ld+5CgB/VE6gNPK+Hk4VRbVG/XQgkjnt4KzfnnoO6tZPtKJKHPjwebOCfjd6F8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.19.0" + } + }, + "node_modules/@shikijs/types": { + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.19.0.tgz", + "integrity": "sha512-Z2hdeEQlzuntf/BZpFG8a+Fsw9UVXdML7w0o3TgSXV3yNESGon+bs9ITkQb3Ki7zxoXOOu5oJWqZ2uto06V9iQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/@shikijs/vscode-textmate": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", + "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/chai": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" + } + }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/mocha": { + "version": "10.0.10", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz", + "integrity": "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "24.10.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz", + "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true, + "license": "ISC" + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chai": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.1.tgz", + "integrity": "sha512-p4Z49OGG5W/WBCPSS/dH3jQ73kD6tiMmUM+bckNK6Jr5JHMG3k9bg/BvKR8lKmtVBKmOiuVaV2ws8s9oSbwysg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/diff": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", + "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/esbuild": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.1.tgz", + "integrity": "sha512-yY35KZckJJuVVPXpvjgxiCuVEJT67F6zDeVTv4rizyPrfGBUpZQsvmxnN+C371c2esD/hNMjj4tpBhuueLN7aA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.1", + "@esbuild/android-arm": "0.27.1", + "@esbuild/android-arm64": "0.27.1", + "@esbuild/android-x64": "0.27.1", + "@esbuild/darwin-arm64": "0.27.1", + "@esbuild/darwin-x64": "0.27.1", + "@esbuild/freebsd-arm64": "0.27.1", + "@esbuild/freebsd-x64": "0.27.1", + "@esbuild/linux-arm": "0.27.1", + "@esbuild/linux-arm64": "0.27.1", + "@esbuild/linux-ia32": "0.27.1", + "@esbuild/linux-loong64": "0.27.1", + "@esbuild/linux-mips64el": "0.27.1", + "@esbuild/linux-ppc64": "0.27.1", + "@esbuild/linux-riscv64": "0.27.1", + "@esbuild/linux-s390x": "0.27.1", + "@esbuild/linux-x64": "0.27.1", + "@esbuild/netbsd-arm64": "0.27.1", + "@esbuild/netbsd-x64": "0.27.1", + "@esbuild/openbsd-arm64": "0.27.1", + "@esbuild/openbsd-x64": "0.27.1", + "@esbuild/openharmony-arm64": "0.27.1", + "@esbuild/sunos-x64": "0.27.1", + "@esbuild/win32-arm64": "0.27.1", + "@esbuild/win32-ia32": "0.27.1", + "@esbuild/win32-x64": "0.27.1" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-tsconfig": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.0.tgz", + "integrity": "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/koffi": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/koffi/-/koffi-2.14.1.tgz", + "integrity": "sha512-IMFL3IbRDXacSIjs7pPbPxgNlJ2hUtawQXU2QPdr6iw38jmv5AesAUG8HPX00xl0PPA2BbEa3noTw1YdHY+gHg==", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "url": "https://buymeacoffee.com/koromix" + } + }, + "node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "uc.micro": "^2.0.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/markdown-it": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "dev": true, + "license": "MIT" + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mocha": { + "version": "11.7.5", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.7.5.tgz", + "integrity": "sha512-mTT6RgopEYABzXWFx+GcJ+ZQ32kp4fMf0xvpZIIfSq9Z8lC/++MtcCnQ9t5FP2veYEP95FIYSvW+U9fV4xrlig==", + "dev": true, + "license": "MIT", + "dependencies": { + "browser-stdout": "^1.3.1", + "chokidar": "^4.0.1", + "debug": "^4.3.5", + "diff": "^7.0.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^10.4.5", + "he": "^1.2.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^9.0.5", + "ms": "^2.1.3", + "picocolors": "^1.1.1", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^9.2.0", + "yargs": "^17.7.2", + "yargs-parser": "^21.1.1", + "yargs-unparser": "^2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/tsx": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", + "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "~0.27.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/typedoc": { + "version": "0.28.15", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.28.15.tgz", + "integrity": "sha512-mw2/2vTL7MlT+BVo43lOsufkkd2CJO4zeOSuWQQsiXoV2VuEn7f6IZp2jsUDPmBMABpgR0R5jlcJ2OGEFYmkyg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@gerrit0/mini-shiki": "^3.17.0", + "lunr": "^2.3.9", + "markdown-it": "^14.1.0", + "minimatch": "^9.0.5", + "yaml": "^2.8.1" + }, + "bin": { + "typedoc": "bin/typedoc" + }, + "engines": { + "node": ">= 18", + "pnpm": ">= 10" + }, + "peerDependencies": { + "typescript": "5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x || 5.9.x" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "dev": true, + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "dev": true, + "license": "MIT" + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/workerpool": { + "version": "9.3.4", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-9.3.4.tgz", + "integrity": "sha512-TmPRQYYSAnnDiEB0P/Ytip7bFGvqnSU6I2BcuSw7Hx+JSg/DsUi5ebYfc8GYaSdpuvOcEs6dXxPurOYpe9QFwg==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yaml": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", + "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/sdk_v2/js/package.json b/sdk_v2/js/package.json new file mode 100644 index 0000000..07e4939 --- /dev/null +++ b/sdk_v2/js/package.json @@ -0,0 +1,31 @@ +{ + "name": "foundry-local-sdk", + "version": "0.8.0", + "description": "Foundry Local JavaScript SDK", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "type": "module", + "files": [ + "dist", "script" + ], + "scripts": { + "build": "tsc -p tsconfig.build.json", + "docs": "typedoc --out docs src", + "example": "tsx examples/chat-completion.ts", + "install": "node script/install.cjs", + "test": "mocha --import=tsx test/**/*.test.ts" + }, + "dependencies": { + "koffi": "^2.9.0" + }, + "devDependencies": { + "@types/chai": "^5.2.3", + "@types/mocha": "^10.0.10", + "@types/node": "^24.10.1", + "chai": "^6.2.1", + "mocha": "^11.7.5", + "tsx": "^4.7.0", + "typedoc": "^0.28.15", + "typescript": "^5.9.3" + } +} diff --git a/sdk_v2/js/script/install.cjs b/sdk_v2/js/script/install.cjs new file mode 100644 index 0000000..124d0c1 --- /dev/null +++ b/sdk_v2/js/script/install.cjs @@ -0,0 +1,134 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +'use strict'; + +const fs = require('fs'); +const path = require('path'); +const os = require('os'); +const { execSync } = require('child_process'); + +// Determine platform +const PLATFORM_MAP = { + 'win32-x64': 'win-x64', + 'win32-arm64': 'win-arm64', + 'linux-x64': 'linux-x64', + 'darwin-arm64': 'osx-arm64', +}; +const platformKey = `${os.platform()}-${os.arch()}`; +const RID = PLATFORM_MAP[platformKey]; + +if (!RID) { + console.warn(`[foundry-local] Unsupported platform: ${platformKey}. Skipping native library installation.`); + process.exit(0); +} + +const BIN_DIR = path.join(__dirname, '..', 'node_modules', 'Microsoft.AI.Foundry.Local'); +const REQUIRED_FILES = [ + 'Microsoft.AI.Foundry.Local.Core.dll', + 'onnxruntime.dll', + 'onnxruntime-genai.dll', +].map(f => f.replace('.dll', os.platform() === 'win32' ? '.dll' : os.platform() === 'darwin' ? '.dylib' : '.so')); + +// When you run npm install --winml, npm does not pass --winml as a command-line argument to your script. +// Instead, it sets an environment variable named npm_config_winml to 'true'. +const useWinML = process.env.npm_config_winml === 'true'; + +console.log(`[foundry-local] WinML enabled: ${useWinML}`); + +// NuGet package definitions +const MAIN_PACKAGE = { + name: useWinML ? 'Microsoft.AI.Foundry.Local.Core.WinML' : 'Microsoft.AI.Foundry.Local.Core', + version: '0.8.2.2', + feed: 'https://pkgs.dev.azure.com/microsoft/windows.ai.toolkit/_packaging/Neutron/nuget/v3/index.json' +}; + +// Check if already installed +if (fs.existsSync(BIN_DIR) && REQUIRED_FILES.every(f => fs.existsSync(path.join(BIN_DIR, f)))) { + console.log(`[foundry-local] Native libraries already installed.`); + process.exit(0); +} + +console.log(`[foundry-local] Installing native libraries for ${RID}...`); + +// Ensure bin directory exists +fs.mkdirSync(BIN_DIR, { recursive: true }); + +const ARTIFACTS = [ + { name: MAIN_PACKAGE.name, files: ['Microsoft.AI.Foundry.Local.Core'] }, + { name: 'Microsoft.ML.OnnxRuntime.Foundry', files: ['onnxruntime'] }, + { name: useWinML ? 'Microsoft.ML.OnnxRuntimeGenAI.WinML' : 'Microsoft.ML.OnnxRuntimeGenAI.Foundry', files: ['onnxruntime-genai'] }, +]; + +// Download and extract using NuGet CLI +function installPackages() { + const tempDir = path.join(__dirname, '..', 'node_modules', 'FoundryLocalCorePath', 'temp'); + + // Clean temp dir + if (fs.existsSync(tempDir)) { + fs.rmSync(tempDir, { recursive: true, force: true }); + } + fs.mkdirSync(tempDir, { recursive: true }); + + console.log(` Installing ${MAIN_PACKAGE.name} version ${MAIN_PACKAGE.version}...`); + + try { + // We install only the main package, dependencies are automatically installed + const cmd = `nuget install ${MAIN_PACKAGE.name} -Version ${MAIN_PACKAGE.version} -Source "${MAIN_PACKAGE.feed}" -OutputDirectory "${tempDir}" -Prerelease -NonInteractive`; + execSync(cmd, { stdio: 'inherit' }); + + // Copy files from installed packages + for (const artifact of ARTIFACTS) { + findAndCopyArtifact(tempDir, artifact); + } + + // Cleanup + try { + fs.rmSync(tempDir, { recursive: true, force: true }); + } catch (e) { + console.warn(` ⚠ Warning: Failed to clean up temporary files: ${e.message}`); + } + + } catch (err) { + throw new Error(`Failed to install packages: ${err.message}`); + } +} + +function findAndCopyArtifact(tempDir, artifact) { + // Find directory starting with package name (e.g. Microsoft.AI.Foundry.Local.Core.0.8.2.2) + const entries = fs.readdirSync(tempDir); + // Sort to get latest version if multiple (though we expect one) + const pkgDirName = entries + .filter(e => e.toLowerCase().startsWith(artifact.name.toLowerCase()) && fs.statSync(path.join(tempDir, e)).isDirectory()) + .sort().pop(); + + if (!pkgDirName) { + console.warn(` ⚠ Package folder not found for ${artifact.name}`); + return; + } + + const installedDir = path.join(tempDir, pkgDirName); + const ext = os.platform() === 'win32' ? '.dll' : os.platform() === 'darwin' ? '.dylib' : '.so'; + const nativeDir = path.join(installedDir, 'runtimes', RID, 'native'); + + for (const fileBase of artifact.files) { + const srcPath = path.join(nativeDir, `${fileBase}${ext}`); + const destPath = path.join(BIN_DIR, `${fileBase}${ext}`); + + if (fs.existsSync(srcPath)) { + fs.copyFileSync(srcPath, destPath); + console.log(` ✓ Installed ${fileBase}${ext} from ${pkgDirName}`); + } else { + console.warn(` ⚠ File not found: ${srcPath}`); + } + } +} + +// Install all packages +try { + installPackages(); + console.log('[foundry-local] ✓ Installation complete.'); +} catch (err) { + console.error('[foundry-local] Installation failed:', err.message); + process.exit(1); +} \ No newline at end of file diff --git a/sdk_v2/js/src/catalog.ts b/sdk_v2/js/src/catalog.ts new file mode 100644 index 0000000..7c14b39 --- /dev/null +++ b/sdk_v2/js/src/catalog.ts @@ -0,0 +1,152 @@ +import { CoreInterop } from './detail/coreInterop.js'; +import { ModelLoadManager } from './detail/modelLoadManager.js'; +import { Model } from './model.js'; +import { ModelVariant } from './modelVariant.js'; +import { ModelInfo } from './types.js'; + +/** + * Represents a catalog of AI models available in the system. + * Provides methods to discover, list, and retrieve models and their variants. + */ +export class Catalog { + private _name: string; + private coreInterop: CoreInterop; + private modelLoadManager: ModelLoadManager; + private _models: Model[] = []; + private modelAliasToModel: Map = new Map(); + private modelIdToModelVariant: Map = new Map(); + private lastFetch: number = 0; + + constructor(coreInterop: CoreInterop, modelLoadManager: ModelLoadManager) { + this.coreInterop = coreInterop; + this.modelLoadManager = modelLoadManager; + this._name = this.coreInterop.executeCommand("get_catalog_name"); + } + + /** + * Gets the name of the catalog. + * @returns The name of the catalog. + */ + public get name(): string { + return this._name; + } + + private async updateModels(): Promise { + // TODO: make this configurable + if ((Date.now() - this.lastFetch) < 6 * 60 * 60 * 1000) { // 6 hours + return; + } + + // Potential network call to fetch model list + const modelListJson = this.coreInterop.executeCommand("get_model_list"); + let modelsInfo: ModelInfo[] = []; + try { + modelsInfo = JSON.parse(modelListJson); + } catch (error) { + throw new Error(`Failed to parse model list JSON: ${error}`); + } + + this.modelAliasToModel.clear(); + this.modelIdToModelVariant.clear(); + this._models = []; + + for (const info of modelsInfo) { + const variant = new ModelVariant(info, this.coreInterop, this.modelLoadManager); + let model = this.modelAliasToModel.get(info.alias); + + if (!model) { + model = new Model(variant); + this.modelAliasToModel.set(info.alias, model); + this._models.push(model); + } else { + model.addVariant(variant); + } + + this.modelIdToModelVariant.set(variant.id, variant); + } + + this.lastFetch = Date.now(); + } + + /** + * Lists all available models in the catalog. + * This method is asynchronous as it may fetch the model list from a remote service or perform file I/O. + * @returns A Promise that resolves to an array of Model objects. + */ + public async getModels(): Promise { + await this.updateModels(); + return this._models; + } + + /** + * Retrieves a model by its alias. + * This method is asynchronous as it may ensure the catalog is up-to-date by fetching from a remote service. + * @param alias - The alias of the model to retrieve. + * @returns A Promise that resolves to the Model object if found, otherwise undefined. + */ + public async getModel(alias: string): Promise { + await this.updateModels(); + return this.modelAliasToModel.get(alias); + } + + /** + * Retrieves a specific model variant by its ID. + * This method is asynchronous as it may ensure the catalog is up-to-date by fetching from a remote service. + * @param modelId - The unique identifier of the model variant. + * @returns A Promise that resolves to the ModelVariant object if found, otherwise undefined. + */ + public async getModelVariant(modelId: string): Promise { + await this.updateModels(); + return this.modelIdToModelVariant.get(modelId); + } + + /** + * Retrieves a list of all locally cached model variants. + * This method is asynchronous as it may involve file I/O or querying the underlying core. + * @returns A Promise that resolves to an array of cached ModelVariant objects. + */ + public async getCachedModels(): Promise { + await this.updateModels(); + const cachedModelListJson = this.coreInterop.executeCommand("get_cached_models"); + let cachedModelIds: string[] = []; + try { + cachedModelIds = JSON.parse(cachedModelListJson); + } catch (error) { + throw new Error(`Failed to parse cached model list JSON: ${error}`); + } + const cachedModels: Set = new Set(); + + for (const modelId of cachedModelIds) { + const variant = this.modelIdToModelVariant.get(modelId); + if (variant) { + cachedModels.add(variant); + } + } + return Array.from(cachedModels); + } + + /** + * Retrieves a list of all currently loaded model variants. + * This operation is asynchronous because checking the loaded status may involve querying + * the underlying core or an external service, which can be an I/O bound operation. + * @returns A Promise that resolves to an array of loaded ModelVariant objects. + */ + public async getLoadedModels(): Promise { + await this.updateModels(); + let loadedModelIds: string[] = []; + try { + loadedModelIds = await this.modelLoadManager.listLoaded(); + } catch (error) { + throw new Error(`Failed to list loaded models: ${error}`); + } + const loadedModels: ModelVariant[] = []; + + for (const modelId of loadedModelIds) { + const variant = this.modelIdToModelVariant.get(modelId); + if (variant) { + loadedModels.push(variant); + } + } + return loadedModels; + } +} \ No newline at end of file diff --git a/sdk_v2/js/src/configuration.ts b/sdk_v2/js/src/configuration.ts new file mode 100644 index 0000000..916c5da --- /dev/null +++ b/sdk_v2/js/src/configuration.ts @@ -0,0 +1,107 @@ +/** + * Configuration options for the Foundry Local SDK. + * Use a plain object with these properties to configure the SDK. + */ +export interface FoundryLocalConfig { + /** + * **REQUIRED** The name of the application using the SDK. + * Used for identifying the application in logs and telemetry. + */ + appName: string; + + /** + * The directory where application data should be stored. + * Optional. Defaults to `{user_home}/.{appName}`. + */ + appDataDir?: string; + + /** + * The directory where models are downloaded and cached. + * Optional. Defaults to `{appDataDir}/cache/models`. + */ + modelCacheDir?: string; + + /** + * The directory where log files are written. + * Optional. Defaults to `{appDataDir}/logs`. + */ + logsDir?: string; + + /** + * The logging level for the SDK. + * Optional. Valid values: 'trace', 'debug', 'info', 'warn', 'error', 'fatal'. + * Defaults to 'warn'. + */ + logLevel?: 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'fatal'; + + /** + * The URL(s) for the local web service to bind to. + * Optional. Multiple URLs can be separated by semicolons. + * Example: "http://127.0.0.1:8080" + */ + webServiceUrls?: string; + + /** + * The external URL if the web service is running in a separate process. + * Optional. This is used to connect to an existing service instance. + */ + serviceEndpoint?: string; + + /** + * The path to the directory containing the native Foundry Local Core libraries. + * Optional. This directory must contain `Microsoft.AI.Foundry.Local.Core`, `onnxruntime`, and `onnxruntime-genai` binaries. + * If not provided, the SDK attempts to discover them in standard locations. + */ + libraryPath?: string; + + /** + * Additional settings to pass to the core. + * Optional. Internal use only. + */ + additionalSettings?: { [key: string]: string }; +} + +// Log level mapping from JS-style to C#-style +const LOG_LEVEL_MAP: { [key: string]: string } = { + 'trace': 'Verbose', + 'debug': 'Debug', + 'info': 'Information', + 'warn': 'Warning', + 'error': 'Error', + 'fatal': 'Fatal' +}; + +// Internal Configuration class (not exported) +export class Configuration { + public params: { [key: string]: string }; + + constructor(config: FoundryLocalConfig) { + if (!config) { + throw new Error("Configuration must be provided."); + } + + if (!config.appName || config.appName.trim() === "") { + throw new Error("appName must be set to a valid application name."); + } + + this.params = { + 'AppName': config.appName + }; + + if (config.appDataDir) this.params['AppDataDir'] = config.appDataDir; + if (config.modelCacheDir) this.params['ModelCacheDir'] = config.modelCacheDir; + if (config.logsDir) this.params['LogsDir'] = config.logsDir; + if (config.logLevel) this.params['LogLevel'] = LOG_LEVEL_MAP[config.logLevel] || config.logLevel; + if (config.webServiceUrls) this.params['WebServiceUrls'] = config.webServiceUrls; + if (config.serviceEndpoint) this.params['WebServiceExternalUrl'] = config.serviceEndpoint; + if (config.libraryPath) this.params['FoundryLocalCorePath'] = config.libraryPath; + + // Flatten additional settings into params + if (config.additionalSettings) { + for (const key in config.additionalSettings) { + this.params[key] = config.additionalSettings[key]; + } + } + } +} + diff --git a/sdk_v2/js/src/detail/coreInterop.ts b/sdk_v2/js/src/detail/coreInterop.ts new file mode 100644 index 0000000..498341f --- /dev/null +++ b/sdk_v2/js/src/detail/coreInterop.ts @@ -0,0 +1,151 @@ +import koffi from 'koffi'; +import path from 'path'; +import fs from 'fs'; +import { fileURLToPath } from 'url'; +import { Configuration } from '../configuration.js'; + +koffi.struct('RequestBuffer', { + Command: 'char*', + CommandLength: 'int32_t', + Data: 'char*', + DataLength: 'int32_t', +}); + +koffi.struct('ResponseBuffer', { + Data: 'void*', + DataLength: 'int32_t', + Error: 'void*', + ErrorLength: 'int32_t', +}); + +const CallbackType = koffi.proto('void CallbackType(void *data, int32_t length, void *userData)'); + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +export class CoreInterop { + private lib: any; + private execute_command: any; + private execute_command_with_callback: any; + + private static _getLibraryExtension(): string { + const platform = process.platform; + if (platform === 'win32') return '.dll'; + if (platform === 'linux') return '.so'; + if (platform === 'darwin') return '.dylib'; + throw new Error(`Unsupported platform: ${platform}`); + } + + private static _resolveDefaultCorePath(): string | null { + // Default path under node_modules/Microsoft.AI.Foundry.Local + const ext = CoreInterop._getLibraryExtension(); + // Get current module's directory path (ES module equivalent of __dirname) + const corePath = path.join(__dirname, '..', '..', 'node_modules', 'Microsoft.AI.Foundry.Local', `Microsoft.AI.Foundry.Local.Core${ext}`); + + if (fs.existsSync(corePath)) { + return corePath; + } + + return null; + } + + constructor(config: Configuration) { + const corePath = config.params['FoundryLocalCorePath'] || CoreInterop._resolveDefaultCorePath(); + + if (!corePath) { + throw new Error("FoundryLocalCorePath not specified in configuration and could not auto-discover binaries. Please run 'npm install' to download native libraries."); + } + + const coreDir = path.dirname(corePath); + const ext = CoreInterop._getLibraryExtension(); + + koffi.load(path.join(coreDir, `onnxruntime${ext}`)); + koffi.load(path.join(coreDir, `onnxruntime-genai${ext}`)); + this.lib = koffi.load(corePath); + + this.execute_command = this.lib.func('void execute_command(RequestBuffer *request, _Inout_ ResponseBuffer *response)'); + this.execute_command_with_callback = this.lib.func('void execute_command_with_callback(RequestBuffer *request, _Inout_ ResponseBuffer *response, CallbackType *callback, void *userData)'); + } + + public executeCommand(command: string, params?: any): string { + const cmdBuf = koffi.alloc('char', command.length + 1); + koffi.encode(cmdBuf, 'char', command, command.length + 1); + + const dataStr = params ? JSON.stringify(params) : ''; + const dataBuf = koffi.alloc('char', dataStr.length + 1); + koffi.encode(dataBuf, 'char', dataStr, dataStr.length + 1); + + const req = { + Command: koffi.address(cmdBuf), + CommandLength: command.length, + Data: koffi.address(dataBuf), + DataLength: dataStr.length + }; + const res = { Data: 0, DataLength: 0, Error: 0, ErrorLength: 0 }; + + this.execute_command(req, res); + + try { + if (res.Error) { + const errorMsg = koffi.decode(res.Error, 'char', res.ErrorLength); + throw new Error(`Command '${command}' failed: ${errorMsg}`); + } + + return res.Data ? koffi.decode(res.Data, 'char', res.DataLength) : ""; + } finally { + // Free the heap-allocated response strings using koffi.free() + // Docs: https://koffi.dev/pointers/#disposable-types + if (res.Data) koffi.free(res.Data); + if (res.Error) koffi.free(res.Error); + } + } + + public executeCommandStreaming(command: string, params: any, callback: (chunk: string) => void): Promise { + const cmdBuf = koffi.alloc('char', command.length + 1); + koffi.encode(cmdBuf, 'char', command, command.length + 1); + + const dataStr = params ? JSON.stringify(params) : ''; + const dataBuf = koffi.alloc('char', dataStr.length + 1); + koffi.encode(dataBuf, 'char', dataStr, dataStr.length + 1); + + const cb = koffi.register((data: any, length: number, userData: any) => { + const chunk = koffi.decode(data, 'char', length); + callback(chunk); + }, koffi.pointer(CallbackType)); + + return new Promise((resolve, reject) => { + const req = { + Command: koffi.address(cmdBuf), + CommandLength: command.length, + Data: koffi.address(dataBuf), + DataLength: dataStr.length + }; + const res = { Data: 0, DataLength: 0, Error: 0, ErrorLength: 0 }; + + this.execute_command_with_callback.async(req, res, cb, null, (err: any) => { + koffi.unregister(cb); + koffi.free(cmdBuf); + koffi.free(dataBuf); + + if (err) { + reject(err); + return; + } + + try { + if (res.Error) { + const errorMsg = koffi.decode(res.Error, 'char', res.ErrorLength); + reject(new Error(`Command '${command}' failed: ${errorMsg}`)); + } else { + resolve(); + } + } finally { + // Free the heap-allocated response strings using koffi.free() + if (res.Data) koffi.free(res.Data); + if (res.Error) koffi.free(res.Error); + } + }); + }); + } + +} diff --git a/sdk_v2/js/src/detail/modelLoadManager.ts b/sdk_v2/js/src/detail/modelLoadManager.ts new file mode 100644 index 0000000..e66f327 --- /dev/null +++ b/sdk_v2/js/src/detail/modelLoadManager.ts @@ -0,0 +1,82 @@ +import { CoreInterop } from './coreInterop.js'; +import packageJson from '../../package.json' with { type: "json" }; +const { version } = packageJson; + +/** + * Manages the loading and unloading of models. + * Handles communication with the core system or an external service (future support). + */ +export class ModelLoadManager { + private coreInterop: CoreInterop; + private externalServiceUrl?: string; + private headers: HeadersInit; + + constructor(coreInterop: CoreInterop, externalServiceUrl?: string) { + this.coreInterop = coreInterop; + this.externalServiceUrl = externalServiceUrl; + this.headers = { + 'User-Agent': `foundry-local-js-sdk/${version}` + }; + } + + /** + * Loads a model into memory. + * @param modelId - The ID of the model to load. + * @throws Error - If loading via external service fails. + */ + public async load(modelId: string): Promise { + if (this.externalServiceUrl) { + const url = new URL(`models/load/${encodeURIComponent(modelId)}`, this.externalServiceUrl); + try { + const response = await fetch(url.toString(), { headers: this.headers }); + if (!response.ok) { + throw new Error(`Error loading model ${modelId} from ${this.externalServiceUrl}: ${response.statusText}`); + } + } catch (error: any) { + throw new Error(`Network error occurred while loading model ${modelId} from ${this.externalServiceUrl}: ${error.message}`); + } + return; + } + this.coreInterop.executeCommand("load_model", { Params: { Model: modelId } }); + } + + /** + * Unloads a model from memory. + * @param modelId - The ID of the model to unload. + * @throws Error - If unloading via external service fails. + */ + public async unload(modelId: string): Promise { + if (this.externalServiceUrl) { + const url = new URL(`models/unload/${encodeURIComponent(modelId)}`, this.externalServiceUrl); + const response = await fetch(url.toString(), { headers: this.headers }); + if (!response.ok) { + throw new Error(`Error unloading model ${modelId} from ${this.externalServiceUrl}: ${response.statusText}`); + } + return; + } + this.coreInterop.executeCommand("unload_model", { Params: { Model: modelId } }); + } + + /** + * Lists the IDs of all currently loaded models. + * @returns An array of loaded model IDs. + * @throws Error - If listing via external service fails or if JSON parsing fails. + */ + public async listLoaded(): Promise { + if (this.externalServiceUrl) { + const url = new URL('models/loaded', this.externalServiceUrl); + const response = await fetch(url.toString(), { headers: this.headers }); + if (!response.ok) { + throw new Error(`Error listing loaded models from ${this.externalServiceUrl}: ${response.statusText}`); + } + const list = await response.json(); + return list || []; + } + const response = this.coreInterop.executeCommand("list_loaded_models"); + try { + return JSON.parse(response); + } catch (error) { + throw new Error(`Failed to decode JSON response: ${error}. Response was: ${response}`); + } + } +} diff --git a/sdk_v2/js/src/foundryLocalManager.ts b/sdk_v2/js/src/foundryLocalManager.ts new file mode 100644 index 0000000..586474a --- /dev/null +++ b/sdk_v2/js/src/foundryLocalManager.ts @@ -0,0 +1,103 @@ +import { Configuration, FoundryLocalConfig } from './configuration.js'; +import { CoreInterop } from './detail/coreInterop.js'; +import { ModelLoadManager } from './detail/modelLoadManager.js'; +import { Catalog } from './catalog.js'; +import { ChatClient } from './openai/chatClient.js'; +import { AudioClient } from './openai/audioClient.js'; + +/** + * The main entry point for the Foundry Local SDK. + * Manages the initialization of the core system and provides access to the Catalog and ModelLoadManager. + */ +export class FoundryLocalManager { + private static instance: FoundryLocalManager; + private config: Configuration; + private coreInterop: CoreInterop; + private _modelLoadManager: ModelLoadManager; + private _catalog: Catalog; + private _urls: string[] = []; + + private constructor(config: Configuration) { + this.config = config; + this.coreInterop = new CoreInterop(this.config); + this.coreInterop.executeCommand("initialize", { Params: this.config.params }); + this._modelLoadManager = new ModelLoadManager(this.coreInterop); + this._catalog = new Catalog(this.coreInterop, this._modelLoadManager); + } + + /** + * Creates the FoundryLocalManager singleton with the provided configuration. + * @param config - The configuration settings for the SDK (plain object). + * @returns The initialized FoundryLocalManager instance. + * @example + * ```typescript + * const manager = FoundryLocalManager.create({ + * appName: 'MyApp', + * logLevel: 'info' + * }); + * ``` + */ + public static create(config: FoundryLocalConfig): FoundryLocalManager { + if (!FoundryLocalManager.instance) { + const internalConfig = new Configuration(config); + FoundryLocalManager.instance = new FoundryLocalManager(internalConfig); + } + return FoundryLocalManager.instance; + } + + /** + * Gets the Catalog instance for discovering and managing models. + * @returns The Catalog instance. + */ + public get catalog(): Catalog { + return this._catalog; + } + + /** + * Gets the URLs where the web service is listening. + * Returns an empty array if the web service is not running. + * @returns An array of URLs. + */ + public get urls(): string[] { + return this._urls; + } + + /** + * Ensures that the necessary execution providers (EPs) are downloaded. + * Also serves as a manual trigger for EP download if ManualEpDownload is enabled. + */ + public ensureEpsDownloaded(): void { + const manualEpDownload = this.config.params["ManualEpDownload"]; + if (manualEpDownload && manualEpDownload.toLowerCase() === "true") { + this.coreInterop.executeCommand("ensure_eps_downloaded"); + } else { + throw new Error("Manual EP download is not enabled in the configuration."); + } + } + + /** + * Starts the local web service. + * Use the `urls` property to retrieve the bound addresses after the service has started. + * If no listener address is configured, the service defaults to `127.0.0.1:0` (binding to a random ephemeral port). + * @throws Error - If starting the service fails. + */ + public startWebService(): void { + const response = this.coreInterop.executeCommand("start_service"); + try { + this._urls = JSON.parse(response); + } catch (error) { + throw new Error(`Failed to decode JSON response from start_service: ${error}. Response was: ${response}`); + } + } + + /** + * Stops the local web service. + * @throws Error - If stopping the service fails. + */ + public stopWebService(): void { + if (this._urls.length > 0) { + this.coreInterop.executeCommand("stop_service"); + this._urls = []; + } + } +} diff --git a/sdk_v2/js/src/imodel.ts b/sdk_v2/js/src/imodel.ts new file mode 100644 index 0000000..3d0844d --- /dev/null +++ b/sdk_v2/js/src/imodel.ts @@ -0,0 +1,18 @@ +import { ChatClient } from './openai/chatClient.js'; +import { AudioClient } from './openai/audioClient.js'; + +export interface IModel { + get id(): string; + get alias(): string; + get isCached(): boolean; + isLoaded(): Promise; + + download(progressCallback?: (progress: number) => void): void; + get path(): string; + load(): Promise; + removeFromCache(): void; + unload(): Promise; + + createChatClient(): ChatClient; + createAudioClient(): AudioClient; +} diff --git a/sdk_v2/js/src/index.ts b/sdk_v2/js/src/index.ts new file mode 100644 index 0000000..2ad30b3 --- /dev/null +++ b/sdk_v2/js/src/index.ts @@ -0,0 +1,10 @@ +export { FoundryLocalManager } from './foundryLocalManager.js'; +export type { FoundryLocalConfig } from './configuration.js'; +export { Catalog } from './catalog.js'; +export { Model } from './model.js'; +export { ModelVariant } from './modelVariant.js'; +export type { IModel } from './imodel.js'; +export { ChatClient } from './openai/chatClient.js'; +export { AudioClient } from './openai/audioClient.js'; +export { ModelLoadManager } from './detail/modelLoadManager.js'; +export type { ModelInfo } from './types.js'; diff --git a/sdk_v2/js/src/model.ts b/sdk_v2/js/src/model.ts new file mode 100644 index 0000000..975ed95 --- /dev/null +++ b/sdk_v2/js/src/model.ts @@ -0,0 +1,149 @@ +import { ModelVariant } from './modelVariant.js'; +import { ChatClient } from './openai/chatClient.js'; +import { AudioClient } from './openai/audioClient.js'; +import { IModel } from './imodel.js'; + +/** + * Represents a high-level AI model that may have multiple variants (e.g., quantized versions, different formats). + * Manages the selection and interaction with a specific model variant. + */ +export class Model implements IModel { + private _alias: string; + + private _variants: ModelVariant[]; + private selectedVariant: ModelVariant; + + constructor(variant: ModelVariant) { + this._alias = variant.alias; + this._variants = [variant]; + this.selectedVariant = variant; + } + + /** + * Adds a new variant to this model. + * Automatically selects the new variant if it is cached and the current one is not. + * @param variant - The model variant to add. + * @throws Error - If the variant's alias does not match the model's alias. + */ + public addVariant(variant: ModelVariant): void { + if (variant.alias !== this._alias) { + throw new Error("Variant alias does not match model alias."); + } + this._variants.push(variant); + + // prefer the highest priority locally cached variant + if (variant.isCached && !this.selectedVariant.isCached) { + this.selectedVariant = variant; + } + } + + /** + * Selects a specific variant by its ID. + * @param modelId - The ID of the variant to select. + * @throws Error - If the variant with the specified ID is not found. + */ + public selectVariant(modelId: string): void { + for (const variant of this._variants) { + if (variant.id === modelId) { + this.selectedVariant = variant; + return; + } + } + throw new Error(`Model variant with id ${modelId} not found.`); + } + + /** + * Gets the ID of the currently selected variant. + * @returns The ID of the selected variant. + */ + public get id(): string { + return this.selectedVariant.id; + } + + /** + * Gets the alias of the model. + * @returns The model alias. + */ + public get alias(): string { + return this._alias; + } + + /** + * Checks if the currently selected variant is cached locally. + * @returns True if cached, false otherwise. + */ + public get isCached(): boolean { + return this.selectedVariant.isCached; + } + + /** + * Checks if the currently selected variant is loaded in memory. + * @returns True if loaded, false otherwise. + */ + public async isLoaded(): Promise { + return await this.selectedVariant.isLoaded(); + } + + /** + * Gets all available variants for this model. + * @returns An array of ModelVariant objects. + */ + public get variants(): ModelVariant[] { + return this._variants; + } + + /** + * Downloads the currently selected variant. + * @param progressCallback - Optional callback to report download progress. + */ + public download(progressCallback?: (progress: number) => void): void { + this.selectedVariant.download(progressCallback); + } + + /** + * Gets the local file path of the currently selected variant. + * @returns The local file path. + */ + public get path(): string { + return this.selectedVariant.path; + } + + /** + * Loads the currently selected variant into memory. + * @returns A promise that resolves when the model is loaded. + */ + public async load(): Promise { + await this.selectedVariant.load(); + } + + /** + * Removes the currently selected variant from the local cache. + */ + public removeFromCache(): void { + this.selectedVariant.removeFromCache(); + } + + /** + * Unloads the currently selected variant from memory. + * @returns A promise that resolves when the model is unloaded. + */ + public async unload(): Promise { + this.selectedVariant.unload(); + } + + /** + * Creates a ChatClient for interacting with the model via chat completions. + * @returns A ChatClient instance. + */ + public createChatClient(): ChatClient { + return this.selectedVariant.createChatClient(); + } + + /** + * Creates an AudioClient for interacting with the model via audio operations. + * @returns An AudioClient instance. + */ + public createAudioClient(): AudioClient { + return this.selectedVariant.createAudioClient(); + } +} diff --git a/sdk_v2/js/src/modelVariant.ts b/sdk_v2/js/src/modelVariant.ts new file mode 100644 index 0000000..a34134e --- /dev/null +++ b/sdk_v2/js/src/modelVariant.ts @@ -0,0 +1,126 @@ +import { CoreInterop } from './detail/coreInterop.js'; +import { ModelLoadManager } from './detail/modelLoadManager.js'; +import { ModelInfo } from './types.js'; +import { ChatClient } from './openai/chatClient.js'; +import { AudioClient } from './openai/audioClient.js'; +import { IModel } from './imodel.js'; + +/** + * Represents a specific variant of a model (e.g., a specific quantization or format). + * Contains the low-level implementation for interacting with the model. + */ +export class ModelVariant implements IModel { + private _modelInfo: ModelInfo; + private coreInterop: CoreInterop; + private modelLoadManager: ModelLoadManager; + + constructor(modelInfo: ModelInfo, coreInterop: CoreInterop, modelLoadManager: ModelLoadManager) { + this._modelInfo = modelInfo; + this.coreInterop = coreInterop; + this.modelLoadManager = modelLoadManager; + } + + /** + * Gets the unique identifier of the model variant. + * @returns The model ID. + */ + public get id(): string { + return this._modelInfo.id; + } + + /** + * Gets the alias of the model. + * @returns The model alias. + */ + public get alias(): string { + return this._modelInfo.alias; + } + + /** + * Gets the detailed information about the model variant. + * @returns The ModelInfo object. + */ + public get modelInfo(): ModelInfo { + return this._modelInfo; + } + + /** + * Checks if the model variant is cached locally. + * @returns True if cached, false otherwise. + */ + public get isCached(): boolean { + const cachedModels: string[] = JSON.parse(this.coreInterop.executeCommand("get_cached_models")); + return cachedModels.includes(this._modelInfo.id); + } + + /** + * Checks if the model variant is loaded in memory. + * @returns True if loaded, false otherwise. + */ + public async isLoaded(): Promise { + const loadedModels = await this.modelLoadManager.listLoaded(); + return loadedModels.includes(this._modelInfo.id); + } + + /** + * Downloads the model variant. + * @param progressCallback - Optional callback to report download progress. + * @throws Error - If progress callback is provided (not implemented). + */ + public download(progressCallback?: (progress: number) => void): void { + const request = { Params: { Model: this._modelInfo.id } }; + if (!progressCallback) { + this.coreInterop.executeCommand("download_model", request); + } else { + throw new Error("Download with progress callback is not implemented yet."); + } + } + + /** + * Gets the local file path of the model variant. + * @returns The local file path. + */ + public get path(): string { + const request = { Params: { Model: this._modelInfo.id } }; + return this.coreInterop.executeCommand("get_model_path", request); + } + + /** + * Loads the model variant into memory. + * @returns A promise that resolves when the model is loaded. + */ + public async load(): Promise { + await this.modelLoadManager.load(this._modelInfo.id); + } + + /** + * Removes the model variant from the local cache. + */ + public removeFromCache(): void { + this.coreInterop.executeCommand("remove_cached_model", { Params: { Model: this._modelInfo.id } }); + } + + /** + * Unloads the model variant from memory. + * @returns A promise that resolves when the model is unloaded. + */ + public async unload(): Promise { + await this.modelLoadManager.unload(this._modelInfo.id); + } + + /** + * Creates a ChatClient for interacting with the model via chat completions. + * @returns A ChatClient instance. + */ + public createChatClient(): ChatClient { + return new ChatClient(this._modelInfo.id, this.coreInterop); + } + + /** + * Creates an AudioClient for interacting with the model via audio operations. + * @returns An AudioClient instance. + */ + public createAudioClient(): AudioClient { + return new AudioClient(this._modelInfo.id, this.coreInterop); + } +} diff --git a/sdk_v2/js/src/openai/audioClient.ts b/sdk_v2/js/src/openai/audioClient.ts new file mode 100644 index 0000000..eec7e4f --- /dev/null +++ b/sdk_v2/js/src/openai/audioClient.ts @@ -0,0 +1,37 @@ +import { CoreInterop } from '../detail/coreInterop.js'; + +/** + * Client for performing audio operations (transcription, translation) with a loaded model. + * Follows the OpenAI Audio API structure. + */ +export class AudioClient { + private modelId: string; + private coreInterop: CoreInterop; + + constructor(modelId: string, coreInterop: CoreInterop) { + this.modelId = modelId; + this.coreInterop = coreInterop; + } + + /** + * Transcribes audio into the input language. + * @param audioFile - The audio file to transcribe. + * @param options - Optional parameters for transcription. + * @returns The transcription result. + * @throws Error - Not implemented. + */ + public async transcribe(audioFile: any, options?: any): Promise { + throw new Error("Synchronous audio transcription is not implemented."); + } + + /** + * Transcribes audio into the input language using streaming. + * @param audioFile - The audio file to transcribe. + * @param options - Optional parameters for transcription. + * @returns The transcription result. + * @throws Error - Not implemented. + */ + public async transcribeStreaming(audioFile: any, options?: any): Promise { + throw new Error("Streaming audio transcription is not implemented yet."); + } +} diff --git a/sdk_v2/js/src/openai/chatClient.ts b/sdk_v2/js/src/openai/chatClient.ts new file mode 100644 index 0000000..3ee08dc --- /dev/null +++ b/sdk_v2/js/src/openai/chatClient.ts @@ -0,0 +1,111 @@ +import { CoreInterop } from '../detail/coreInterop.js'; + +export class ChatClientSettings { + frequencyPenalty?: number; + maxTokens?: number; + n?: number; + temperature?: number; + presencePenalty?: number; + randomSeed?: number; + topK?: number; + topP?: number; + + /** + * Serializes the settings into an OpenAI-compatible request object. + * @internal + */ + _serialize() { + // Standard OpenAI properties + const result: any = { + frequency_penalty: this.frequencyPenalty, + max_tokens: this.maxTokens, + n: this.n, + presence_penalty: this.presencePenalty, + temperature: this.temperature, + top_p: this.topP, + }; + + // Foundry specific metadata properties + const metadata: Record = {}; + if (this.topK !== undefined) { + metadata["top_k"] = this.topK.toString(); + } + if (this.randomSeed !== undefined) { + metadata["random_seed"] = this.randomSeed.toString(); + } + + if (Object.keys(metadata).length > 0) { + result.metadata = metadata; + } + + // Filter out undefined properties + return Object.fromEntries(Object.entries(result).filter(([_, v]) => v !== undefined)); + } +} + +/** + * Client for performing chat completions with a loaded model. + * Follows the OpenAI Chat Completion API structure. + */ +export class ChatClient { + private modelId: string; + private coreInterop: CoreInterop; + + /** + * Configuration settings for chat completions. + */ + public settings = new ChatClientSettings(); + + constructor(modelId: string, coreInterop: CoreInterop) { + this.modelId = modelId; + this.coreInterop = coreInterop; + } + + /** + * Performs a synchronous chat completion. + * @param messages - An array of message objects (e.g., { role: 'user', content: 'Hello' }). + * @returns The chat completion response object. + */ + public async completeChat(messages: any[]): Promise { + const request = { + model: this.modelId, + messages, + // stream is undefined (false) by default + ...this.settings._serialize() + }; + + const response = this.coreInterop.executeCommand("chat_completions", { Params: { OpenAICreateRequest: JSON.stringify(request) } }); + return JSON.parse(response); + } + + /** + * Performs a streaming chat completion. + * @param messages - An array of message objects. + * @param callback - A callback function that receives each chunk of the streaming response. + * @returns A promise that resolves when the stream is complete. + */ + public async completeStreamingChat(messages: any[], callback: (chunk: any) => void): Promise { + const request = { + model: this.modelId, + messages, + stream: true, + ...this.settings._serialize() + }; + + await this.coreInterop.executeCommandStreaming( + "chat_completions", + { Params: { OpenAICreateRequest: JSON.stringify(request) } }, + (chunkStr: string) => { + if (chunkStr) { + try { + const chunk = JSON.parse(chunkStr); + callback(chunk); + } catch (e) { + throw new Error(`Failed completeStreamingChat: ${e}`); + } + } + } + ); + } +} + diff --git a/sdk_v2/js/src/types.ts b/sdk_v2/js/src/types.ts new file mode 100644 index 0000000..f7d8eac --- /dev/null +++ b/sdk_v2/js/src/types.ts @@ -0,0 +1,53 @@ +// adapted from sdk_v2\cs\src\FoundryModelInfo.cs + +export enum DeviceType { + Invalid = 'Invalid', + CPU = 'CPU', + GPU = 'GPU', + NPU = 'NPU' +} + +export interface PromptTemplate { + system?: string | null; + user?: string | null; + assistant: string; + prompt: string; +} + +export interface Runtime { + deviceType: DeviceType; + executionProvider: string; +} + +export interface Parameter { + name: string; + value?: string | null; +} + +export interface ModelSettings { + parameters?: Parameter[] | null; +} + +export interface ModelInfo { + id: string; + name: string; + version: number; + alias: string; + displayName?: string | null; + providerType: string; + uri: string; + modelType: string; + promptTemplate?: PromptTemplate | null; + publisher?: string | null; + modelSettings?: ModelSettings | null; + license?: string | null; + licenseDescription?: string | null; + cached: boolean; + task?: string | null; + runtime?: Runtime | null; + fileSizeMb?: number | null; + supportsToolCalling?: boolean | null; + maxOutputTokens?: number | null; + minFLVersion?: string | null; + createdAtUnix: number; +} diff --git a/sdk_v2/js/test/README.md b/sdk_v2/js/test/README.md new file mode 100644 index 0000000..ebebc78 --- /dev/null +++ b/sdk_v2/js/test/README.md @@ -0,0 +1,41 @@ +# Foundry Local JS SDK Tests + +This directory contains the test suite for the Foundry Local JS SDK. The tests use `mocha` as the test runner and `chai` for assertions. + +## Running Tests + +To run all tests: + +```bash +npm install && npm test +``` + +To run a specific test file: + +```bash +npx mocha --import=tsx test/model.test.ts +``` + +## Adding Local Model Tests + +To add tests that require specific local models: + +1. Ensure the model is available in your configured model cache and set the `modelCacheDir` configuration option. +2. Use the `TEST_MODEL_ALIAS` constant in `testUtils.ts` or define your own alias. +3. In your test, use `catalog.getCachedModels()` to verify the model is available before attempting to load it. + +Example: + +```typescript +it('should run inference on my-model', async function() { + const manager = getTestManager(); + const catalog = manager.getCatalog(); + const model = catalog.getModel('my-model'); + + if (!model) this.skip(); // Skip if model not found + + await model.load(); + // ... run inference ... + await model.unload(); +}); +``` diff --git a/sdk_v2/js/test/catalog.test.ts b/sdk_v2/js/test/catalog.test.ts new file mode 100644 index 0000000..ebb38ef --- /dev/null +++ b/sdk_v2/js/test/catalog.test.ts @@ -0,0 +1,48 @@ +import { describe, it } from 'mocha'; +import { expect } from 'chai'; +import { getTestManager, TEST_MODEL_ALIAS } from './testUtils.js'; + +describe('Catalog Tests', () => { + it('should initialize with catalog name', function() { + const manager = getTestManager(); + const catalog = manager.catalog; + expect(catalog.name).to.be.a('string'); + expect(catalog.name.length).to.be.greaterThan(0); + }); + + it('should list models', async function() { + this.timeout(10000); + const manager = getTestManager(); + const catalog = manager.catalog; + const models = await catalog.getModels(); + + expect(models).to.be.an('array'); + expect(models.length).to.be.greaterThan(0); + + // Verify we can find our test model + const testModel = models.find(m => m.alias === TEST_MODEL_ALIAS); + expect(testModel).to.not.be.undefined; + }); + + it('should get model by alias', async function() { + const manager = getTestManager(); + const catalog = manager.catalog; + const model = await catalog.getModel(TEST_MODEL_ALIAS); + + expect(model).to.not.be.undefined; + expect(model?.alias).to.equal(TEST_MODEL_ALIAS); + }); + + it('should get cached models', async function() { + const manager = getTestManager(); + const catalog = manager.catalog; + const cachedModels = await catalog.getCachedModels(); + + expect(cachedModels).to.be.an('array'); + // We expect at least one cached model since we are pointing to a populated cache + expect(cachedModels.length).to.be.greaterThan(0); + + const testModel = cachedModels.find(m => m.alias === TEST_MODEL_ALIAS); + expect(testModel).to.not.be.undefined; + }); +}); diff --git a/sdk_v2/js/test/detail/modelLoadManager.test.ts b/sdk_v2/js/test/detail/modelLoadManager.test.ts new file mode 100644 index 0000000..32d46f1 --- /dev/null +++ b/sdk_v2/js/test/detail/modelLoadManager.test.ts @@ -0,0 +1,124 @@ +import { expect } from 'chai'; +import { ModelLoadManager } from '../../src/detail/modelLoadManager.js'; +import { getTestManager, TEST_MODEL_ALIAS, IS_RUNNING_IN_CI } from '../testUtils.js'; + +describe('ModelLoadManager', function() { + let coreInterop: any; + let modelId: string; + let managerInstance: any; + let serviceUrl: string; + + before(async function() { + managerInstance = getTestManager(); + // Access private coreInterop using any cast + coreInterop = (managerInstance as any).coreInterop; + + const catalog = managerInstance.catalog; + const model = await catalog.getModel(TEST_MODEL_ALIAS); + if (!model) { + throw new Error(`Model ${TEST_MODEL_ALIAS} not found in catalog`); + } + modelId = model.id; + + // Start the real web service if not in CI + if (!IS_RUNNING_IN_CI) { + try { + managerInstance.startWebService(); + const urls = managerInstance.urls; + if (!urls || urls.length === 0) { + console.warn("Web service started but no URLs returned"); + } else { + serviceUrl = urls[0]; + } + } catch (e: any) { + console.warn(`Skipping web service tests: Failed to start web service (${e.message})`); + // If start_web_service is not supported by the local core binary, we can't run these tests. + } + } + }); + + after(function() { + if (!IS_RUNNING_IN_CI && managerInstance) { + try { + managerInstance.stopWebService(); + } catch (e) { + console.warn("Failed to stop web service:", e); + } + } + }); + + it('should load model using core interop when no external url is provided', async function() { + this.timeout(30000); + const manager = new ModelLoadManager(coreInterop); + + await manager.load(modelId); + + const loaded = await manager.listLoaded(); + expect(loaded).to.include(modelId); + }); + + it('should unload model using core interop when no external url is provided', async function() { + this.timeout(30000); + const manager = new ModelLoadManager(coreInterop); + + await manager.load(modelId); + let loaded = await manager.listLoaded(); + expect(loaded).to.include(modelId); + + await manager.unload(modelId); + + loaded = await manager.listLoaded(); + expect(loaded).to.not.include(modelId); + }); + + it('should list loaded models using core interop when no external url is provided', async function() { + this.timeout(30000); + const manager = new ModelLoadManager(coreInterop); + + await manager.load(modelId); + + const loaded = await manager.listLoaded(); + expect(loaded).to.be.an('array'); + expect(loaded).to.include(modelId); + }); + + it('should load and unload model using external service when url is provided', async function() { + if (IS_RUNNING_IN_CI || !serviceUrl) { + this.skip(); + } + + const manager = new ModelLoadManager(coreInterop, serviceUrl); + + // Load it first so we can unload it (can use core interop to setup state) + // Creating a manager WITHOUT serviceUrl to force core interop usage for setup + const setupManager = new ModelLoadManager(coreInterop); + await setupManager.load(modelId); + + let loaded = await setupManager.listLoaded(); + expect(loaded).to.include(modelId); + + // Unload via external service + await manager.unload(modelId); + + // Verify via core interop + loaded = await setupManager.listLoaded(); + expect(loaded).to.not.include(modelId); + }); + + it('should list loaded models using external service when url is provided', async function() { + if (IS_RUNNING_IN_CI || !serviceUrl) { + this.skip(); + } + + const manager = new ModelLoadManager(coreInterop, serviceUrl); + const setupManager = new ModelLoadManager(coreInterop); + + // Setup: Load model via core + await setupManager.load(modelId); + + // Verify: List via external service + const loaded = await manager.listLoaded(); + expect(loaded).to.be.an('array'); + expect(loaded).to.include(modelId); + }); +}); diff --git a/sdk_v2/js/test/foundryLocalManager.test.ts b/sdk_v2/js/test/foundryLocalManager.test.ts new file mode 100644 index 0000000..5ab4004 --- /dev/null +++ b/sdk_v2/js/test/foundryLocalManager.test.ts @@ -0,0 +1,19 @@ +import { describe, it } from 'mocha'; +import { expect } from 'chai'; +import { getTestManager } from './testUtils.js'; + +describe('Foundry Local Manager Tests', () => { + it('should initialize successfully', function() { + const manager = getTestManager(); + expect(manager).to.not.be.undefined; + }); + + it('should return catalog', function() { + const manager = getTestManager(); + const catalog = manager.catalog; + + expect(catalog).to.not.be.undefined; + // We don't assert the exact name as it might change, but we ensure it exists + expect(catalog.name).to.be.a('string'); + }); +}); diff --git a/sdk_v2/js/test/model.test.ts b/sdk_v2/js/test/model.test.ts new file mode 100644 index 0000000..fda5e9e --- /dev/null +++ b/sdk_v2/js/test/model.test.ts @@ -0,0 +1,172 @@ +import { describe, it } from 'mocha'; +import { expect } from 'chai'; +import { getTestManager, TEST_MODEL_ALIAS } from './testUtils.js'; + +describe('Model Tests', () => { + it('should verify cached models from test-data-shared', async function() { + const manager = getTestManager(); + const catalog = manager.catalog; + const cachedModels = await catalog.getCachedModels(); + + expect(cachedModels).to.be.an('array'); + expect(cachedModels.length).to.be.greaterThan(0); + + // Check for qwen model + const qwenModel = cachedModels.find(m => m.alias === 'qwen2.5-0.5b'); + expect(qwenModel, 'qwen2.5-0.5b should be cached').to.not.be.undefined; + expect(qwenModel?.isCached).to.be.true; + + // Check for whisper model + const whisperModel = cachedModels.find(m => m.alias === 'whisper-tiny'); + expect(whisperModel, 'whisper-tiny should be cached').to.not.be.undefined; + expect(whisperModel?.isCached).to.be.true; + }); + + it('should load and unload model', async function() { + this.timeout(10000); + const manager = getTestManager(); + const catalog = manager.catalog; + + // Ensure cache is populated first + const cachedModels = await catalog.getCachedModels(); + expect(cachedModels.length).to.be.greaterThan(0); + + const cachedVariant = cachedModels.find(m => m.alias === TEST_MODEL_ALIAS); + expect(cachedVariant).to.not.be.undefined; + + const model = await catalog.getModel(TEST_MODEL_ALIAS); + + expect(model).to.not.be.undefined; + if (!model || !cachedVariant) return; + + model.selectVariant(cachedVariant.id); + + // Ensure it's not loaded initially (or unload if it is) + if (await model.isLoaded()) { + await model.unload(); + } + expect(await model.isLoaded()).to.be.false; + + await model.load(); + expect(await model.isLoaded()).to.be.true; + + await model.unload(); + expect(await model.isLoaded()).to.be.false; + }); + + it('should perform chat completion', async function() { + this.timeout(10000); + const manager = getTestManager(); + const catalog = manager.catalog; + + // Ensure cache is populated first + const cachedModels = await catalog.getCachedModels(); + expect(cachedModels.length).to.be.greaterThan(0); + + const cachedVariant = cachedModels.find(m => m.alias === TEST_MODEL_ALIAS); + expect(cachedVariant).to.not.be.undefined; + + const model = await catalog.getModel(TEST_MODEL_ALIAS); + + expect(model).to.not.be.undefined; + if (!model || !cachedVariant) return; + + model.selectVariant(cachedVariant.id); + + await model.load(); + + try { + const client = model.createChatClient(); + + client.settings.maxTokens = 500; + client.settings.temperature = 0.0; // for deterministic results + + const result = await client.completeChat([ + { role: 'user', content: 'You are a calculator. Be precise. What is the answer to 7 multiplied by 6?' } + ]); + + expect(result).to.not.be.undefined; + expect(result.choices).to.be.an('array'); + expect(result.choices.length).to.be.greaterThan(0); + expect(result.choices[0].message).to.not.be.undefined; + expect(result.choices[0].message.content).to.be.a('string'); + console.log(`Response: ${result.choices[0].message.content}`); + expect(result.choices[0].message.content).to.include('42'); + } finally { + await model.unload(); + } + }); + + it('should perform streaming chat completion', async function() { + this.timeout(10000); + const manager = getTestManager(); + const catalog = manager.catalog; + + // Ensure cache is populated first + const cachedModels = await catalog.getCachedModels(); + expect(cachedModels.length).to.be.greaterThan(0); + + const cachedVariant = cachedModels.find(m => m.alias === TEST_MODEL_ALIAS); + expect(cachedVariant).to.not.be.undefined; + + const model = await catalog.getModel(TEST_MODEL_ALIAS); + + expect(model).to.not.be.undefined; + if (!model || !cachedVariant) return; + + model.selectVariant(cachedVariant.id); + + await model.load(); + + try { + const client = model.createChatClient(); + + client.settings.maxTokens = 500; + client.settings.temperature = 0.0; // for deterministic results + + const messages: Array<{ role: string; content: string }> = [ + { role: 'user', content: 'You are a calculator. Be precise. What is the answer to 7 multiplied by 6?' } + ]; + + // First question + let fullContent = ''; + let chunkCount = 0; + + await client.completeStreamingChat(messages, (chunk) => { + chunkCount++; + const content = chunk.choices?.[0]?.delta?.content; + if (content) { + fullContent += content; + } + }); + + expect(chunkCount).to.be.greaterThan(0); + expect(fullContent).to.be.a('string'); + console.log(`First response: ${fullContent}`); + expect(fullContent).to.include('42'); + + // Add assistant's response and ask follow-up question + messages.push({ role: 'assistant', content: fullContent }); + messages.push({ role: 'user', content: 'Add 25 to the previous answer. Think hard to be sure of the answer.' }); + + // Second question + fullContent = ''; + chunkCount = 0; + + await client.completeStreamingChat(messages, (chunk) => { + chunkCount++; + const content = chunk.choices?.[0]?.delta?.content; + if (content) { + fullContent += content; + } + }); + + expect(chunkCount).to.be.greaterThan(0); + expect(fullContent).to.be.a('string'); + console.log(`Second response: ${fullContent}`); + expect(fullContent).to.include('67'); + } finally { + await model.unload(); + } + }); +}); diff --git a/sdk_v2/js/test/testUtils.ts b/sdk_v2/js/test/testUtils.ts new file mode 100644 index 0000000..cd87cd4 --- /dev/null +++ b/sdk_v2/js/test/testUtils.ts @@ -0,0 +1,56 @@ +import type { FoundryLocalConfig } from '../src/configuration.js'; +import { FoundryLocalManager } from '../src/foundryLocalManager.js'; +import path from 'path'; +import fs from 'fs'; + +function getGitRepoRoot(): string { + let current = process.cwd(); + while (true) { + if (fs.existsSync(path.join(current, '.git'))) { + return current; + } + current = path.dirname(current); + } +} + +function getTestDataSharedPath(): string { + // Try to find test-data-shared relative to the git repo root + const repoRoot = getGitRepoRoot(); + const testDataSharedPath = path.join(path.dirname(repoRoot), 'test-data-shared'); + return testDataSharedPath; +} + +function getCoreLibPath(): string { + let ext = ''; + if (process.platform === 'win32') ext = '.dll'; + else if (process.platform === 'linux') ext = '.so'; + else if (process.platform === 'darwin') ext = '.dylib'; + else throw new Error(`Unsupported platform: ${process.platform}`); + + // Look in node_modules/Microsoft.AI.Foundry.Local + const coreDir = path.join(__dirname, '..', 'node_modules', 'Microsoft.AI.Foundry.Local'); + return path.join(coreDir, `Microsoft.AI.Foundry.Local.Core${ext}`); +} + +// Replicates the IsRunningInCI logic from C# utils +function isRunningInCI(): boolean { + const azureDevOps = process.env.TF_BUILD || 'false'; + const githubActions = process.env.GITHUB_ACTIONS || 'false'; + var res = azureDevOps.toLowerCase() === 'true' || githubActions.toLowerCase() === 'true'; + return azureDevOps.toLowerCase() === 'true' || githubActions.toLowerCase() === 'true'; +} + +export const IS_RUNNING_IN_CI = isRunningInCI(); + +export const TEST_CONFIG: FoundryLocalConfig = { + appName: 'FoundryLocalTest', + modelCacheDir: getTestDataSharedPath(), + libraryPath: getCoreLibPath(), + logLevel: 'warn' +}; + +export const TEST_MODEL_ALIAS = 'qwen2.5-0.5b'; + +export function getTestManager() { + return FoundryLocalManager.create(TEST_CONFIG); +} diff --git a/sdk_v2/js/tsconfig.build.json b/sdk_v2/js/tsconfig.build.json new file mode 100644 index 0000000..4ebb99d --- /dev/null +++ b/sdk_v2/js/tsconfig.build.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "rootDir": "./src", + "outDir": "./dist" + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "test", "examples"] +} diff --git a/sdk_v2/js/tsconfig.json b/sdk_v2/js/tsconfig.json new file mode 100644 index 0000000..3bf4b90 --- /dev/null +++ b/sdk_v2/js/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "outDir": "./dist", + "types": ["node", "mocha", "chai"] + }, + "include": ["src/**/*", "test/**/*", "examples/**/*"], + "exclude": ["node_modules"] +}