AI auditor: surface the real connection error instead of swallowing it
The Test-AI button called AuditAsync, which caught every exception and returned null, and used EnsureSuccessStatusCode() (discarding the response body). So a failing AI service only ever produced a generic 'no response' message with no detail — impossible to diagnose. - Add IAiAuditor.TestAsync: runs the real call and returns a detailed Persian diagnostic — HTTP status + response body on non-2xx, raw body when the shape isn't OpenAI-compatible, and network/proxy/timeout specifics on exceptions. - AuditAsync now logs the actual HTTP status + response body (and proxy state) instead of a bare warning, so server logs show why a call failed. - ExtractContent / ParseVerdict no longer throw on unexpected JSON; they return null so the caller can show the raw body. - Settings 'Test AI' button uses TestAsync; result box renders multi-line and switches to alert-error styling when the test fails. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -16,7 +16,11 @@
|
||||
@if (Model.DemoMsg is not null) { <div class="alert alert-success">@Model.DemoMsg</div> }
|
||||
@if (Model.SmsTest is not null) { <div class="alert alert-success">@Model.SmsTest</div> }
|
||||
@if (Model.ProxyTest is not null) { <div class="alert alert-success">@Model.ProxyTest</div> }
|
||||
@if (Model.AiTest is not null) { <div class="alert alert-success">@Model.AiTest</div> }
|
||||
@if (Model.AiTest is not null)
|
||||
{
|
||||
<div class="alert @(Model.AiTest.StartsWith("✅") ? "alert-success" : "alert-error")"
|
||||
style="white-space:pre-wrap; word-break:break-word;">@Model.AiTest</div>
|
||||
}
|
||||
|
||||
<form method="post">
|
||||
<div class="settings-layout">
|
||||
|
||||
Reference in New Issue
Block a user