apply agent realtime config
This commit is contained in:
parent
dc2e3028ec
commit
28e3518e41
|
|
@ -1,3 +1,4 @@
|
||||||
|
using BotSharp.Abstraction.Agents.Models;
|
||||||
using BotSharp.Abstraction.Functions.Models;
|
using BotSharp.Abstraction.Functions.Models;
|
||||||
using BotSharp.Abstraction.Hooks;
|
using BotSharp.Abstraction.Hooks;
|
||||||
using BotSharp.Abstraction.Models;
|
using BotSharp.Abstraction.Models;
|
||||||
|
|
@ -10,7 +11,8 @@ namespace BotSharp.Core.Realtime.Services;
|
||||||
public class RealtimeHub : IRealtimeHub
|
public class RealtimeHub : IRealtimeHub
|
||||||
{
|
{
|
||||||
private readonly IServiceProvider _services;
|
private readonly IServiceProvider _services;
|
||||||
private readonly ILogger _logger;
|
private readonly ILogger<RealtimeHub> _logger;
|
||||||
|
private readonly RealtimeModelSettings _settings;
|
||||||
|
|
||||||
private RealtimeHubConnection _conn;
|
private RealtimeHubConnection _conn;
|
||||||
public RealtimeHubConnection HubConn => _conn;
|
public RealtimeHubConnection HubConn => _conn;
|
||||||
|
|
@ -18,10 +20,14 @@ public class RealtimeHub : IRealtimeHub
|
||||||
private IRealTimeCompletion _completer;
|
private IRealTimeCompletion _completer;
|
||||||
public IRealTimeCompletion Completer => _completer;
|
public IRealTimeCompletion Completer => _completer;
|
||||||
|
|
||||||
public RealtimeHub(IServiceProvider services, ILogger<RealtimeHub> logger)
|
public RealtimeHub(
|
||||||
|
IServiceProvider services,
|
||||||
|
ILogger<RealtimeHub> logger,
|
||||||
|
RealtimeModelSettings settings)
|
||||||
{
|
{
|
||||||
_services = services;
|
_services = services;
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
|
_settings = settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task ConnectToModel(
|
public async Task ConnectToModel(
|
||||||
|
|
@ -43,10 +49,10 @@ public class RealtimeHub : IRealtimeHub
|
||||||
routing.Context.SetDialogs(dialogs);
|
routing.Context.SetDialogs(dialogs);
|
||||||
routing.Context.SetMessageId(_conn.ConversationId, Guid.Empty.ToString());
|
routing.Context.SetMessageId(_conn.ConversationId, Guid.Empty.ToString());
|
||||||
|
|
||||||
var states = _services.GetRequiredService<IConversationStateService>();
|
var (provider, model) = GetLlmProviderModel(agent);
|
||||||
var settings = _services.GetRequiredService<RealtimeModelSettings>();
|
|
||||||
|
|
||||||
_completer = _services.GetServices<IRealTimeCompletion>().First(x => x.Provider == settings.Provider);
|
_completer = _services.GetServices<IRealTimeCompletion>().First(x => x.Provider == provider);
|
||||||
|
_completer.SetModelName(model);
|
||||||
_completer.SetOptions(options);
|
_completer.SetOptions(options);
|
||||||
|
|
||||||
await _completer.Connect(
|
await _completer.Connect(
|
||||||
|
|
@ -156,7 +162,7 @@ public class RealtimeHub : IRealtimeHub
|
||||||
},
|
},
|
||||||
onInterruptionDetected: async () =>
|
onInterruptionDetected: async () =>
|
||||||
{
|
{
|
||||||
if (settings.InterruptResponse)
|
if (_settings.InterruptResponse)
|
||||||
{
|
{
|
||||||
// Reset states
|
// Reset states
|
||||||
_conn.ResetResponseState();
|
_conn.ResetResponseState();
|
||||||
|
|
@ -179,4 +185,27 @@ public class RealtimeHub : IRealtimeHub
|
||||||
|
|
||||||
return _conn;
|
return _conn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private (string, string) GetLlmProviderModel(Agent agent)
|
||||||
|
{
|
||||||
|
var provider = agent?.LlmConfig?.Realtime?.Provider;
|
||||||
|
var model = agent?.LlmConfig?.Realtime?.Model;
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(provider) && !string.IsNullOrEmpty(model))
|
||||||
|
{
|
||||||
|
return (provider, model);
|
||||||
|
}
|
||||||
|
|
||||||
|
provider = _settings.Provider;
|
||||||
|
model = _settings.Model;
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(provider) && !string.IsNullOrEmpty(model))
|
||||||
|
{
|
||||||
|
return (provider, model);
|
||||||
|
}
|
||||||
|
|
||||||
|
provider = "openai";
|
||||||
|
model = "gpt-realtime";
|
||||||
|
return (provider, model);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -18,11 +18,13 @@ public class GoogleRealTimeProvider : IRealTimeCompletion
|
||||||
private string _model = GoogleAIModels.Gemini2FlashLive001;
|
private string _model = GoogleAIModels.Gemini2FlashLive001;
|
||||||
|
|
||||||
private readonly IServiceProvider _services;
|
private readonly IServiceProvider _services;
|
||||||
private readonly ILogger _logger;
|
private readonly ILogger<GoogleRealTimeProvider> _logger;
|
||||||
|
private readonly GoogleAiSettings _settings;
|
||||||
|
|
||||||
private List<string> renderedInstructions = [];
|
private List<string> renderedInstructions = [];
|
||||||
|
|
||||||
private LlmRealtimeSession _session;
|
private LlmRealtimeSession _session;
|
||||||
private readonly GoogleAiSettings _settings;
|
private RealtimeOptions? _realtimeOptions;
|
||||||
|
|
||||||
private const string DEFAULT_MIME_TYPE = "audio/pcm;rate=16000";
|
private const string DEFAULT_MIME_TYPE = "audio/pcm;rate=16000";
|
||||||
private readonly JsonSerializerOptions _jsonOptions = new()
|
private readonly JsonSerializerOptions _jsonOptions = new()
|
||||||
|
|
@ -50,12 +52,12 @@ public class GoogleRealTimeProvider : IRealTimeCompletion
|
||||||
|
|
||||||
public GoogleRealTimeProvider(
|
public GoogleRealTimeProvider(
|
||||||
IServiceProvider services,
|
IServiceProvider services,
|
||||||
GoogleAiSettings settings,
|
ILogger<GoogleRealTimeProvider> logger,
|
||||||
ILogger<GoogleRealTimeProvider> logger)
|
GoogleAiSettings settings)
|
||||||
{
|
{
|
||||||
_settings = settings;
|
|
||||||
_services = services;
|
_services = services;
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
|
_settings = settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task Connect(
|
public async Task Connect(
|
||||||
|
|
@ -84,7 +86,7 @@ public class GoogleRealTimeProvider : IRealTimeCompletion
|
||||||
var settingsService = _services.GetRequiredService<ILlmProviderService>();
|
var settingsService = _services.GetRequiredService<ILlmProviderService>();
|
||||||
var realtimeModelSettings = _services.GetRequiredService<RealtimeModelSettings>();
|
var realtimeModelSettings = _services.GetRequiredService<RealtimeModelSettings>();
|
||||||
|
|
||||||
_model = realtimeModelSettings.Model;
|
_model ??= realtimeModelSettings.Model;
|
||||||
var modelSettings = settingsService.GetSetting(Provider, _model);
|
var modelSettings = settingsService.GetSetting(Provider, _model);
|
||||||
|
|
||||||
Reset();
|
Reset();
|
||||||
|
|
@ -422,7 +424,7 @@ public class GoogleRealTimeProvider : IRealTimeCompletion
|
||||||
|
|
||||||
public void SetOptions(RealtimeOptions? options)
|
public void SetOptions(RealtimeOptions? options)
|
||||||
{
|
{
|
||||||
|
_realtimeOptions = options;
|
||||||
}
|
}
|
||||||
|
|
||||||
#region Private methods
|
#region Private methods
|
||||||
|
|
|
||||||
|
|
@ -67,7 +67,7 @@ public class RealTimeCompletionProvider : IRealTimeCompletion
|
||||||
var settingsService = _services.GetRequiredService<ILlmProviderService>();
|
var settingsService = _services.GetRequiredService<ILlmProviderService>();
|
||||||
var realtimeSettings = _services.GetRequiredService<RealtimeModelSettings>();
|
var realtimeSettings = _services.GetRequiredService<RealtimeModelSettings>();
|
||||||
|
|
||||||
_model = realtimeSettings.Model;
|
_model ??= realtimeSettings.Model;
|
||||||
var settings = settingsService.GetSetting(Provider, _model);
|
var settings = settingsService.GetSetting(Provider, _model);
|
||||||
|
|
||||||
_session = new LlmRealtimeSession(_services, new ChatSessionOptions
|
_session = new LlmRealtimeSession(_services, new ChatSessionOptions
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue