Skip to content

Commit

Permalink
Robch/2403 mar23 nullable (#250)
Browse files Browse the repository at this point in the history
* update details\console stuff to be nullable enabled

* GetOrEmpty

* more GetOrEmpty

* parsers are nullable clean now

* more helpers work nullable

* more GetOrEmpty and nullable work

* more helpers and named values work with nullable

* more token things work with nullable

* more parsers work with nullable

* more parsers and values work with nullable

* commands work with nullable (mostly)

* more nullable works

* more nullable

* a few more ...

* update stopwatch output for telemetry

* better refactoring of AiProgram.Main

* all nullable warnings in common.csproj except ConsoleGui stuff for python wrapped and azcli wrapped are now fixed

* fix bug with program name length and environment named values

* much of test framework nullable warnings removed

* finished test framework nullable warning fixes

* more updates for nullable (wip)

* more speech extension nullable warning fixes
  • Loading branch information
robch authored Mar 28, 2024
1 parent 158df9c commit bbbfabb
Show file tree
Hide file tree
Showing 114 changed files with 1,764 additions and 1,704 deletions.
60 changes: 25 additions & 35 deletions src/ai/Program_AI.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,49 +17,39 @@ public class AiProgram
{
static async Task<int> Main(string[] args)
{
IProgramData data = null;
bool isDebug = args.Length > 0 && args[0] == "debug";
if (isDebug) Console.WriteLine($"StopWatch: Started at {DateTime.Now}");

Stopwatch stopwatch = new Stopwatch();
int exitCode = int.MinValue;
stopwatch.Start();

try
{
bool isDebug = args.Length > 0 && args[0] == "debug";
if (isDebug)
{
Console.WriteLine($"StopWatch: Started at {DateTime.Now}");
}
var exitCode = TryCatchHelpers.TryCatchNoThrow(() => Program.Main(new AiProgramData(), args), -1, out var ex);

stopwatch.Start();
stopwatch.Stop();
var elapsed = stopwatch.Elapsed;
if (isDebug) Console.WriteLine($"StopWatch: Stopped at {DateTime.Now} ({GetStopWatchElapsedAsString(elapsed)})");

data = new AiProgramData();
exitCode = Program.Main(data, args);
stopwatch.Stop();
stopwatch.Restart();
await LogExitEventAsync(elapsed, exitCode);

if (isDebug)
{
Console.WriteLine($"StopWatch: Stopped at {DateTime.Now} ({GetStopWatchElapsedAsString(stopwatch.Elapsed)})");
}
stopwatch.Stop();
if (isDebug) Console.WriteLine($"StopWatch: Telemetry completed at {DateTime.Now} ({GetStopWatchElapsedAsString(stopwatch.Elapsed)})");

return exitCode;
}
catch (Exception)
{
exitCode = -1;
throw;
}
finally
if (ex != null) throw ex;
return exitCode;
}

static async Task LogExitEventAsync(TimeSpan elapsed, int exitCode)
{
if (Program.Telemetry != null)
{
if (data?.Telemetry != null)
Program.Telemetry.LogEvent(new ExitedTelemetryEvent()
{
data.Telemetry.LogEvent(new ExitedTelemetryEvent()
{
ExitCode = exitCode,
Elapsed = stopwatch.Elapsed
});

await data.Telemetry.DisposeAsync()
.ConfigureAwait(false);
}
ExitCode = exitCode,
Elapsed = elapsed
});

await Program.Telemetry.DisposeAsync();
}
}

Expand Down
21 changes: 10 additions & 11 deletions src/ai/commands/chat_command.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,8 @@ namespace Azure.AI.Details.Common.CLI
{
public class ChatCommand : Command
{
internal ChatCommand(ICommandValues values)
internal ChatCommand(ICommandValues values) : base(values)
{
_values = values.ReplaceValues();
_quiet = _values.GetOrDefault("x.quiet", false);
_verbose = _values.GetOrDefault("x.verbose", true);
}
Expand Down Expand Up @@ -1067,35 +1066,35 @@ private void StartCommand()
// _display = new DisplayHelper(_values);

// _output = new OutputHelper(_values);
// _output.StartOutput();
// _output!.StartOutput();

// var id = _values["chat.input.id"];
// _output.EnsureOutputAll("chat.input.id", id);
// _output.EnsureOutputEach("chat.input.id", id);
// _output!.EnsureOutputAll("chat.input.id", id);
// _output!.EnsureOutputEach("chat.input.id", id);

_lock = new SpinLock();
_lock.StartLock();
}

private void StopCommand()
{
_lock.StopLock(5000);
_lock!.StopLock(5000);

LogHelpers.EnsureStopLogFile(_values);
// _output.CheckOutput();
// _output.StopOutput();
// _output!.CheckOutput();
// _output!.StopOutput();

_stopEvent.Set();
}

private SpinLock _lock = null;
private SpinLock? _lock = null;
private readonly bool _quiet = false;
private readonly bool _verbose = false;

private AzureEventSourceListener _azureEventSourceListener;

// OutputHelper _output = null;
// DisplayHelper _display = null;
// OutputHelper? _output = null;
// DisplayHelper? _display = null;

#nullable enable
private int? TryParse(string? s, int? defaultValue)
Expand Down
13 changes: 6 additions & 7 deletions src/ai/commands/dev_command.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,8 @@ namespace Azure.AI.Details.Common.CLI
{
public class DevCommand : Command
{
internal DevCommand(ICommandValues values)
internal DevCommand(ICommandValues values) : base(values)
{
_values = values.ReplaceValues();
_quiet = _values.GetOrDefault("x.quiet", false);
_verbose = _values.GetOrDefault("x.verbose", false);
}
Expand Down Expand Up @@ -206,24 +205,24 @@ private void StartCommand()
// _display = new DisplayHelper(_values);

// _output = new OutputHelper(_values);
// _output.StartOutput();
// _output!.StartOutput();

_lock = new SpinLock();
_lock.StartLock();
}

private void StopCommand()
{
_lock.StopLock(5000);
_lock!.StopLock(5000);

// LogHelpers.EnsureStopLogFile(_values);
// _output.CheckOutput();
// _output.StopOutput();
// _output!.CheckOutput();
// _output!.StopOutput();

_stopEvent.Set();
}

private SpinLock _lock = null;
private SpinLock? _lock = null;
private readonly bool _quiet;
private readonly bool _verbose;
}
Expand Down
3 changes: 1 addition & 2 deletions src/ai/commands/eval_command.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,8 @@ namespace Azure.AI.Details.Common.CLI
{
public class EvalCommand : Command
{
internal EvalCommand(ICommandValues values)
internal EvalCommand(ICommandValues values) : base(values)
{
_values = values.ReplaceValues();
_quiet = _values.GetOrDefault("x.quiet", false);
_verbose = _values.GetOrDefault("x.verbose", true);
}
Expand Down
59 changes: 29 additions & 30 deletions src/ai/commands/init_command.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,8 @@ namespace Azure.AI.Details.Common.CLI
{
public class InitCommand : Command
{
public InitCommand(ICommandValues values)
public InitCommand(ICommandValues values) : base(values)
{
_values = values.ReplaceValues();
_quiet = _values.GetOrDefault("x.quiet", false);
_verbose = _values.GetOrDefault("x.verbose", true);
}
Expand Down Expand Up @@ -533,20 +532,20 @@ private async Task DoInitRootOpenAi(bool interactive, bool skipChat = false, boo
private async Task DoInitOpenAi(bool interactive, bool skipChat = false, bool allowSkipChat = true, bool skipEmbeddings = false, bool allowSkipEmbeddings = true, bool skipEvaluations = false, bool allowSkipEvaluations = true)
{
var subscriptionId = SubscriptionToken.Data().GetOrDefault(_values, "");
var regionFilter = _values.GetOrDefault("init.service.resource.region.name", "");
var groupFilter = _values.GetOrDefault("init.service.resource.group.name", "");
var resourceFilter = _values.GetOrDefault("init.service.cognitiveservices.resource.name", "");
var regionFilter = _values.GetOrEmpty("init.service.resource.region.name");
var groupFilter = _values.GetOrEmpty("init.service.resource.group.name");
var resourceFilter = _values.GetOrEmpty("init.service.cognitiveservices.resource.name");
var kind = _values.GetOrDefault("init.service.cognitiveservices.resource.kind", "OpenAI;AIServices");
var sku = _values.GetOrDefault("init.service.cognitiveservices.resource.sku", Program.CognitiveServiceResourceSku);
var yes = _values.GetOrDefault("init.service.cognitiveservices.terms.agree", false);

var chatDeploymentFilter = _values.GetOrDefault("init.chat.model.deployment.name", "");
var embeddingsDeploymentFilter = _values.GetOrDefault("init.embeddings.model.deployment.name", "");
var evaluationsDeploymentFilter = _values.GetOrDefault("init.evaluation.model.deployment.name", "");
var chatDeploymentFilter = _values.GetOrEmpty("init.chat.model.deployment.name");
var embeddingsDeploymentFilter = _values.GetOrEmpty("init.embeddings.model.deployment.name");
var evaluationsDeploymentFilter = _values.GetOrEmpty("init.evaluation.model.deployment.name");

var chatModelFilter = _values.GetOrDefault("init.chat.model.name", "");
var embeddingsModelFilter = _values.GetOrDefault("init.embeddings.model.name", "");
var evaluationsModelFilter = _values.GetOrDefault("init.evaluation.model.name", "");
var chatModelFilter = _values.GetOrEmpty("init.chat.model.name");
var embeddingsModelFilter = _values.GetOrEmpty("init.embeddings.model.name");
var evaluationsModelFilter = _values.GetOrEmpty("init.evaluation.model.name");

var resource = await AzCliConsoleGui.PickOrCreateAndConfigCognitiveServicesOpenAiKindResource(_values, interactive, subscriptionId, regionFilter, groupFilter, resourceFilter, kind, sku, yes, skipChat, allowSkipChat, skipEmbeddings, allowSkipEmbeddings, skipEvaluations, allowSkipEvaluations, chatDeploymentFilter, embeddingsDeploymentFilter, evaluationsDeploymentFilter, chatModelFilter, embeddingsModelFilter, evaluationsModelFilter);
_values.Reset("service.openai.deployments.picked", "true");
Expand All @@ -571,10 +570,10 @@ private async Task DoInitRootCognitiveServicesAIServicesKind(bool interactive)

private async Task DoInitCognitiveServicesAIServicesKind(bool interactive)
{
var subscriptionId = SubscriptionToken.Data().GetOrDefault(_values, "");
var regionFilter = _values.GetOrDefault("init.service.resource.region.name", "");
var groupFilter = _values.GetOrDefault("init.service.resource.group.name", "");
var resourceFilter = _values.GetOrDefault("init.service.cognitiveservices.resource.name", "");
var subscriptionId = SubscriptionToken.Data().GetOrDefault(_values);
var regionFilter = _values.GetOrEmpty("init.service.resource.region.name");
var groupFilter = _values.GetOrEmpty("init.service.resource.group.name");
var resourceFilter = _values.GetOrEmpty("init.service.cognitiveservices.resource.name");
var kind = _values.GetOrDefault("init.service.cognitiveservices.resource.kind", "AIServices");
var sku = _values.GetOrDefault("init.service.cognitiveservices.resource.sku", Program.CognitiveServiceResourceSku);
var yes = _values.GetOrDefault("init.service.cognitiveservices.terms.agree", false);
Expand Down Expand Up @@ -602,9 +601,9 @@ private async Task DoInitRootCognitiveServicesCognitiveServicesKind(bool interac
private async Task DoInitCognitiveServicesCognitiveServicesKind(bool interactive)
{
var subscriptionId = SubscriptionToken.Data().GetOrDefault(_values, "");
var regionFilter = _values.GetOrDefault("init.service.resource.region.name", "");
var groupFilter = _values.GetOrDefault("init.service.resource.group.name", "");
var resourceFilter = _values.GetOrDefault("init.service.cognitiveservices.resource.name", "");
var regionFilter = _values.GetOrEmpty("init.service.resource.region.name");
var groupFilter = _values.GetOrEmpty("init.service.resource.group.name");
var resourceFilter = _values.GetOrEmpty("init.service.cognitiveservices.resource.name");
var kind = _values.GetOrDefault("init.service.cognitiveservices.resource.kind", "CognitiveServices");
var sku = _values.GetOrDefault("init.service.cognitiveservices.resource.sku", Program.CognitiveServiceResourceSku);
var yes = _values.GetOrDefault("init.service.cognitiveservices.terms.agree", false);
Expand All @@ -630,7 +629,7 @@ private async Task DoInitRootSearch(bool interactive)
private async Task DoInitSearch(bool interactive, bool allowSkipSearch = true)
{
var subscription = SubscriptionToken.Data().GetOrDefault(_values, "");
var location = _values.GetOrDefault("service.resource.region.name", "");
var location = _values.GetOrEmpty("service.resource.region.name");
var groupName = ResourceGroupNameToken.Data().GetOrDefault(_values, "");

var smartName = ResourceNameToken.Data().GetOrDefault(_values);
Expand All @@ -656,9 +655,9 @@ private async Task DoInitRootVision(bool interactive)
private async Task DoInitSpeech(bool interactive)
{
var subscriptionId = SubscriptionToken.Data().GetOrDefault(_values, "");
var regionFilter = _values.GetOrDefault("init.service.resource.region.name", "");
var groupFilter = _values.GetOrDefault("init.service.resource.group.name", "");
var resourceFilter = _values.GetOrDefault("init.service.cognitiveservices.resource.name", "");
var regionFilter = _values.GetOrEmpty("init.service.resource.region.name");
var groupFilter = _values.GetOrEmpty("init.service.resource.group.name");
var resourceFilter = _values.GetOrEmpty("init.service.cognitiveservices.resource.name");
var kind = _values.GetOrDefault("init.service.cognitiveservices.resource.kind", "SpeechServices");
var sku = _values.GetOrDefault("init.service.cognitiveservices.resource.sku", "S0");
var yes = _values.GetOrDefault("init.service.cognitiveservices.terms.agree", false);
Expand All @@ -671,9 +670,9 @@ private async Task DoInitSpeech(bool interactive)
private async Task DoInitVision(bool interactive)
{
var subscriptionId = SubscriptionToken.Data().GetOrDefault(_values, "");
var regionFilter = _values.GetOrDefault("init.service.resource.region.name", "");
var groupFilter = _values.GetOrDefault("init.service.resource.group.name", "");
var resourceFilter = _values.GetOrDefault("init.service.cognitiveservices.resource.name", "");
var regionFilter = _values.GetOrEmpty("init.service.resource.region.name");
var groupFilter = _values.GetOrEmpty("init.service.resource.group.name");
var resourceFilter = _values.GetOrEmpty("init.service.cognitiveservices.resource.name");
var kind = _values.GetOrDefault("init.service.cognitiveservices.resource.kind", "ComputerVision");
var sku = _values.GetOrDefault("init.service.cognitiveservices.resource.sku", "S0");
var yes = _values.GetOrDefault("init.service.cognitiveservices.terms.agree", false);
Expand Down Expand Up @@ -712,24 +711,24 @@ private void StartCommand()
// _display = new DisplayHelper(_values);

// _output = new OutputHelper(_values);
// _output.StartOutput();
// _output!.StartOutput();

_lock = new SpinLock();
_lock.StartLock();
}

private void StopCommand()
{
_lock.StopLock(5000);
_lock!.StopLock(5000);

// LogHelpers.EnsureStopLogFile(_values);
// _output.CheckOutput();
// _output.StopOutput();
// _output!.CheckOutput();
// _output!.StopOutput();

_stopEvent.Set();
}

private SpinLock _lock = null;
private SpinLock? _lock = null;
private readonly bool _quiet = false;
private readonly bool _verbose = false;
}
Expand Down
3 changes: 1 addition & 2 deletions src/ai/commands/language_command.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,8 @@ namespace Azure.AI.Details.Common.CLI
{
public class LanguageCommand : Command
{
internal LanguageCommand(ICommandValues values)
internal LanguageCommand(ICommandValues values) : base(values)
{
_values = values.ReplaceValues();
_quiet = _values.GetOrDefault("x.quiet", false);
_verbose = _values.GetOrDefault("x.verbose", true);
}
Expand Down
3 changes: 2 additions & 1 deletion src/ai/commands/parsers/init_command_parser.cs
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,8 @@ private static INamedValueTokenParser[] GetCommandParsers(ICommandValues values)
return initCommandParsers;
}

return null;
values.AddThrowError("ERROR:", $"Unknown command: {commandName}");
return Array.Empty<INamedValueTokenParser>();
}

#region private data
Expand Down
3 changes: 2 additions & 1 deletion src/ai/commands/parsers/scenario_wizard_command_parser.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,8 @@ private static INamedValueTokenParser[] GetCommandParsers(ICommandValues values)
return ScenarioWizardCommandParsers;
}

return null;
values.AddThrowError("ERROR:", $"Unknown command: {commandName}");
return Array.Empty<INamedValueTokenParser>();
}

#region private data
Expand Down
13 changes: 6 additions & 7 deletions src/ai/commands/scenario_wizard_command.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,8 @@ namespace Azure.AI.Details.Common.CLI
{
public class ScenarioWizardCommand : Command
{
internal ScenarioWizardCommand(ICommandValues values)
internal ScenarioWizardCommand(ICommandValues values) : base(values)
{
_values = values.ReplaceValues();
_quiet = _values.GetOrDefault("x.quiet", false);
_verbose = _values.GetOrDefault("x.verbose", true);
}
Expand Down Expand Up @@ -422,24 +421,24 @@ private void StartCommand()
// _display = new DisplayHelper(_values);

// _output = new OutputHelper(_values);
// _output.StartOutput();
// _output!.StartOutput();

_lock = new SpinLock();
_lock.StartLock();
}

private void StopCommand()
{
_lock.StopLock(5000);
_lock!.StopLock(5000);

// LogHelpers.EnsureStopLogFile(_values);
// _output.CheckOutput();
// _output.StopOutput();
// _output!.CheckOutput();
// _output!.StopOutput();

_stopEvent.Set();
}

private SpinLock _lock = null;
private SpinLock? _lock = null;
private readonly bool _quiet = false;
private readonly bool _verbose = false;
}
Expand Down
Loading

0 comments on commit bbbfabb

Please sign in to comment.