Consolidate scene and normalization prompt instructions

This commit is contained in:
2026-08-05 14:42:54 +00:00
parent 8ed99ceaee
commit ab70347c5d
20 changed files with 142 additions and 93 deletions

View File

@@ -17,7 +17,6 @@ var promptAssetManifest = shared.PromptAssetManifest{
ModuleDir: "dnd.scenes",
ModuleFiles: []promptfs.ModulePromptFile{
{Name: "prompt.yaml", Path: "prompts/prompt.yaml"},
{Name: "task.md", Path: "prompts/task.md"},
{Name: "instructions.md", Path: "prompts/instructions.md"},
},
SharedFiles: []string{

View File

@@ -12,7 +12,7 @@ import (
"gitea.maximumdirect.net/eric/promptkit"
)
func TestPromptAssetsPrepareTranscriptAndTaskMessages(t *testing.T) {
func TestPromptAssetsPrepareTranscriptWithInstructionOrdering(t *testing.T) {
if !slices.Contains(promptAssetManifest.SharedFiles, "common-dnd-transcript-full.md") {
t.Fatalf("shared prompt assets = %#v, want complete-session transcript scope", promptAssetManifest.SharedFiles)
}
@@ -22,35 +22,42 @@ func TestPromptAssetsPrepareTranscriptAndTaskMessages(t *testing.T) {
if prepared.PromptID != PromptID {
t.Fatalf("prompt id = %q, want %q", prepared.PromptID, PromptID)
}
if len(prepared.Messages) != 5 {
t.Fatalf("prepared messages = %d, want 5", len(prepared.Messages))
if len(prepared.Messages) < 4 {
t.Fatalf("prepared messages = %#v, want system, references, instructions, and transcript", prepared.Messages)
}
for index, role := range []string{"system", "user", "user", "user", "user"} {
if prepared.Messages[index].Role != role {
t.Errorf("message %d role = %q, want %q", index, prepared.Messages[index].Role, role)
}
if prepared.Messages[0].Role != "system" || prepared.Messages[1].Role != "user" {
t.Fatalf("initial prompt roles = %#v, want system followed by campaign references", prepared.Messages[:2])
}
for _, index := range []int{1, 4} {
if cache := prepared.Messages[index].CacheControl; cache == nil || cache.Type != promptkit.CacheControlEphemeral {
t.Errorf("message %d cache control = %#v, want ephemeral", index, cache)
}
if cache := prepared.Messages[1].CacheControl; cache == nil || cache.Type != promptkit.CacheControlEphemeral {
t.Fatalf("campaign-reference cache control = %#v, want ephemeral", cache)
}
for _, index := range []int{0, 2, 3} {
if cache := prepared.Messages[index].CacheControl; cache != nil {
t.Errorf("message %d cache control = %#v, want nil", index, cache)
}
if cache := prepared.Messages[0].CacheControl; cache != nil {
t.Fatalf("system cache control = %#v, want nil", cache)
}
if references := prepared.Messages[1].Content; !strings.Contains(references, "scene-players") || !strings.Contains(references, "scene-party") || !strings.Contains(references, "scene-glossary") {
t.Fatalf("reference message = %q, want supplied reference inputs", references)
}
if transcriptMessage := prepared.Messages[4].Content; !strings.Contains(transcriptMessage, "scene-transcript") {
t.Fatalf("final message = %q, want transcript input", transcriptMessage)
transcriptIndex := -1
for index, message := range prepared.Messages {
if strings.Contains(message.Content, "scene-transcript") {
transcriptIndex = index
}
}
if transcriptIndex != len(prepared.Messages)-1 {
t.Fatalf("transcript message index = %d, want final message in %#v", transcriptIndex, prepared.Messages)
}
if cache := prepared.Messages[transcriptIndex].CacheControl; cache == nil || cache.Type != promptkit.CacheControlEphemeral {
t.Fatalf("transcript cache control = %#v, want ephemeral", cache)
}
instructionsIndex := transcriptIndex - 1
if instructionsIndex <= 1 || prepared.Messages[instructionsIndex].CacheControl != nil {
t.Fatalf("instruction message = %#v, want uncached message after references and before transcript", prepared.Messages[instructionsIndex])
}
for index, message := range prepared.Messages {
if index != 1 && (strings.Contains(message.Content, "scene-players") || strings.Contains(message.Content, "scene-party") || strings.Contains(message.Content, "scene-glossary")) {
t.Errorf("message %d unexpectedly rendered reference input", index)
}
if index != 4 && strings.Contains(message.Content, "scene-transcript") {
if index != transcriptIndex && strings.Contains(message.Content, "scene-transcript") {
t.Errorf("message %d unexpectedly rendered transcript input", index)
}
}