diff --git a/Services/AnthropicService.cs b/Services/AnthropicService.cs index 70427e0..b6723f1 100644 --- a/Services/AnthropicService.cs +++ b/Services/AnthropicService.cs @@ -94,7 +94,8 @@ public class AnthropicService } var client = CreateClient(); - var json = JsonSerializer.Serialize(payload); + var json = JsonSerializer.Serialize(payload, new JsonSerializerOptions { WriteIndented = true }); + LogPayload(json, sessionId, chainId, iterations); var httpContent = new StringContent(json, Encoding.UTF8, "application/json"); var httpResp = await client.SendAsync( @@ -292,7 +293,8 @@ public class AnthropicService } var client = CreateClient(); - var json = JsonSerializer.Serialize(payload); + var json = JsonSerializer.Serialize(payload, new JsonSerializerOptions { WriteIndented = true }); + LogPayload(json, ctx.SessionId, ctx.ChainId, iterations); var httpContent = new StringContent(json, Encoding.UTF8, "application/json"); var httpResp = await client.SendAsync( @@ -414,6 +416,19 @@ public class AnthropicService return finalText.Length > 0 ? finalText.ToString() : "(Keine Textantwort)"; } + private static void LogPayload(string json, string sessionId, string chainId, int iteration) + { + try + { + var logsDir = Path.Combine(AppContext.BaseDirectory, "data", "logs"); + Directory.CreateDirectory(logsDir); + var timestamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds(); + var fileName = $"{timestamp}-{sessionId}-{chainId}-iter{iteration}-payload.json"; + File.WriteAllText(Path.Combine(logsDir, fileName), json); + } + catch { /* Logging darf nie die App crashen */ } + } + private async Task FinalizeChain(ChainRecord chain, TokenUsage usage, int iterations, string stopReason, System.Diagnostics.Stopwatch sw, string streamErrorInfo = null) { chain.InputTokens = usage.InputTokens;