diff --git a/Services/ChatService.cs b/Services/ChatService.cs index 4a994df..16e9f1e 100644 --- a/Services/ChatService.cs +++ b/Services/ChatService.cs @@ -601,8 +601,9 @@ Für welche Plattform soll die App entwickelt werden? Web, Mobile oder Desktop? } /// - /// Entfernt server_tool_use-Blöcke vom Typ "web_search" aus assistant-Messages, - /// wenn kein zugehöriger web_search_tool_result-Block in derselben Message existiert. + /// Entfernt verwaiste web_search-Blöcke aus assistant-Messages: + /// - server_tool_use ohne zugehörigen web_search_tool_result (z.B. alte DB-Einträge) + /// - web_search_tool_result ohne zugehörigen server_tool_use (z.B. Parse-Fehler) /// private static void CleanOrphanedWebSearchBlocks(List history) { @@ -639,11 +640,14 @@ Für welche Plattform soll die App entwickelt werden? Web, Mobile oder Desktop? } } - // Orphaned = server_tool_use IDs ohne zugehörige web_search_tool_result - var orphanedIds = webSearchToolUseIds.Except(webSearchToolResultIds).ToHashSet(); - if (orphanedIds.Count == 0) continue; + // Orphaned server_tool_use = IDs ohne zugehörige web_search_tool_result + var orphanedUseIds = webSearchToolUseIds.Except(webSearchToolResultIds).ToHashSet(); + // Orphaned web_search_tool_result = tool_use_ids ohne zugehörige server_tool_use + var orphanedResultIds = webSearchToolResultIds.Except(webSearchToolUseIds).ToHashSet(); - // Entferne orphaned server_tool_use Blöcke + if (orphanedUseIds.Count == 0 && orphanedResultIds.Count == 0) continue; + + // Entferne orphaned server_tool_use und web_search_tool_result Blöcke contentList.RemoveAll(block => { var json = JsonSerializer.Serialize(block); @@ -652,10 +656,20 @@ Für welche Plattform soll die App entwickelt werden? Web, Mobile oder Desktop? catch { return false; } var type = el.TryGetProperty("type", out var t) ? t.GetString() : ""; - if (type != "server_tool_use") return false; - var id = el.TryGetProperty("id", out var idProp) ? idProp.GetString() : ""; - return orphanedIds.Contains(id); + if (type == "server_tool_use") + { + var id = el.TryGetProperty("id", out var idProp) ? idProp.GetString() : ""; + return orphanedUseIds.Contains(id); + } + + if (type == "web_search_tool_result") + { + var toolUseId = el.TryGetProperty("tool_use_id", out var tid) ? tid.GetString() : ""; + return orphanedResultIds.Contains(toolUseId); + } + + return false; }); } }