exclude conclude log when init

This commit is contained in:
Jicheng Lu 2025-04-28 17:23:25 -05:00
parent 97f6dd7a44
commit 9febf00795
7 changed files with 12 additions and 12 deletions

View file

@ -47,5 +47,5 @@ public interface IContentGeneratingHook
/// <param name="instruction"></param>
/// <param name="functions"></param>
/// <returns></returns>
Task OnSessionUpdated(Agent agent, string instruction, FunctionDef[] functions) => Task.CompletedTask;
Task OnSessionUpdated(Agent agent, string instruction, FunctionDef[] functions, bool isInit = false) => Task.CompletedTask;
}

View file

@ -24,7 +24,7 @@ public interface IRealTimeCompletion
Task SendEventToModel(object message);
Task Disconnect();
Task<string> UpdateSession(RealtimeHubConnection conn);
Task<string> UpdateSession(RealtimeHubConnection conn, bool isInit = false);
Task InsertConversationItem(RoleDialogModel message);
Task RemoveConversationItem(string itemId);
Task TriggerModelInference(string? instructions = null);

View file

@ -47,7 +47,7 @@ public class RealtimeHub : IRealtimeHub
onModelReady: async () =>
{
// Not TriggerModelInference, waiting for user utter.
var instruction = await _completer.UpdateSession(_conn);
var instruction = await _completer.UpdateSession(_conn, isInit: true);
var data = _conn.OnModelReady();
await (init?.Invoke(data) ?? Task.CompletedTask);
await HookEmitter.Emit<IRealtimeHook>(_services, async hook => await hook.OnModelReady(agent, _completer));

View file

@ -109,9 +109,9 @@ public class ChatStreamMiddleware
private async Task SendEventToUser(WebSocket webSocket, string message)
{
var buffer = Encoding.UTF8.GetBytes(message);
if (!webSocket.CloseStatus.HasValue)
if (webSocket.State == WebSocketState.Open)
{
var buffer = Encoding.UTF8.GetBytes(message);
await webSocket.SendAsync(new ArraySegment<byte>(buffer), WebSocketMessageType.Text, true, CancellationToken.None);
}
}

View file

@ -85,7 +85,7 @@ public class StreamingLogHook : ConversationHookBase, IContentGeneratingHook, IR
await SendContentLog(conversationId, input);
}
public async Task OnSessionUpdated(Agent agent, string instruction, FunctionDef[] functions)
public async Task OnSessionUpdated(Agent agent, string instruction, FunctionDef[] functions, bool isInit = false)
{
var conversationId = _state.GetConversationId();
if (string.IsNullOrEmpty(conversationId)) return;
@ -98,6 +98,8 @@ public class StreamingLogHook : ConversationHookBase, IContentGeneratingHook, IR
}
_logger.LogInformation(log);
if (isInit) return;
var message = new RoleDialogModel(AgentRole.Assistant, log)
{
MessageId = _routingCtx.MessageId

View file

@ -238,7 +238,7 @@ public class GoogleRealTimeProvider : IRealTimeCompletion
//todo Send Audio Chunks to Model, Botsharp RealTime Implementation seems to be incomplete
}
public async Task<string> UpdateSession(RealtimeHubConnection conn)
public async Task<string> UpdateSession(RealtimeHubConnection conn, bool isInit = false)
{
var convService = _services.GetRequiredService<IConversationService>();
var conv = await convService.GetConversation(conn.ConversationId);
@ -278,7 +278,7 @@ public class GoogleRealTimeProvider : IRealTimeCompletion
}).ToArray();
await HookEmitter.Emit<IContentGeneratingHook>(_services,
async hook => { await hook.OnSessionUpdated(agent, prompt, functions); });
async hook => { await hook.OnSessionUpdated(agent, prompt, functions, isInit); });
if (_settings.Gemini.UseGoogleSearch)
{

View file

@ -264,7 +264,7 @@ public class RealTimeCompletionProvider : IRealTimeCompletion
await _session.SendEventToModel(message);
}
public async Task<string> UpdateSession(RealtimeHubConnection conn)
public async Task<string> UpdateSession(RealtimeHubConnection conn, bool isInit = false)
{
var convService = _services.GetRequiredService<IConversationService>();
var conv = await convService.GetConversation(conn.ConversationId);
@ -328,13 +328,11 @@ public class RealTimeCompletionProvider : IRealTimeCompletion
await HookEmitter.Emit<IContentGeneratingHook>(_services, async hook =>
{
await hook.OnSessionUpdated(agent, instruction, functions);
await hook.OnSessionUpdated(agent, instruction, functions, isInit);
});
await SendEventToModel(sessionUpdate);
await Task.Delay(300);
return instruction;
}