Skip to content

Commit cbb4776

Browse files
committed
Remove SetCompleter, load from settings.
1 parent 2ddfb52 commit cbb4776

File tree

8 files changed

+17
-23
lines changed

8 files changed

+17
-23
lines changed

src/Infrastructure/BotSharp.Abstraction/Realtime/IRealtimeHub.cs

-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ public interface IRealtimeHub
1212
RealtimeHubConnection SetHubConnection(string conversationId);
1313

1414
IRealTimeCompletion Completer { get; }
15-
IRealTimeCompletion SetCompleter(string provider);
1615

1716
Task ConnectToModel(Func<string, Task> responseToUser);
1817
}

src/Infrastructure/BotSharp.Abstraction/Realtime/Models/RealtimeModelSettings.cs

+3-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@ namespace BotSharp.Abstraction.Realtime.Models;
22

33
public class RealtimeModelSettings
44
{
5-
public bool InterruptResponse { get; set; } = false;
5+
public string Provider { get; set; } = "openai";
6+
public string Model { get; set; } = "gpt-4o-mini-realtime-preview";
7+
public bool InterruptResponse { get; set; } = true;
68
public string InputAudioFormat { get; set; } = "g711_ulaw";
79
public string OutputAudioFormat { get; set; } = "g711_ulaw";
810
public string Voice { get; set; } = "alloy";

src/Infrastructure/BotSharp.Core.Realtime/Services/RealtimeHub.cs

+4-8
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,9 @@ public async Task ConnectToModel(Func<string, Task> responseToUser)
4747
routing.Context.SetMessageId(_conn.ConversationId, dialogs.Last().MessageId);
4848

4949
var states = _services.GetRequiredService<IConversationStateService>();
50-
var realtimeModelSettings = _services.GetRequiredService<RealtimeModelSettings>();
50+
var settings = _services.GetRequiredService<RealtimeModelSettings>();
51+
52+
_completer = _services.GetServices<IRealTimeCompletion>().First(x => x.Provider == settings.Provider);
5153

5254
await _completer.Connect(_conn,
5355
onModelReady: async () =>
@@ -139,7 +141,7 @@ await _completer.Connect(_conn,
139141
},
140142
onUserInterrupted: async () =>
141143
{
142-
if (realtimeModelSettings.InterruptResponse)
144+
if (settings.InterruptResponse)
143145
{
144146
// Reset states
145147
_conn.ResetResponseState();
@@ -159,10 +161,4 @@ public RealtimeHubConnection SetHubConnection(string conversationId)
159161

160162
return _conn;
161163
}
162-
163-
public IRealTimeCompletion SetCompleter(string provider)
164-
{
165-
_completer = _services.GetServices<IRealTimeCompletion>().First(x => x.Provider == provider);
166-
return _completer;
167-
}
168164
}

src/Plugins/BotSharp.Plugin.GoogleAI/Providers/Realtime/RealTimeCompletionProvider.cs

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
using BotSharp.Abstraction.MLTasks.Settings;
21
using GenerativeAI;
32
using GenerativeAI.Core;
43
using GenerativeAI.Live;
@@ -65,8 +64,8 @@ public async Task Connect(RealtimeHubConnection conn,
6564
this.onInputAudioTranscriptionCompleted = onInputAudioTranscriptionCompleted;
6665
this.onUserInterrupted = onUserInterrupted;
6766

68-
var llmProviderService = _services.GetRequiredService<ILlmProviderService>();
69-
_model = llmProviderService.GetProviderModel(Provider, "gemini-2.0", modelType: LlmModelType.Realtime).Name;
67+
var realtimeModelSettings = _services.GetRequiredService<RealtimeModelSettings>();
68+
_model = realtimeModelSettings.Model;
7069

7170
var client = ProviderHelper.GetGeminiClient(Provider, _model, _services);
7271
_chatClient = client.CreateGenerativeModel(_model);

src/Plugins/BotSharp.Plugin.OpenAI/Providers/Realtime/RealTimeCompletionProvider.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ public async Task Connect(RealtimeHubConnection conn,
3939
Action<RoleDialogModel> onInputAudioTranscriptionCompleted,
4040
Action onUserInterrupted)
4141
{
42-
var llmProviderService = _services.GetRequiredService<ILlmProviderService>();
43-
_model = llmProviderService.GetProviderModel(Provider, "gpt-4o", modelType: LlmModelType.Realtime).Name;
42+
var realtimeModelSettings = _services.GetRequiredService<RealtimeModelSettings>();
43+
_model = realtimeModelSettings.Model;
4444

4545
var settingsService = _services.GetRequiredService<ILlmProviderService>();
4646
var settings = settingsService.GetSetting(Provider, _model);

src/Plugins/BotSharp.Plugin.Twilio/TwilioStreamMiddleware.cs

+4-4
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,9 @@ public async Task Invoke(HttpContext httpContext)
5353

5454
private async Task HandleWebSocket(IServiceProvider services, string conversationId, WebSocket webSocket)
5555
{
56+
var settings = services.GetRequiredService<RealtimeModelSettings>();
5657
var hub = services.GetRequiredService<IRealtimeHub>();
5758
var conn = hub.SetHubConnection(conversationId);
58-
var completer = hub.SetCompleter("openai");
5959

6060
// load conversation and state
6161
var convService = services.GetRequiredService<IConversationService>();
@@ -90,18 +90,18 @@ private async Task HandleWebSocket(IServiceProvider services, string conversatio
9090
}
9191
else if (eventType == "user_data_received")
9292
{
93-
await completer.AppenAudioBuffer(data);
93+
await hub.Completer.AppenAudioBuffer(data);
9494
}
9595
else if (eventType == "user_dtmf_receiving")
9696
{
9797
}
9898
else if (eventType == "user_dtmf_received")
9999
{
100-
await HandleUserDtmfReceived(services, conn, completer, data);
100+
await HandleUserDtmfReceived(services, conn, hub.Completer, data);
101101
}
102102
else if (eventType == "user_disconnected")
103103
{
104-
await completer.Disconnect();
104+
await hub.Completer.Disconnect();
105105
await HandleUserDisconnected();
106106
}
107107
} while (!result.CloseStatus.HasValue);

src/WebStarter/WebStarter.csproj

-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
<ItemGroup Condition="$(SolutionName)==PizzaBot">
1212
<PackageReference Include="BotSharp.Logger" />
1313
<PackageReference Include="BotSharp.OpenAPI" />
14-
<PackageReference Include="BotSharp.Core.Realtime" />
1514
<PackageReference Include="BotSharp.Plugin.Dashboard" />
1615
<PackageReference Include="BotSharp.Plugin.AzureOpenAI" />
1716
<PackageReference Include="BotSharp.Plugin.GoogleAI" />

tests/BotSharp.Test.RealtimeVoice/Program.cs

+2-3
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
using BotSharp.Abstraction.Conversations;
44
using BotSharp.OpenAPI;
55
using System.Text.Json;
6-
using Google.Ai.Generativelanguage.V1Beta2;
76

87
var services = ServiceBuilder.CreateHostBuilder();
98
var channel = services.GetRequiredService<IStreamChannel>();
@@ -23,9 +22,9 @@
2322

2423
await channel.ConnectAsync(conv.Id);
2524

25+
var settings = services.GetRequiredService<RealtimeModelSettings>();
2626
var hub = services.GetRequiredService<IRealtimeHub>();
2727
var conn = hub.SetHubConnection(conv.Id);
28-
var completer = hub.SetCompleter("openai");
2928

3029
await hub.ConnectToModel(async data =>
3130
{
@@ -65,7 +64,7 @@ await hub.ConnectToModel(async data =>
6564
var seg = new ArraySegment<byte>(buffer);
6665
result = await channel.ReceiveAsync(seg, CancellationToken.None);
6766

68-
await completer.AppenAudioBuffer(seg, result.Count);
67+
await hub.Completer.AppenAudioBuffer(seg, result.Count);
6968

7069
// Display the audio level
7170
int audioLevel = CalculateAudioLevel(buffer, result.Count);

0 commit comments

Comments
 (0)