Skip to content

Commit b08b696

Browse files
authored
[gh-flow] Fail to start if settings are missing (autogenhub#43)
1 parent 1ede63f commit b08b696

File tree

6 files changed

+63
-16
lines changed

6 files changed

+63
-16
lines changed
Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,22 @@
1+
using System.ComponentModel.DataAnnotations;
2+
13
namespace Microsoft.AI.DevTeam;
24
public class AzureOptions
35
{
6+
[Required]
47
public string SubscriptionId { get; set; }
8+
[Required]
59
public string Location { get; set; }
10+
[Required]
611
public string ContainerInstancesResourceGroup { get; set; }
12+
[Required]
713
public string FilesShareName { get; set; }
14+
[Required]
815
public string FilesAccountName { get; set; }
16+
[Required]
917
public string FilesAccountKey { get; set; }
10-
public string CosmosConnectionString { get; set; }
18+
[Required]
1119
public string SandboxImage { get; set; }
1220
public string ManagedIdentity { get; set; }
21+
public string CosmosConnectionString { get; set; }
1322
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
1+
using System.ComponentModel.DataAnnotations;
2+
13
namespace Microsoft.AI.DevTeam;
24
public class GithubOptions
35
{
6+
[Required]
47
public string AppKey { get; set; }
8+
[Required]
59
public int AppId { get; set; }
10+
[Required]
611
public long InstallationId { get; set; }
12+
[Required]
713
public string WebhookSecret { get; set; }
814
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,18 @@
1+
using System.ComponentModel.DataAnnotations;
2+
13
namespace Microsoft.AI.DevTeam;
24
public class OpenAIOptions
35
{
6+
[Required]
47
public string ServiceType { get; set; }
8+
[Required]
59
public string ServiceId { get; set; }
10+
[Required]
611
public string DeploymentOrModelId { get; set; }
12+
[Required]
713
public string EmbeddingDeploymentOrModelId { get; set; }
14+
[Required]
815
public string Endpoint { get; set; }
16+
[Required]
917
public string ApiKey { get; set; }
1018
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
1+
using System.ComponentModel.DataAnnotations;
2+
13
namespace Microsoft.AI.DevTeam;
24
public class QdrantOptions
35
{
6+
[Required]
47
public string Endpoint { get; set; }
8+
[Required]
59
public int VectorSize { get; set; }
610
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
1+
using System.ComponentModel.DataAnnotations;
2+
13
namespace Microsoft.AI.DevTeam;
24
public class ServiceOptions
35
{
6+
private string _ingesterUrl;
7+
8+
[Required]
49
public string IngesterUrl { get; set; }
510
}

samples/gh-flow/src/Microsoft.AI.DevTeam/Program.cs

Lines changed: 30 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
using Microsoft.SemanticKernel.Memory;
1313
using Microsoft.SemanticKernel.Connectors.Qdrant;
1414
using Microsoft.SemanticKernel.Connectors.OpenAI;
15+
using System.Configuration;
1516

1617
var builder = WebApplication.CreateBuilder(args);
1718
builder.Services.AddSingleton<WebhookEventProcessor, GithubWebHookProcessor>();
@@ -41,34 +42,47 @@
4142
builder.Services.AddOptions<GithubOptions>()
4243
.Configure<IConfiguration>((settings, configuration) =>
4344
{
44-
configuration.GetSection("GithubOptions").Bind(settings);
45-
});
45+
configuration.GetSection(nameof(GithubOptions)).Bind(settings);
46+
})
47+
.ValidateDataAnnotations()
48+
.ValidateOnStart();
49+
4650
builder.Services.AddOptions<AzureOptions>()
4751
.Configure<IConfiguration>((settings, configuration) =>
4852
{
49-
configuration.GetSection("AzureOptions").Bind(settings);
50-
});
53+
configuration.GetSection(nameof(AzureOptions)).Bind(settings);
54+
})
55+
.ValidateDataAnnotations()
56+
.ValidateOnStart();
57+
5158
builder.Services.AddOptions<OpenAIOptions>()
5259
.Configure<IConfiguration>((settings, configuration) =>
5360
{
54-
configuration.GetSection("OpenAIOptions").Bind(settings);
55-
});
61+
configuration.GetSection(nameof(OpenAIOptions)).Bind(settings);
62+
})
63+
.ValidateDataAnnotations()
64+
.ValidateOnStart();
65+
5666
builder.Services.AddOptions<QdrantOptions>()
5767
.Configure<IConfiguration>((settings, configuration) =>
5868
{
59-
configuration.GetSection("QdrantOptions").Bind(settings);
60-
});
69+
configuration.GetSection(nameof(QdrantOptions)).Bind(settings);
70+
})
71+
.ValidateDataAnnotations()
72+
.ValidateOnStart();
73+
6174
builder.Services.AddOptions<ServiceOptions>()
6275
.Configure<IConfiguration>((settings, configuration) =>
6376
{
64-
configuration.GetSection("ServiceOptions").Bind(settings);
65-
});
77+
configuration.GetSection(nameof(ServiceOptions)).Bind(settings);
78+
})
79+
.ValidateDataAnnotations()
80+
.ValidateOnStart();
6681

6782
builder.Services.AddSingleton<IManageAzure, AzureService>();
6883
builder.Services.AddSingleton<IManageGithub, GithubService>();
6984
builder.Services.AddSingleton<IAnalyzeCode, CodeAnalyzer>();
7085

71-
7286
builder.Host.UseOrleans(siloBuilder =>
7387
{
7488

@@ -91,7 +105,7 @@
91105
.UseEndpoints(endpoints =>
92106
{
93107
var ghOptions = app.Services.GetService<IOptions<GithubOptions>>().Value;
94-
endpoints.MapGitHubWebhooks(secret: ghOptions.WebhookSecret );
108+
endpoints.MapGitHubWebhooks(secret: ghOptions.WebhookSecret);
95109
});
96110

97111
app.Map("/dashboard", x => x.UseOrleansDashboard());
@@ -125,11 +139,12 @@ static Kernel CreateKernel(IServiceProvider provider)
125139
clientOptions.Retry.NetworkTimeout = TimeSpan.FromMinutes(5);
126140
var openAIClient = new OpenAIClient(new Uri(openAiConfig.Endpoint), new AzureKeyCredential(openAiConfig.ApiKey), clientOptions);
127141
var builder = Kernel.CreateBuilder();
128-
builder.Services.AddLogging( c=> c.AddConsole().AddDebug().SetMinimumLevel(LogLevel.Debug));
142+
builder.Services.AddLogging(c => c.AddConsole().AddDebug().SetMinimumLevel(LogLevel.Debug));
129143
builder.Services.AddAzureOpenAIChatCompletion(openAiConfig.DeploymentOrModelId, openAIClient);
130-
builder.Services.ConfigureHttpClientDefaults(c=>
144+
builder.Services.ConfigureHttpClientDefaults(c =>
131145
{
132-
c.AddStandardResilienceHandler().Configure( o=> {
146+
c.AddStandardResilienceHandler().Configure(o =>
147+
{
133148
o.Retry.MaxRetryAttempts = 5;
134149
o.Retry.BackoffType = Polly.DelayBackoffType.Exponential;
135150
});

0 commit comments

Comments
 (0)