private static async Task PickOrCreateAiHubResource()

in src/common/details/ai_python_generative_sdk/AiSdkConsoleGui_PickOrCreateAiHubResource.cs [36:111]


        private static async Task<(AiHubResourceInfo, bool)> PickOrCreateAiHubResource(bool allowCreate, ICommandValues values, string subscription)
        {
            ConsoleHelpers.WriteLineWithHighlight($"\n`AZURE AI RESOURCE`");
            Console.Write("\rName: *** Loading choices ***");

            var json = PythonSDKWrapper.ListResources(values, subscription);
            if (Program.Debug) Console.WriteLine(json);

            var parsed = !string.IsNullOrEmpty(json) ? JsonDocument.Parse(json) : default;
            var items = parsed?.GetPropertyArrayOrEmpty("resources") ?? Array.Empty<JsonElement>();

            var choices = new List<string>();
            foreach (var item in items)
            {
                var name = item.GetPropertyStringOrNull("name");
                var location = item.GetPropertyStringOrNull("location");
                var displayName = item.GetPropertyStringOrNull("display_name");

                choices.Add(string.IsNullOrEmpty(displayName)
                    ? $"{name} ({location})"
                    : $"{displayName} ({location})");
            }

            if (allowCreate)
            {
                choices.Insert(0, "(Create w/ integrated Open AI + AI Services)");
                choices.Insert(1, "(Create w/ standalone Open AI resource)");
            }

            if (choices.Count == 0)
            {
                throw new ApplicationException($"CANCELED: No resources found");
            }

            Console.Write("\rName: ");
            var picked = ListBoxPicker.PickIndexOf(choices.ToArray());
            if (picked < 0)
            {
                throw new OperationCanceledException($"CANCELED: No resource selected");
            }

            Console.WriteLine($"\rName: {choices[picked]}");
            var resource = allowCreate
                ? (picked >= 2 ? items.ToArray()[picked - 2] : default(JsonElement?))
                : items.ToArray()[picked];

            var byoServices = allowCreate && picked == 1;
            if (byoServices)
            {
                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 openAiResource = await AzCliConsoleGui.PickOrCreateAndConfigCognitiveServicesOpenAiKindResource(values, true, subscription, regionFilter, groupFilter, resourceFilter, kind, sku, yes);
                values.Reset("service.openai.deployments.picked", "true");

                ResourceGroupNameToken.Data().Set(values, openAiResource.Group);
                values.Reset("service.resource.region.name", openAiResource.RegionLocation);

                values.Reset("service.openai.endpoint", openAiResource.Endpoint);
                values.Reset("service.openai.key", openAiResource.Key);
                values.Reset("service.openai.resource.id", openAiResource.Id);
                values.Reset("service.openai.resource.kind", openAiResource.Kind);
            }

            var createNewHub = allowCreate && (picked == 0 || picked == 1);
            if (createNewHub)
            {
                resource = await TryCreateAiHubResourceInteractive(values, subscription);
            }

            return (FinishPickOrCreateAiHubResource(values, resource), createNewHub);
        }