From eda329539a70e1a926fba5ccfa383b7a1111227c Mon Sep 17 00:00:00 2001 From: Adam Clark Date: Wed, 17 Apr 2024 05:42:30 +1200 Subject: [PATCH] Windows Example/Debug UI (#252) --- examples/csharp/Genny/.gitignore | 346 ++++++++++++++++++ examples/csharp/Genny/Assets/Screenshot1.PNG | Bin 0 -> 43690 bytes examples/csharp/Genny/Assets/Screenshot2.PNG | Bin 0 -> 23913 bytes examples/csharp/Genny/Genny.sln | 31 ++ examples/csharp/Genny/Genny/App.xaml | 10 + examples/csharp/Genny/Genny/App.xaml.cs | 11 + examples/csharp/Genny/Genny/AssemblyInfo.cs | 10 + .../Genny/Controls/SearchOptionsControl.xaml | 82 +++++ .../Controls/SearchOptionsControl.xaml.cs | 30 ++ examples/csharp/Genny/Genny/Extensions.cs | 50 +++ examples/csharp/Genny/Genny/Genny.csproj | 25 ++ examples/csharp/Genny/Genny/Images/robot.png | Bin 0 -> 6385 bytes examples/csharp/Genny/Genny/Images/user.png | Bin 0 -> 5549 bytes examples/csharp/Genny/Genny/MainWindow.xaml | 72 ++++ .../csharp/Genny/Genny/MainWindow.xaml.cs | 132 +++++++ .../Genny/Genny/Utils/AutoScrollBehavior.cs | 47 +++ .../csharp/Genny/Genny/Utils/RelayCommand.cs | 111 ++++++ .../Genny/Genny/Utils/ShiftEnterBehavior.cs | 66 ++++ .../Genny/ViewModel/ConfigurationModel.cs | 13 + .../Genny/ViewModel/ModelOptionsModel.cs | 14 + .../Genny/Genny/ViewModel/ResultModel.cs | 34 ++ .../Genny/ViewModel/SearchOptionsModel.cs | 132 +++++++ .../Genny/Genny/ViewModel/TokenModel.cs | 4 + .../Genny/Genny/Views/StatefulView.xaml | 80 ++++ .../Genny/Genny/Views/StatefulView.xaml.cs | 196 ++++++++++ .../Genny/Genny/Views/StatelessView.xaml | 80 ++++ .../Genny/Genny/Views/StatelessView.xaml.cs | 171 +++++++++ .../Genny/Genny/Views/TokenizerView.xaml | 33 ++ .../Genny/Genny/Views/TokenizerView.xaml.cs | 93 +++++ examples/csharp/Genny/README.md | 48 +++ .../csharp/{ => HelloPhi2}/HelloPhi2.csproj | 0 examples/csharp/{ => HelloPhi2}/HelloPhi2.sln | 0 examples/csharp/{ => HelloPhi2}/Program.cs | 0 examples/csharp/{ => HelloPhi2}/README.md | 2 +- 34 files changed, 1922 insertions(+), 1 deletion(-) create mode 100644 examples/csharp/Genny/.gitignore create mode 100644 examples/csharp/Genny/Assets/Screenshot1.PNG create mode 100644 examples/csharp/Genny/Assets/Screenshot2.PNG create mode 100644 examples/csharp/Genny/Genny.sln create mode 100644 examples/csharp/Genny/Genny/App.xaml create mode 100644 examples/csharp/Genny/Genny/App.xaml.cs create mode 100644 examples/csharp/Genny/Genny/AssemblyInfo.cs create mode 100644 examples/csharp/Genny/Genny/Controls/SearchOptionsControl.xaml create mode 100644 examples/csharp/Genny/Genny/Controls/SearchOptionsControl.xaml.cs create mode 100644 examples/csharp/Genny/Genny/Extensions.cs create mode 100644 examples/csharp/Genny/Genny/Genny.csproj create mode 100644 examples/csharp/Genny/Genny/Images/robot.png create mode 100644 examples/csharp/Genny/Genny/Images/user.png create mode 100644 examples/csharp/Genny/Genny/MainWindow.xaml create mode 100644 examples/csharp/Genny/Genny/MainWindow.xaml.cs create mode 100644 examples/csharp/Genny/Genny/Utils/AutoScrollBehavior.cs create mode 100644 examples/csharp/Genny/Genny/Utils/RelayCommand.cs create mode 100644 examples/csharp/Genny/Genny/Utils/ShiftEnterBehavior.cs create mode 100644 examples/csharp/Genny/Genny/ViewModel/ConfigurationModel.cs create mode 100644 examples/csharp/Genny/Genny/ViewModel/ModelOptionsModel.cs create mode 100644 examples/csharp/Genny/Genny/ViewModel/ResultModel.cs create mode 100644 examples/csharp/Genny/Genny/ViewModel/SearchOptionsModel.cs create mode 100644 examples/csharp/Genny/Genny/ViewModel/TokenModel.cs create mode 100644 examples/csharp/Genny/Genny/Views/StatefulView.xaml create mode 100644 examples/csharp/Genny/Genny/Views/StatefulView.xaml.cs create mode 100644 examples/csharp/Genny/Genny/Views/StatelessView.xaml create mode 100644 examples/csharp/Genny/Genny/Views/StatelessView.xaml.cs create mode 100644 examples/csharp/Genny/Genny/Views/TokenizerView.xaml create mode 100644 examples/csharp/Genny/Genny/Views/TokenizerView.xaml.cs create mode 100644 examples/csharp/Genny/README.md rename examples/csharp/{ => HelloPhi2}/HelloPhi2.csproj (100%) rename examples/csharp/{ => HelloPhi2}/HelloPhi2.sln (100%) rename examples/csharp/{ => HelloPhi2}/Program.cs (100%) rename examples/csharp/{ => HelloPhi2}/README.md (94%) diff --git a/examples/csharp/Genny/.gitignore b/examples/csharp/Genny/.gitignore new file mode 100644 index 000000000..496192431 --- /dev/null +++ b/examples/csharp/Genny/.gitignore @@ -0,0 +1,346 @@ +## 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/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# 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 + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ +**/Properties/launchSettings.json + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_i.h +*.ilk +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.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 + +# Visual Studio Trace Files +*.e2e + +# 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 + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# 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 +# Note: 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 +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/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 +*.appx + +# 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 + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# 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 +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# 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 + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ +/docs/build +src/TensorFlowNET.Native/bazel-* +src/TensorFlowNET.Native/c_api.h +/.vscode +test/TensorFlowNET.Examples/mnist + + +# training model resources +.resources +/redist +*.xml +*.xsd + +# docs +site/ + +docker-test-output/* diff --git a/examples/csharp/Genny/Assets/Screenshot1.PNG b/examples/csharp/Genny/Assets/Screenshot1.PNG new file mode 100644 index 0000000000000000000000000000000000000000..59ef9f19ad9696f38a2cc101eb9540943b060b45 GIT binary patch literal 43690 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�<~gY~*xOo^ZZPtsWe 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
^RS0SyhHHY>OCcbE2+2t&`WdYS>H{B0j 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 v@Zlb + + + + + diff --git a/examples/csharp/Genny/Genny/App.xaml.cs b/examples/csharp/Genny/Genny/App.xaml.cs new file mode 100644 index 000000000..b6e61e540 --- /dev/null +++ b/examples/csharp/Genny/Genny/App.xaml.cs @@ -0,0 +1,11 @@ +using System.Windows; + +namespace Genny +{ + /// + /// Interaction logic for App.xaml + /// + public partial class App : Application + { + } +} diff --git a/examples/csharp/Genny/Genny/AssemblyInfo.cs b/examples/csharp/Genny/Genny/AssemblyInfo.cs new file mode 100644 index 000000000..b0ec82757 --- /dev/null +++ b/examples/csharp/Genny/Genny/AssemblyInfo.cs @@ -0,0 +1,10 @@ +using System.Windows; + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located + //(used if a resource is not found in the page, + // or application resource dictionaries) + ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located + //(used if a resource is not found in the page, + // app, or any theme specific resource dictionaries) +)] diff --git a/examples/csharp/Genny/Genny/Controls/SearchOptionsControl.xaml b/examples/csharp/Genny/Genny/Controls/SearchOptionsControl.xaml new file mode 100644 index 000000000..2983243b5 --- /dev/null +++ b/examples/csharp/Genny/Genny/Controls/SearchOptionsControl.xaml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/csharp/Genny/Genny/Controls/SearchOptionsControl.xaml.cs b/examples/csharp/Genny/Genny/Controls/SearchOptionsControl.xaml.cs new file mode 100644 index 000000000..6386a43de --- /dev/null +++ b/examples/csharp/Genny/Genny/Controls/SearchOptionsControl.xaml.cs @@ -0,0 +1,30 @@ +using Genny.ViewModel; +using System.Windows; +using System.Windows.Controls; + +namespace Genny.Controls +{ + /// + /// Interaction logic for SearchOptionsControl.xaml + /// + public partial class SearchOptionsControl : UserControl + { + public SearchOptionsControl() + { + InitializeComponent(); + } + + public static readonly DependencyProperty SearchOptionsProperty = + DependencyProperty.Register(nameof(SearchOptions), typeof(SearchOptionsModel), typeof(SearchOptionsControl), new PropertyMetadata(new SearchOptionsModel())); + + + /// + /// Gets or sets the search options. + /// + public SearchOptionsModel SearchOptions + { + get { return (SearchOptionsModel)GetValue(SearchOptionsProperty); } + set { SetValue(SearchOptionsProperty, value); } + } + } +} diff --git a/examples/csharp/Genny/Genny/Extensions.cs b/examples/csharp/Genny/Genny/Extensions.cs new file mode 100644 index 000000000..5074df1e2 --- /dev/null +++ b/examples/csharp/Genny/Genny/Extensions.cs @@ -0,0 +1,50 @@ +using Genny.ViewModel; +using Microsoft.ML.OnnxRuntimeGenAI; +using System.Threading; +using System.Threading.Tasks; +using System.Windows; + +namespace Genny +{ + internal static class Extensions + { + + /// + /// Applies the search options to the generator parameters. + /// + /// The generator parameters. + /// The search options. + internal static void ApplySearchOptions(this GeneratorParams generatorParams, SearchOptionsModel searchOptions) + { + generatorParams.SetSearchOption("top_p", searchOptions.TopP); + generatorParams.SetSearchOption("top_k", searchOptions.TopK); + generatorParams.SetSearchOption("temperature", searchOptions.Temperature); + generatorParams.SetSearchOption("repetition_penalty", searchOptions.RepetitionPenalty); + generatorParams.SetSearchOption("past_present_share_buffer", searchOptions.PastPresentShareBuffer); + generatorParams.SetSearchOption("num_return_sequences", searchOptions.NumReturnSequences); + generatorParams.SetSearchOption("no_repeat_ngram_size", searchOptions.NoRepeatNgramSize); + generatorParams.SetSearchOption("min_length", searchOptions.MinLength); + generatorParams.SetSearchOption("max_length", searchOptions.MaxLength); + generatorParams.SetSearchOption("length_penalty", searchOptions.LengthPenalty); + generatorParams.SetSearchOption("early_stopping", searchOptions.EarlyStopping); + generatorParams.SetSearchOption("do_sample", searchOptions.DoSample); + generatorParams.SetSearchOption("diversity_penalty", searchOptions.DiversityPenalty); + } + + internal static Task EncodeAsync(this Tokenizer tokenizer, string input, CancellationToken cancellationToken = default) + { + return Application.Current.Dispatcher.Invoke(() => + { + return Task.Run(() => tokenizer.Encode(input), cancellationToken); + }); + } + + internal static Task DecodeAsync(this Tokenizer tokenizer, int[] input, CancellationToken cancellationToken = default) + { + return Application.Current.Dispatcher.Invoke(() => + { + return Task.Run(() => tokenizer.Decode(input), cancellationToken); + }); + } + } +} diff --git a/examples/csharp/Genny/Genny/Genny.csproj b/examples/csharp/Genny/Genny/Genny.csproj new file mode 100644 index 000000000..d4928ad9f --- /dev/null +++ b/examples/csharp/Genny/Genny/Genny.csproj @@ -0,0 +1,25 @@ + + + + WinExe + net6.0-windows + disable + disable + true + true + x64 + x64 + Debug;Release;Debug_Cuda;Release_Cuda; + + + + + + + + + + + + + diff --git a/examples/csharp/Genny/Genny/Images/robot.png b/examples/csharp/Genny/Genny/Images/robot.png new file mode 100644 index 0000000000000000000000000000000000000000..96edd0fb10ab348145197798f4ced7abee3230d2 GIT binary patch literal 6385 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 literal 0 HcmV?d00001 diff --git a/examples/csharp/Genny/Genny/Images/user.png b/examples/csharp/Genny/Genny/Images/user.png new file mode 100644 index 0000000000000000000000000000000000000000..dcaf32f5941ff7994f880d3f5feb4c0aa580e5fa GIT binary patch literal 5549 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 + + + + + + + + + +