microsoft/teams.net

Public

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

CodeCommitsIssuesPull requestsActionsInsightsSecurity
v2.0.0-preview.6

Branches

Tags

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

Clone

HTTPS

Download ZIP

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

75lines · 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<IChatPrompt>(provider => provider.GetRequiredService<OpenAIChatPrompt>());
19 return collection;
20 }
21
22 public static IServiceCollection AddOpenAI(this IServiceCollection collection, string model, string apiKey, ChatPromptOptions? options = null)
23 {
24 var chatModel = new OpenAIChatModel(model, apiKey);
25 var prompt = new OpenAIChatPrompt(chatModel, options);
26
27 collection.AddSingleton(chatModel);
28 collection.AddSingleton<IChatModel<ChatCompletionOptions>, OpenAIChatModel>(provider => provider.GetRequiredService<OpenAIChatModel>());
29 collection.AddSingleton(prompt);
30 collection.AddSingleton<IChatPrompt>(provider => provider.GetRequiredService<OpenAIChatPrompt>());
31 return collection;
32 }
33
34 public static IServiceCollection AddOpenAI(this IServiceCollection collection, ChatPromptOptions? options = null)
35 {
36 collection.AddSingleton(provider =>
37 {
38 var logger = provider.GetRequiredService<ILogger>();
39 var settings = provider.GetRequiredService<OpenAISettings>();
40 return new OpenAIChatModel(settings.Model, settings.ApiKey, new() { Logger = logger });
41 });
42
43 collection.AddSingleton<IChatModel<ChatCompletionOptions>, OpenAIChatModel>(provider => provider.GetRequiredService<OpenAIChatModel>());
44 collection.AddSingleton<IChatPrompt>(provider =>
45 {
46 var logger = provider.GetRequiredService<ILogger>();
47 var model = provider.GetRequiredService<OpenAIChatModel>();
48 return new OpenAIChatPrompt(model, (options ?? new()).WithLogger(logger));
49 });
50
51 return collection;
52 }
53
54 public static IServiceCollection AddOpenAI<T>(this IServiceCollection collection, ChatPromptOptions? options = null) where T : class
55 {
56 collection.AddSingleton<T>();
57 collection.AddSingleton(provider =>
58 {
59 var logger = provider.GetRequiredService<ILogger>();
60 var settings = provider.GetRequiredService<OpenAISettings>();
61 return new OpenAIChatModel(settings.Model, settings.ApiKey, new() { Logger = logger });
62 });
63
64 collection.AddSingleton<IChatModel<ChatCompletionOptions>, OpenAIChatModel>(provider => provider.GetRequiredService<OpenAIChatModel>());
65 collection.AddSingleton<IChatPrompt>(provider =>
66 {
67 var value = provider.GetRequiredService<T>();
68 var logger = provider.GetRequiredService<ILogger>();
69 var model = provider.GetRequiredService<OpenAIChatModel>();
70 return OpenAIChatPrompt.From(model, value, (options ?? new()).WithLogger(logger));
71 });
72
73 return collection;
74 }
75}