Scene context JSON
@if (!string.IsNullOrWhiteSpace(result.SceneJsonText))
{
Extracted Scene Intelligence JSON
}
Raw OpenAI response
@if (result.Validation is null)
{
Validation did not run.
}
else
{
@ValidationSummary(result.Validation)
@RenderIssues("Errors", result.Validation.Errors)
@RenderIssues("Warnings", result.Validation.Warnings)
@RenderIssues("Information", result.Validation.Information)
}
@if (result.ParsedScene is null)
{
No parsed Scene Intelligence model is available.
}
else
{
var scene = result.ParsedScene;
Scene Reference
Schema
@scene.SchemaVersion
Project
@Display(scene.SceneReference?.ProjectId)
Book
@Display(scene.SceneReference?.BookId)
Chapter
@Display(scene.SceneReference?.ChapterId) (@Display(scene.SceneReference?.ChapterNumber))
Scene
@Display(scene.SceneReference?.SceneId) (@Display(scene.SceneReference?.SceneNumber))
Source
@Display(scene.SceneReference?.SourceLabel)
Summary
Short: @Display(scene.Summary?.Short)
Detailed: @Display(scene.Summary?.Detailed)
Confidence: @Display(scene.Summary?.Confidence)
Purpose
@Display(scene.ScenePurpose?.ObservedFunction)
Confidence: @Display(scene.ScenePurpose?.Confidence)
Point Of View
Character
@Display(scene.PointOfView?.CharacterName)
Mode
@Display(scene.PointOfView?.NarrativeMode)
Evidence
@Display(scene.PointOfView?.Evidence)
Confidence
@Display(scene.PointOfView?.Confidence)
Setting
Location
@Display(scene.Setting?.LocationName)
Type
@Display(scene.Setting?.LocationType)
Room
@Display(scene.Setting?.GenericRoomType)
Time
@Display(scene.Setting?.TimeOfDay) / @Display(scene.Setting?.DateOrTimeReference)
Confidence
@Display(scene.Setting?.Confidence)
@RenderCollection("Characters", scene.Characters, character =>
$"{Display(character.Name)} - {Display(character.RoleInScene)} - mentioned only: {Display(character.MentionedOnly)} - confidence: {Display(character.Confidence)}")
@RenderCollection("Locations", scene.Locations, location =>
$"{Display(location.Name)} - {Display(location.LocationType)} - present: {Display(location.PresentInScene)} - confidence: {Display(location.Confidence)}")
@RenderCollection("Assets", scene.Assets, asset =>
$"{Display(asset.Name)} - {Display(asset.AssetType)} - status: {Display(asset.Status)} - holder: {Display(asset.OwnerOrHolder)}")
@RenderCollection("Relationships", scene.Relationships, relationship =>
$"{Display(relationship.CharacterA)} / {Display(relationship.CharacterB)} - {Display(relationship.RelationshipSignal)} - confidence: {Display(relationship.Confidence)}")
@RenderCollection("Knowledge Changes", scene.KnowledgeChanges, change =>
$"{Display(change.RecipientCharacter)} {Display(change.ChangeType)}: {Display(change.KnowledgeItem)}")
@RenderCollection("Timeline Clues", scene.TimelineClues, clue =>
$"{Display(clue.Clue)} - {Display(clue.RelativeOrder)}")
@RenderCollection("Questions Raised", scene.QuestionsRaised, question =>
$"{Display(question.Question)} - {Display(question.Scope)}")
@RenderCollection("Questions Answered", scene.QuestionsAnswered, answer =>
$"{Display(answer.Question)} => {Display(answer.Answer)}")
@RenderCollection("Observations", scene.Observations, observation =>
$"{Display(observation.SubjectName)} {Display(observation.Predicate)} {Display(observation.ObjectName)} - {Display(observation.ObservationType)}")
Metrics
@if (scene.Metrics is null || scene.Metrics.Count == 0)
{
No metrics reported.
}
else
{
@foreach (var metric in scene.Metrics)
{
@metric.Key
Score @Display(metric.Value?.Score), confidence @Display(metric.Value?.Confidence)
}
}
Source Limits
Contains ambiguity: @Display(scene.SourceLimits?.ContainsAmbiguity)
@RenderStringList("Ambiguity Notes", scene.SourceLimits?.AmbiguityNotes)
}