microsoft/teams.net

Public

mirrored from https://github.com/microsoft/teams.netAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
2c577ee20074f919e8043f261124b1d90fc87e9b

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

Libraries/Microsoft.Teams.Extensions.Hosting/Microsoft.Teams.AI.Models.OpenAI.Extensions/ServiceCollection.cs

81lines · modecode

1using Microsoft.Extensions.DependencyInjection;
2using Microsoft.Teams.AI.Prompts;
3using Microsoft.Teams.Common.Logging;
4
5using OpenAI.Chat;
6
7namespace Microsoft.Teams.AI.Models.OpenAI.Extensions;
8
9public static class ServiceCollectionExtensions
10{
11 public static IServiceCollection AddOpenAI(this IServiceCollection collection, OpenAIChatModel model, ChatPromptOptions? options = null)
12 {
13 var prompt = new OpenAIChatPrompt(model, options);
14
15 collection.AddSingleton(model);
16 collection.AddSingleton<IChatModel<ChatCompletionOptions>, OpenAIChatModel>(provider => provider.GetRequiredService<OpenAIChatModel>());
17 collection.AddSingleton(prompt);
18 collection.AddSingleton<IPrompt, OpenAIChatPrompt>(provider => provider.GetRequiredService<OpenAIChatPrompt>());
19 collection.AddSingleton<IChatPrompt, OpenAIChatPrompt>(provider => provider.GetRequiredService<OpenAIChatPrompt>());
20 return collection.AddSingleton<IChatPrompt<ChatCompletionOptions>, OpenAIChatPrompt>(provider => provider.GetRequiredService<OpenAIChatPrompt>());
21 }
22
23 public static IServiceCollection AddOpenAI(this IServiceCollection collection, string model, string apiKey, ChatPromptOptions? options = null)
24 {
25 var chatModel = new OpenAIChatModel(model, apiKey);
26 var prompt = new OpenAIChatPrompt(chatModel, options);
27
28 collection.AddSingleton(chatModel);
29 collection.AddSingleton<IChatModel<ChatCompletionOptions>, OpenAIChatModel>(provider => provider.GetRequiredService<OpenAIChatModel>());
30 collection.AddSingleton(prompt);
31 collection.AddSingleton<IPrompt, OpenAIChatPrompt>(provider => provider.GetRequiredService<OpenAIChatPrompt>());
32 collection.AddSingleton<IChatPrompt, OpenAIChatPrompt>(provider => provider.GetRequiredService<OpenAIChatPrompt>());
33 return collection.AddSingleton<IChatPrompt<ChatCompletionOptions>, OpenAIChatPrompt>(provider => provider.GetRequiredService<OpenAIChatPrompt>());
34 }
35
36 public static IServiceCollection AddOpenAI(this IServiceCollection collection, ChatPromptOptions? options = null)
37 {
38 collection.AddSingleton(provider =>
39 {
40 var logger = provider.GetRequiredService<ILogger>();
41 var settings = provider.GetRequiredService<OpenAISettings>();
42 return new OpenAIChatModel(settings.Model, settings.ApiKey, new() { Logger = logger });
43 });
44
45 collection.AddSingleton<IChatModel<ChatCompletionOptions>, OpenAIChatModel>(provider => provider.GetRequiredService<OpenAIChatModel>());
46 collection.AddSingleton(provider =>
47 {
48 var logger = provider.GetRequiredService<ILogger>();
49 var model = provider.GetRequiredService<OpenAIChatModel>();
50 return new OpenAIChatPrompt(model, (options ?? new()).WithLogger(logger));
51 });
52
53 collection.AddSingleton<IPrompt, OpenAIChatPrompt>(provider => provider.GetRequiredService<OpenAIChatPrompt>());
54 collection.AddSingleton<IChatPrompt, OpenAIChatPrompt>(provider => provider.GetRequiredService<OpenAIChatPrompt>());
55 return collection.AddSingleton<IChatPrompt<ChatCompletionOptions>, OpenAIChatPrompt>(provider => provider.GetRequiredService<OpenAIChatPrompt>());
56 }
57
58 public static IServiceCollection AddOpenAI<T>(this IServiceCollection collection, ChatPromptOptions? options = null) where T : class
59 {
60 collection.AddSingleton<T>();
61 collection.AddSingleton(provider =>
62 {
63 var logger = provider.GetRequiredService<ILogger>();
64 var settings = provider.GetRequiredService<OpenAISettings>();
65 return new OpenAIChatModel(settings.Model, settings.ApiKey, new() { Logger = logger });
66 });
67
68 collection.AddSingleton<IChatModel<ChatCompletionOptions>, OpenAIChatModel>(provider => provider.GetRequiredService<OpenAIChatModel>());
69 collection.AddSingleton(provider =>
70 {
71 var value = provider.GetRequiredService<T>();
72 var logger = provider.GetRequiredService<ILogger>();
73 var model = provider.GetRequiredService<OpenAIChatModel>();
74 return OpenAIChatPrompt.From(model, value, (options ?? new()).WithLogger(logger));
75 });
76
77 collection.AddSingleton<IPrompt, OpenAIChatPrompt>(provider => provider.GetRequiredService<OpenAIChatPrompt>());
78 collection.AddSingleton<IChatPrompt, OpenAIChatPrompt>(provider => provider.GetRequiredService<OpenAIChatPrompt>());
79 return collection.AddSingleton<IChatPrompt<ChatCompletionOptions>, OpenAIChatPrompt>(provider => provider.GetRequiredService<OpenAIChatPrompt>());
80 }
81}