Skip to content

Commit 373a32c

Browse files
committed
Merge
2 parents 01ebc64 + 5a0afd2 commit 373a32c

File tree

6 files changed

+53
-49
lines changed

6 files changed

+53
-49
lines changed

README.md

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -45,14 +45,13 @@ kernel.ImportPluginFromObject(
4545

4646
Get the `Transcribe` function from the transcript plugin and invoke it with the context variables.
4747
```csharp
48-
var arguments = new KernelArguments
49-
{
50-
["INPUT"] = "https://storage.googleapis.com/aai-docs-samples/espn.m4a"
51-
};
5248
var result = await kernel.InvokeAsync(
53-
AssemblyAIPlugin.PluginName,
49+
nameof(AssemblyAIPlugin),
5450
AssemblyAIPlugin.TranscribeFunctionName,
55-
arguments
51+
new KernelArguments
52+
{
53+
["INPUT"] = "https://storage.googleapis.com/aai-docs-samples/espn.m4a"
54+
}
5655
);
5756
Console.WriteLine(result.GetValue<string>());
5857
```
@@ -68,17 +67,15 @@ kernel.ImportPluginFromObject(
6867
new TranscriptPlugin(apiKey: apiKey)
6968
{
7069
AllowFileSystemAccess = true
71-
},
72-
AssemblyAIPlugin.PluginName
70+
}
7371
);
74-
var arguments = new KernelArguments
75-
{
76-
["INPUT"] = "https://storage.googleapis.com/aai-docs-samples/espn.m4a"
77-
};
7872
var result = await kernel.InvokeAsync(
79-
AssemblyAIPlugin.PluginName,
73+
nameof(AssemblyAIPlugin),
8074
AssemblyAIPlugin.TranscribeFunctionName,
81-
arguments
75+
new KernelArguments
76+
{
77+
["INPUT"] = "https://storage.googleapis.com/aai-docs-samples/espn.m4a"
78+
}
8279
);
8380
Console.WriteLine(result.GetValue<string>());
8481
```
@@ -88,7 +85,7 @@ You can also invoke the function from within a semantic function like this.
8885
```csharp
8986
const string prompt = """
9087
Here is a transcript:
91-
{{AssemblyAI.Transcribe "https://storage.googleapis.com/aai-docs-samples/espn.m4a"}}
88+
{{AssemblyAIPlugin.Transcribe "https://storage.googleapis.com/aai-docs-samples/espn.m4a"}}
9289
---
9390
Summarize the transcript.
9491
""";

