105 lines
3.5 KiB
Plaintext
105 lines
3.5 KiB
Plaintext
@model StoryIntelligenceDiagnosticsViewModel
|
|
@{
|
|
ViewData["Title"] = "Story Intelligence Diagnostics";
|
|
}
|
|
|
|
<div class="page-heading compact">
|
|
<div>
|
|
<p class="eyebrow">Admin utility</p>
|
|
<h1>Story Intelligence Diagnostics</h1>
|
|
<p class="lead-text">Configuration and prompt loading checks. This page does not call OpenAI.</p>
|
|
</div>
|
|
</div>
|
|
|
|
<nav class="mb-3" aria-label="Breadcrumb">
|
|
<a asp-controller="Projects" asp-action="Index">Projects</a>
|
|
<span class="muted"> / </span>
|
|
<a asp-action="Index">Admin</a>
|
|
<span class="muted"> / Story Intelligence Diagnostics</span>
|
|
</nav>
|
|
|
|
@if (!string.IsNullOrWhiteSpace(Model.ErrorMessage))
|
|
{
|
|
<div class="alert alert-warning">@Model.ErrorMessage</div>
|
|
}
|
|
|
|
<section class="edit-panel">
|
|
<h2>OpenAI configuration</h2>
|
|
<div class="row g-3">
|
|
<div class="col-md-4">
|
|
<div class="border rounded p-3 h-100">
|
|
<p class="eyebrow">Model</p>
|
|
<h3 class="mb-0">@Model.Model</h3>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-4">
|
|
<div class="border rounded p-3 h-100">
|
|
<p class="eyebrow">API key</p>
|
|
<h3 class="mb-0">@StatusText(Model.ApiKeyConfigured)</h3>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-4">
|
|
<div class="border rounded p-3 h-100">
|
|
<p class="eyebrow">Client</p>
|
|
<h3 class="mb-0">@StatusText(Model.ClientConstructed)</h3>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<dl class="mt-3 mb-0">
|
|
<dt>Temperature</dt>
|
|
<dd>@Model.Temperature</dd>
|
|
<dt>Max output tokens</dt>
|
|
<dd>@Model.MaxOutputTokens.ToString("N0")</dd>
|
|
<dt>Timeout</dt>
|
|
<dd>@Model.TimeoutSeconds seconds</dd>
|
|
<dt>Connection status</dt>
|
|
<dd>@Model.ConnectionStatus</dd>
|
|
</dl>
|
|
</section>
|
|
|
|
<section class="edit-panel">
|
|
<h2>Prompt repository</h2>
|
|
<div class="row g-3">
|
|
<div class="col-md-3">
|
|
<div class="border rounded p-3 h-100">
|
|
<p class="eyebrow">Repository</p>
|
|
<h3 class="mb-0">@StatusText(Model.PromptRepositoryHealthy)</h3>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-3">
|
|
<div class="border rounded p-3 h-100">
|
|
<p class="eyebrow">Scene prompt</p>
|
|
<h3 class="mb-0">@StatusText(Model.ScenePromptLoaded)</h3>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-3">
|
|
<div class="border rounded p-3 h-100">
|
|
<p class="eyebrow">Prompt version</p>
|
|
<h3 class="mb-0">@Model.PromptVersion</h3>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-3">
|
|
<div class="border rounded p-3 h-100">
|
|
<p class="eyebrow">Substitution</p>
|
|
<h3 class="mb-0">@StatusText(Model.RuntimeSubstitutionWorks)</h3>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<dl class="mt-3 mb-0">
|
|
<dt>Prompt file</dt>
|
|
<dd>@Model.PromptFileName</dd>
|
|
<dt>Prompt length</dt>
|
|
<dd>@Model.ScenePromptLength.ToString("N0") characters</dd>
|
|
</dl>
|
|
</section>
|
|
|
|
<section class="edit-panel">
|
|
<h2>Manual dry run</h2>
|
|
<p>This admin-only tool loads the prompt, substitutes test scene data and performs a live OpenAI call without saving data.</p>
|
|
<a class="btn btn-primary" asp-action="StoryIntelligenceTest">Open dry run</a>
|
|
</section>
|
|
|
|
@functions {
|
|
private static string StatusText(bool value) => value ? "Configured" : "Missing";
|
|
}
|