Remove SetCompleter, load from settings.
This commit is contained in:
parent
2ddfb5289f
commit
cbb4776532
|
|
@ -12,7 +12,6 @@ public interface IRealtimeHub
|
|||
RealtimeHubConnection SetHubConnection(string conversationId);
|
||||
|
||||
IRealTimeCompletion Completer { get; }
|
||||
IRealTimeCompletion SetCompleter(string provider);
|
||||
|
||||
Task ConnectToModel(Func<string, Task> responseToUser);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,9 @@ namespace BotSharp.Abstraction.Realtime.Models;
|
|||
|
||||
public class RealtimeModelSettings
|
||||
{
|
||||
public bool InterruptResponse { get; set; } = false;
|
||||
public string Provider { get; set; } = "openai";
|
||||
public string Model { get; set; } = "gpt-4o-mini-realtime-preview";
|
||||
public bool InterruptResponse { get; set; } = true;
|
||||
public string InputAudioFormat { get; set; } = "g711_ulaw";
|
||||
public string OutputAudioFormat { get; set; } = "g711_ulaw";
|
||||
public string Voice { get; set; } = "alloy";
|
||||
|
|
|
|||
|
|
@ -47,7 +47,9 @@ public class RealtimeHub : IRealtimeHub
|
|||
routing.Context.SetMessageId(_conn.ConversationId, dialogs.Last().MessageId);
|
||||
|
||||
var states = _services.GetRequiredService<IConversationStateService>();
|
||||
var realtimeModelSettings = _services.GetRequiredService<RealtimeModelSettings>();
|
||||
var settings = _services.GetRequiredService<RealtimeModelSettings>();
|
||||
|
||||
_completer = _services.GetServices<IRealTimeCompletion>().First(x => x.Provider == settings.Provider);
|
||||
|
||||
await _completer.Connect(_conn,
|
||||
onModelReady: async () =>
|
||||
|
|
@ -139,7 +141,7 @@ public class RealtimeHub : IRealtimeHub
|
|||
},
|
||||
onUserInterrupted: async () =>
|
||||
{
|
||||
if (realtimeModelSettings.InterruptResponse)
|
||||
if (settings.InterruptResponse)
|
||||
{
|
||||
// Reset states
|
||||
_conn.ResetResponseState();
|
||||
|
|
@ -159,10 +161,4 @@ public class RealtimeHub : IRealtimeHub
|
|||
|
||||
return _conn;
|
||||
}
|
||||
|
||||
public IRealTimeCompletion SetCompleter(string provider)
|
||||
{
|
||||
_completer = _services.GetServices<IRealTimeCompletion>().First(x => x.Provider == provider);
|
||||
return _completer;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
using BotSharp.Abstraction.MLTasks.Settings;
|
||||
using GenerativeAI;
|
||||
using GenerativeAI.Core;
|
||||
using GenerativeAI.Live;
|
||||
|
|
@ -65,8 +64,8 @@ public class GoogleRealTimeProvider : IRealTimeCompletion
|
|||
this.onInputAudioTranscriptionCompleted = onInputAudioTranscriptionCompleted;
|
||||
this.onUserInterrupted = onUserInterrupted;
|
||||
|
||||
var llmProviderService = _services.GetRequiredService<ILlmProviderService>();
|
||||
_model = llmProviderService.GetProviderModel(Provider, "gemini-2.0", modelType: LlmModelType.Realtime).Name;
|
||||
var realtimeModelSettings = _services.GetRequiredService<RealtimeModelSettings>();
|
||||
_model = realtimeModelSettings.Model;
|
||||
|
||||
var client = ProviderHelper.GetGeminiClient(Provider, _model, _services);
|
||||
_chatClient = client.CreateGenerativeModel(_model);
|
||||
|
|
|
|||
|
|
@ -39,8 +39,8 @@ public class RealTimeCompletionProvider : IRealTimeCompletion
|
|||
Action<RoleDialogModel> onInputAudioTranscriptionCompleted,
|
||||
Action onUserInterrupted)
|
||||
{
|
||||
var llmProviderService = _services.GetRequiredService<ILlmProviderService>();
|
||||
_model = llmProviderService.GetProviderModel(Provider, "gpt-4o", modelType: LlmModelType.Realtime).Name;
|
||||
var realtimeModelSettings = _services.GetRequiredService<RealtimeModelSettings>();
|
||||
_model = realtimeModelSettings.Model;
|
||||
|
||||
var settingsService = _services.GetRequiredService<ILlmProviderService>();
|
||||
var settings = settingsService.GetSetting(Provider, _model);
|
||||
|
|
|
|||
|
|
@ -53,9 +53,9 @@ public class TwilioStreamMiddleware
|
|||
|
||||
private async Task HandleWebSocket(IServiceProvider services, string conversationId, WebSocket webSocket)
|
||||
{
|
||||
var settings = services.GetRequiredService<RealtimeModelSettings>();
|
||||
var hub = services.GetRequiredService<IRealtimeHub>();
|
||||
var conn = hub.SetHubConnection(conversationId);
|
||||
var completer = hub.SetCompleter("openai");
|
||||
|
||||
// load conversation and state
|
||||
var convService = services.GetRequiredService<IConversationService>();
|
||||
|
|
@ -90,18 +90,18 @@ public class TwilioStreamMiddleware
|
|||
}
|
||||
else if (eventType == "user_data_received")
|
||||
{
|
||||
await completer.AppenAudioBuffer(data);
|
||||
await hub.Completer.AppenAudioBuffer(data);
|
||||
}
|
||||
else if (eventType == "user_dtmf_receiving")
|
||||
{
|
||||
}
|
||||
else if (eventType == "user_dtmf_received")
|
||||
{
|
||||
await HandleUserDtmfReceived(services, conn, completer, data);
|
||||
await HandleUserDtmfReceived(services, conn, hub.Completer, data);
|
||||
}
|
||||
else if (eventType == "user_disconnected")
|
||||
{
|
||||
await completer.Disconnect();
|
||||
await hub.Completer.Disconnect();
|
||||
await HandleUserDisconnected();
|
||||
}
|
||||
} while (!result.CloseStatus.HasValue);
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@
|
|||
<ItemGroup Condition="$(SolutionName)==PizzaBot">
|
||||
<PackageReference Include="BotSharp.Logger" />
|
||||
<PackageReference Include="BotSharp.OpenAPI" />
|
||||
<PackageReference Include="BotSharp.Core.Realtime" />
|
||||
<PackageReference Include="BotSharp.Plugin.Dashboard" />
|
||||
<PackageReference Include="BotSharp.Plugin.AzureOpenAI" />
|
||||
<PackageReference Include="BotSharp.Plugin.GoogleAI" />
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ using BotSharp.Abstraction.Conversations.Models;
|
|||
using BotSharp.Abstraction.Conversations;
|
||||
using BotSharp.OpenAPI;
|
||||
using System.Text.Json;
|
||||
using Google.Ai.Generativelanguage.V1Beta2;
|
||||
|
||||
var services = ServiceBuilder.CreateHostBuilder();
|
||||
var channel = services.GetRequiredService<IStreamChannel>();
|
||||
|
|
@ -23,9 +22,9 @@ conv = await convService.NewConversation(conv);
|
|||
|
||||
await channel.ConnectAsync(conv.Id);
|
||||
|
||||
var settings = services.GetRequiredService<RealtimeModelSettings>();
|
||||
var hub = services.GetRequiredService<IRealtimeHub>();
|
||||
var conn = hub.SetHubConnection(conv.Id);
|
||||
var completer = hub.SetCompleter("openai");
|
||||
|
||||
await hub.ConnectToModel(async data =>
|
||||
{
|
||||
|
|
@ -65,7 +64,7 @@ do
|
|||
var seg = new ArraySegment<byte>(buffer);
|
||||
result = await channel.ReceiveAsync(seg, CancellationToken.None);
|
||||
|
||||
await completer.AppenAudioBuffer(seg, result.Count);
|
||||
await hub.Completer.AppenAudioBuffer(seg, result.Count);
|
||||
|
||||
// Display the audio level
|
||||
int audioLevel = CalculateAudioLevel(buffer, result.Count);
|
||||
|
|
|
|||
Loading…
Reference in a new issue