src/AssemblyAI.SemanticKernel/AssemblyAIPlugin.cs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,33 +15,31 @@ namespace AssemblyAI.SemanticKernel
1515
{
1616
public class AssemblyAIPlugin
1717
{
18-
public const string PluginName = "AssemblyAI";
19-
20-
internal AssemblyAIPluginsOptions Options { get; }
18+
internal AssemblyAIPluginOptions Options { get; }
2119

2220
private string ApiKey => Options.ApiKey;
2321

2422
private bool AllowFileSystemAccess => Options.AllowFileSystemAccess;
2523

2624
public AssemblyAIPlugin(string apiKey)
2725
{
28-
Options = new AssemblyAIPluginsOptions
26+
Options = new AssemblyAIPluginOptions
2927
{
3028
ApiKey = apiKey
3129
};
3230
}
3331

3432
public AssemblyAIPlugin(string apiKey, bool allowFileSystemAccess)
3533
{
36-
Options = new AssemblyAIPluginsOptions
34+
Options = new AssemblyAIPluginOptions
3735
{
3836
ApiKey = apiKey,
3937
AllowFileSystemAccess = allowFileSystemAccess
4038
};
4139
}
4240

4341
[ActivatorUtilitiesConstructor]
44-
public AssemblyAIPlugin(IOptions<AssemblyAIPluginsOptions> options)
42+
public AssemblyAIPlugin(IOptions<AssemblyAIPluginOptions> options)
4543
{
4644
Options = options.Value;
4745
}

src/AssemblyAI.SemanticKernel/AssemblyAIPluginsOptions.cs renamed to src/AssemblyAI.SemanticKernel/AssemblyAIPluginOptions.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,14 @@ namespace AssemblyAI.SemanticKernel
33
/// <summary>
44
/// Options to configure the AssemblyAI plugin with.
55
/// </summary>
6-
public class AssemblyAIPluginsOptions
6+
public class AssemblyAIPluginOptions
77
{
8+
/// <summary>
9+
/// The name of the plugin registered into Semantic Kernel.
10+
/// Defaults to "AssemblyAIPlugin".
11+
/// </summary>
12+
public string PluginName { get; set; }
13+
814
/// <summary>
915
/// The AssemblyAI API key. Find your API key at https://www.assemblyai.com/app/account
1016
/// </summary>

src/AssemblyAI.SemanticKernel/Extensions.cs

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using Microsoft.Extensions.DependencyInjection;
44
using Microsoft.Extensions.Options;
55
using Microsoft.SemanticKernel;
6+
67
// ReSharper disable UnusedMember.Global
78
// ReSharper disable MemberCanBePrivate.Global
89

@@ -18,39 +19,39 @@ public static class Extensions
1819
public static IKernelBuilder AddAssemblyAIPlugin(
1920
this IKernelBuilder builder
2021
) => AddAssemblyAIPlugin(builder, "AssemblyAI");
21-
22+
2223
/// <summary>
2324
/// Configure the AssemblyAI plugins using the specified configuration section path.
2425
/// </summary>
2526
/// <param name="builder"></param>
2627
/// <param name="configSectionPath">The path of the configuration section to bind options to</param>
2728
/// <returns></returns>
2829
public static IKernelBuilder AddAssemblyAIPlugin(
29-
this IKernelBuilder builder,
30+
this IKernelBuilder builder,
3031
string configSectionPath
3132
)
3233
{
3334
var services = builder.Services;
34-
var optionsBuilder = services.AddOptions<AssemblyAIPluginsOptions>();
35+
var optionsBuilder = services.AddOptions<AssemblyAIPluginOptions>();
3536
optionsBuilder.BindConfiguration(configSectionPath);
3637
ValidateOptions(optionsBuilder);
3738
AddPlugin(builder);
3839
return builder;
3940
}
40-
41+
4142
/// <summary>
4243
/// Configure the AssemblyAI plugins using the specified configuration section path.
4344
/// </summary>
4445
/// <param name="builder"></param>
4546
/// <param name="configuration">The configuration to bind options to</param>
4647
/// <returns></returns>
4748
public static IKernelBuilder AddAssemblyAIPlugin(
48-
this IKernelBuilder builder,
49+
this IKernelBuilder builder,
4950
IConfiguration configuration
5051
)
5152
{
5253
var services = builder.Services;
53-
var optionsBuilder = services.AddOptions<AssemblyAIPluginsOptions>();
54+
var optionsBuilder = services.AddOptions<AssemblyAIPluginOptions>();
5455
optionsBuilder.Bind(configuration);
5556
ValidateOptions(optionsBuilder);
5657
AddPlugin(builder);
@@ -64,12 +65,12 @@ IConfiguration configuration
6465
/// <param name="options">Options to configure plugin with</param>
6566
/// <returns></returns>
6667
public static IKernelBuilder AddAssemblyAIPlugin(
67-
this IKernelBuilder builder,
68-
AssemblyAIPluginsOptions options
68+
this IKernelBuilder builder,
69+
AssemblyAIPluginOptions options
6970
)
7071
{
7172
var services = builder.Services;
72-
var optionsBuilder = services.AddOptions<AssemblyAIPluginsOptions>();
73+
var optionsBuilder = services.AddOptions<AssemblyAIPluginOptions>();
7374
optionsBuilder.Configure(optionsToConfigure =>
7475
{
7576
optionsToConfigure.ApiKey = options.ApiKey;
@@ -79,7 +80,7 @@ AssemblyAIPluginsOptions options
7980
AddPlugin(builder);
8081
return builder;
8182
}
82-
83+
8384
/// <summary>
8485
/// Configure the AssemblyAI plugins using the specified options.
8586
/// </summary>
@@ -88,11 +89,11 @@ AssemblyAIPluginsOptions options
8889
/// <returns></returns>
8990
public static IKernelBuilder AddAssemblyAIPlugin(
9091
this IKernelBuilder builder,
91-
Action<AssemblyAIPluginsOptions> configureOptions
92+
Action<AssemblyAIPluginOptions> configureOptions
9293
)
9394
{
9495
var services = builder.Services;
95-
var optionsBuilder = services.AddOptions<AssemblyAIPluginsOptions>();
96+
var optionsBuilder = services.AddOptions<AssemblyAIPluginOptions>();
9697
optionsBuilder.Configure(configureOptions);
9798
ValidateOptions(optionsBuilder);
9899
AddPlugin(builder);
@@ -107,28 +108,33 @@ Action<AssemblyAIPluginsOptions> configureOptions
107108
/// <returns></returns>
108109
public static IKernelBuilder AddAssemblyAIPlugin(
109110
this IKernelBuilder builder,
110-
Action<IServiceProvider, AssemblyAIPluginsOptions> configureOptions
111+
Action<IServiceProvider, AssemblyAIPluginOptions> configureOptions
111112
)
112113
{
113114
var services = builder.Services;
114-
var optionsBuilder = services.AddOptions<AssemblyAIPluginsOptions>();
115+
var optionsBuilder = services.AddOptions<AssemblyAIPluginOptions>();
115116
optionsBuilder.Configure<IServiceProvider>((options, provider) => configureOptions(provider, options));
116117
ValidateOptions(optionsBuilder);
117118
AddPlugin(builder);
118119
return builder;
119120
}
120121

121-
private static void ValidateOptions(OptionsBuilder<AssemblyAIPluginsOptions> optionsBuilder)
122+
private static void ValidateOptions(OptionsBuilder<AssemblyAIPluginOptions> optionsBuilder)
122123
{
123124
optionsBuilder.Validate(
124125
options => !string.IsNullOrEmpty(options.ApiKey),
125126
"AssemblyAI:ApiKey must be configured."
126127
);
127128
}
128-
129+
129130
private static void AddPlugin(IKernelBuilder builder)
130131
{
131-
builder.Plugins.AddFromType<AssemblyAIPlugin>(AssemblyAIPlugin.PluginName);
132+
using (var sp = builder.Services.BuildServiceProvider())
133+
{
134+
var config = sp.GetRequiredService<IOptions<AssemblyAIPluginOptions>>().Value;
135+
var pluginName = string.IsNullOrEmpty(config.PluginName) ? null : config.PluginName;
136+
builder.Plugins.AddFromType<AssemblyAIPlugin>(pluginName);
137+
}
132138
}
133139
}
134140
}

src/Sample/FindFilePlugin.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@ namespace AssemblyAI.SemanticKernel.Sample;
66

77
public class FindFilePlugin
88
{
9-
public const string PluginName = nameof(FindFilePlugin);
10-
119
private async Task<string?> GetCommonFolderPath(Kernel kernel, string commonFolderName)
1210
{
1311
var prompt = $"The path for the common folder '{commonFolderName}' " +

src/Sample/Program.cs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -41,21 +41,20 @@ private static Kernel BuildKernel(IConfiguration config)
4141
.AddAssemblyAIPlugin();
4242
var kernel = kernelBuilder.Build();
4343

44-
kernel.ImportPluginFromType<FindFilePlugin>(FindFilePlugin.PluginName);
44+
kernel.ImportPluginFromType<FindFilePlugin>();
4545
return kernel;
4646
}
4747

4848
private static async Task TranscribeFileUsingPluginDirectly(Kernel kernel)
4949
{
5050
Console.WriteLine("Transcribing file using plugin directly");
51-
var arguments = new KernelArguments
52-
{
53-
["INPUT"] = "https://storage.googleapis.com/aai-docs-samples/espn.m4a"
54-
};
5551
var result = await kernel.InvokeAsync(
56-
AssemblyAIPlugin.PluginName,
52+
nameof(AssemblyAIPlugin),
5753
AssemblyAIPlugin.TranscribeFunctionName,
58-
arguments
54+
new KernelArguments
55+
{
56+
["INPUT"] = "https://storage.googleapis.com/aai-docs-samples/espn.m4a"
57+
}
5958
);
6059

6160
Console.WriteLine(result.GetValue<string>());
@@ -69,7 +68,7 @@ private static async Task TranscribeFileUsingPluginFromSemanticFunction(Kernel k
6968
// If `INPUT` is a URL, it'll use `INPUT` as `audioUrl`, otherwise, it'll use `INPUT` as `filePath`.
7069
const string prompt = """
7170
Here is a transcript:
72-
{{AssemblyAI.Transcribe "https://storage.googleapis.com/aai-docs-samples/espn.m4a"}}
71+
{{AssemblyAIPlugin.Transcribe "https://storage.googleapis.com/aai-docs-samples/espn.m4a"}}
7372
---
7473
Summarize the transcript.
7574
""";

0 commit comments

Comments
 (0)