From 7c569a3d8c9817fdc66a5510ea089fdd064b33ac Mon Sep 17 00:00:00 2001 From: Eric Rakestraw Date: Tue, 28 Jul 2026 16:42:41 +0000 Subject: [PATCH] Make D&D prompt assets provider neutral --- docs/roadmap/implementation.md | 6 +++--- internal/modules/dnd/chunk/scenes/chunker.go | 2 +- ...{scriptorium_assets.go => prompt_assets.go} | 18 +++++++++--------- ...um_assets_test.go => prompt_assets_test.go} | 8 ++++---- .../dnd/extract/combatturns/extractor.go | 2 +- ...{scriptorium_assets.go => prompt_assets.go} | 18 +++++++++--------- ...um_assets_test.go => prompt_assets_test.go} | 6 +++--- .../dnd/extract/itemevents/extractor.go | 2 +- ...{scriptorium_assets.go => prompt_assets.go} | 18 +++++++++--------- ...um_assets_test.go => prompt_assets_test.go} | 4 ++-- .../dnd/extract/npcinteractions/extractor.go | 2 +- ...{scriptorium_assets.go => prompt_assets.go} | 18 +++++++++--------- ...um_assets_test.go => prompt_assets_test.go} | 4 ++-- internal/modules/dnd/extract/npcs/extractor.go | 2 +- ...{scriptorium_assets.go => prompt_assets.go} | 18 +++++++++--------- ...um_assets_test.go => prompt_assets_test.go} | 4 ++-- .../dnd/extract/scenedescriptions/extractor.go | 2 +- ...{scriptorium_assets.go => prompt_assets.go} | 18 +++++++++--------- ...um_assets_test.go => prompt_assets_test.go} | 4 ++-- .../modules/dnd/extract/spells/extractor.go | 2 +- ...{scriptorium_assets.go => prompt_assets.go} | 18 +++++++++--------- ...um_assets_test.go => prompt_assets_test.go} | 6 +++--- .../modules/dnd/normalize/npcs/normalizer.go | 2 +- ...{scriptorium_assets.go => prompt_assets.go} | 18 +++++++++--------- ...um_assets_test.go => prompt_assets_test.go} | 4 ++-- 25 files changed, 103 insertions(+), 103 deletions(-) rename internal/modules/dnd/chunk/scenes/{scriptorium_assets.go => prompt_assets.go} (67%) rename internal/modules/dnd/chunk/scenes/{scriptorium_assets_test.go => prompt_assets_test.go} (94%) rename internal/modules/dnd/extract/combatturns/{scriptorium_assets.go => prompt_assets.go} (70%) rename internal/modules/dnd/extract/combatturns/{scriptorium_assets_test.go => prompt_assets_test.go} (91%) rename internal/modules/dnd/extract/itemevents/{scriptorium_assets.go => prompt_assets.go} (69%) rename internal/modules/dnd/extract/itemevents/{scriptorium_assets_test.go => prompt_assets_test.go} (95%) rename internal/modules/dnd/extract/npcinteractions/{scriptorium_assets.go => prompt_assets.go} (70%) rename internal/modules/dnd/extract/npcinteractions/{scriptorium_assets_test.go => prompt_assets_test.go} (95%) rename internal/modules/dnd/extract/npcs/{scriptorium_assets.go => prompt_assets.go} (68%) rename internal/modules/dnd/extract/npcs/{scriptorium_assets_test.go => prompt_assets_test.go} (94%) rename internal/modules/dnd/extract/scenedescriptions/{scriptorium_assets.go => prompt_assets.go} (69%) rename internal/modules/dnd/extract/scenedescriptions/{scriptorium_assets_test.go => prompt_assets_test.go} (95%) rename internal/modules/dnd/extract/spells/{scriptorium_assets.go => prompt_assets.go} (70%) rename internal/modules/dnd/extract/spells/{scriptorium_assets_test.go => prompt_assets_test.go} (95%) rename internal/modules/dnd/normalize/npcs/{scriptorium_assets.go => prompt_assets.go} (68%) rename internal/modules/dnd/normalize/npcs/{scriptorium_assets_test.go => prompt_assets_test.go} (94%) diff --git a/docs/roadmap/implementation.md b/docs/roadmap/implementation.md index 52bd1d3..98526fc 100644 --- a/docs/roadmap/implementation.md +++ b/docs/roadmap/implementation.md @@ -2,9 +2,9 @@ ## Status -In progress. The dependency, framework adapter, and version 4 PromptKit -configuration migration are implemented; module asset terminology and remaining -provenance alignment are still planned. +In progress. The dependency, framework adapter, version 4 PromptKit +configuration migration, and provider-neutral module prompt-asset support are +implemented; remaining provenance alignment is still planned. ## Objective diff --git a/internal/modules/dnd/chunk/scenes/chunker.go b/internal/modules/dnd/chunk/scenes/chunker.go index 32ffdde..61a71fe 100644 --- a/internal/modules/dnd/chunk/scenes/chunker.go +++ b/internal/modules/dnd/chunk/scenes/chunker.go @@ -56,7 +56,7 @@ func (c *Chunker) ReferenceSlots() []contracts.ReferenceSlot { } func (c *Chunker) ManifestMetadata() map[string]any { - promptSHA, err := scriptoriumPromptMetadata() + promptSHA, err := promptAssetMetadata() if err != nil { promptSHA = "" } diff --git a/internal/modules/dnd/chunk/scenes/scriptorium_assets.go b/internal/modules/dnd/chunk/scenes/prompt_assets.go similarity index 67% rename from internal/modules/dnd/chunk/scenes/scriptorium_assets.go rename to internal/modules/dnd/chunk/scenes/prompt_assets.go index 81f36e4..bfce692 100644 --- a/internal/modules/dnd/chunk/scenes/scriptorium_assets.go +++ b/internal/modules/dnd/chunk/scenes/prompt_assets.go @@ -9,7 +9,7 @@ import ( "gitea.maximumdirect.net/eric/notarius/internal/modules/dnd/shared" ) -const scriptoriumPromptRoot = "assets/prompts" +const promptAssetRoot = "assets/prompts" var promptAssetManifest = shared.PromptAssetManifest{ ModuleDir: "dnd.scenes", @@ -30,21 +30,21 @@ func RegisterPromptAssets(registry *llm.AssetRegistry) error { if err != nil { return fmt.Errorf("prepare scene prompt assets: %w", err) } - if err := registry.RegisterPromptFS(promptFS, scriptoriumPromptRoot); err != nil { + if err := registry.RegisterPromptFS(promptFS, promptAssetRoot); err != nil { return err } return registry.RegisterSchemaFS(embeddedAssets, "assets/schemas") } -func scriptoriumPromptMetadata() (string, error) { - scriptoriumPromptHashOnce.Do(func() { - scriptoriumPromptHash, scriptoriumPromptHashErr = promptAssetManifest.Hash(embeddedAssets) +func promptAssetMetadata() (string, error) { + promptAssetHashOnce.Do(func() { + promptAssetHash, promptAssetHashErr = promptAssetManifest.Hash(embeddedAssets) }) - return scriptoriumPromptHash, scriptoriumPromptHashErr + return promptAssetHash, promptAssetHashErr } var ( - scriptoriumPromptHashOnce sync.Once - scriptoriumPromptHash string - scriptoriumPromptHashErr error + promptAssetHashOnce sync.Once + promptAssetHash string + promptAssetHashErr error ) diff --git a/internal/modules/dnd/chunk/scenes/scriptorium_assets_test.go b/internal/modules/dnd/chunk/scenes/prompt_assets_test.go similarity index 94% rename from internal/modules/dnd/chunk/scenes/scriptorium_assets_test.go rename to internal/modules/dnd/chunk/scenes/prompt_assets_test.go index 5dd20c4..d5b8448 100644 --- a/internal/modules/dnd/chunk/scenes/scriptorium_assets_test.go +++ b/internal/modules/dnd/chunk/scenes/prompt_assets_test.go @@ -11,7 +11,7 @@ import ( "gitea.maximumdirect.net/eric/promptkit" ) -func TestScriptoriumPromptPreparesTranscriptAndTaskMessages(t *testing.T) { +func TestPromptAssetsPrepareTranscriptAndTaskMessages(t *testing.T) { transcript := []byte(`{"sentinel":"scene-transcript"}`) prepared := prepareScenesPrompt(t, transcript, "scene-players", "scene-party", "scene-glossary") @@ -52,7 +52,7 @@ func TestScriptoriumPromptPreparesTranscriptAndTaskMessages(t *testing.T) { } } -func TestScriptoriumPromptDiagnosticsOmitRawMaterials(t *testing.T) { +func TestPromptAssetDiagnosticsOmitRawMaterials(t *testing.T) { transcript := []byte(`{"secret":"source text"}`) prepared := prepareScenesPrompt(t, transcript, "private player note", "private party note", "private glossary note") metadata := newChunker(t, &fakeScenesLLMClient{}).ManifestMetadata() @@ -100,7 +100,7 @@ func prepareScenesPrompt(t *testing.T, transcript []byte, players string, party if err := RegisterPromptAssets(registry); err != nil { t.Fatalf("register scene prompt assets: %v", err) } - engine := newScenesScriptoriumEngine(t, registry) + engine := newScenesPromptEngine(t, registry) prepared, err := engine.Prepare(context.Background(), promptkit.RunRequest{ PromptID: PromptID, PromptVersion: ResponseSchemaVersion, @@ -118,7 +118,7 @@ func prepareScenesPrompt(t *testing.T, transcript []byte, players string, party return prepared } -func newScenesScriptoriumEngine(t *testing.T, registry *llm.AssetRegistry) *promptkit.Engine { +func newScenesPromptEngine(t *testing.T, registry *llm.AssetRegistry) *promptkit.Engine { t.Helper() options, err := registry.PromptKitOptions() if err != nil { diff --git a/internal/modules/dnd/extract/combatturns/extractor.go b/internal/modules/dnd/extract/combatturns/extractor.go index af6091a..98e891a 100644 --- a/internal/modules/dnd/extract/combatturns/extractor.go +++ b/internal/modules/dnd/extract/combatturns/extractor.go @@ -96,7 +96,7 @@ func New(llmClient contracts.StructuredLLMClient, _ Options, references ...contr if err != nil { return nil, extractorErrorf("prepare scene eligibility: %w", err) } - promptSHA, err := scriptoriumPromptMetadata() + promptSHA, err := promptAssetMetadata() if err != nil { return nil, extractorErrorf("load prompt metadata: %w", err) } diff --git a/internal/modules/dnd/extract/combatturns/scriptorium_assets.go b/internal/modules/dnd/extract/combatturns/prompt_assets.go similarity index 70% rename from internal/modules/dnd/extract/combatturns/scriptorium_assets.go rename to internal/modules/dnd/extract/combatturns/prompt_assets.go index d9b00bb..9d64335 100644 --- a/internal/modules/dnd/extract/combatturns/scriptorium_assets.go +++ b/internal/modules/dnd/extract/combatturns/prompt_assets.go @@ -9,7 +9,7 @@ import ( "gitea.maximumdirect.net/eric/notarius/internal/modules/dnd/shared" ) -const scriptoriumPromptRoot = "assets/prompts" +const promptAssetRoot = "assets/prompts" var promptAssetManifest = shared.PromptAssetManifest{ ModuleDir: "dnd.combat_turns", @@ -33,21 +33,21 @@ func RegisterPromptAssets(registry *llm.AssetRegistry) error { if err != nil { return fmt.Errorf("prepare combat-turn prompt assets: %w", err) } - if err := registry.RegisterPromptFS(promptFS, scriptoriumPromptRoot); err != nil { + if err := registry.RegisterPromptFS(promptFS, promptAssetRoot); err != nil { return err } return registry.RegisterSchemaFS(embeddedAssets, "assets/schemas") } -func scriptoriumPromptMetadata() (string, error) { - scriptoriumPromptHashOnce.Do(func() { - scriptoriumPromptHash, scriptoriumPromptHashErr = promptAssetManifest.Hash(embeddedAssets) +func promptAssetMetadata() (string, error) { + promptAssetHashOnce.Do(func() { + promptAssetHash, promptAssetHashErr = promptAssetManifest.Hash(embeddedAssets) }) - return scriptoriumPromptHash, scriptoriumPromptHashErr + return promptAssetHash, promptAssetHashErr } var ( - scriptoriumPromptHashOnce sync.Once - scriptoriumPromptHash string - scriptoriumPromptHashErr error + promptAssetHashOnce sync.Once + promptAssetHash string + promptAssetHashErr error ) diff --git a/internal/modules/dnd/extract/combatturns/scriptorium_assets_test.go b/internal/modules/dnd/extract/combatturns/prompt_assets_test.go similarity index 91% rename from internal/modules/dnd/extract/combatturns/scriptorium_assets_test.go rename to internal/modules/dnd/extract/combatturns/prompt_assets_test.go index 5bec02e..51775e0 100644 --- a/internal/modules/dnd/extract/combatturns/scriptorium_assets_test.go +++ b/internal/modules/dnd/extract/combatturns/prompt_assets_test.go @@ -23,13 +23,13 @@ func TestRegisterPromptAssetsAndPrepareCombatPrompt(t *testing.T) { if _, err := fs.ReadFile(schemaFS, "dnd_combat_turns_llm.v1.json"); err != nil { t.Fatalf("response schema asset: %v", err) } - hash, err := scriptoriumPromptMetadata() + hash, err := promptAssetMetadata() if err != nil || !strings.HasPrefix(hash, "sha256:") { - t.Fatalf("scriptoriumPromptMetadata() = %q, %v; want digest", hash, err) + t.Fatalf("promptAssetMetadata() = %q, %v; want digest", hash, err) } } -func TestScriptoriumPromptPreparesRequiredInputs(t *testing.T) { +func TestPromptAssetsPrepareRequiredInputs(t *testing.T) { registry := llm.NewAssetRegistry() if err := RegisterPromptAssets(registry); err != nil { t.Fatalf("RegisterPromptAssets() error = %v, want nil", err) diff --git a/internal/modules/dnd/extract/itemevents/extractor.go b/internal/modules/dnd/extract/itemevents/extractor.go index 579ad25..280c17a 100644 --- a/internal/modules/dnd/extract/itemevents/extractor.go +++ b/internal/modules/dnd/extract/itemevents/extractor.go @@ -54,7 +54,7 @@ func New(llmClient contracts.StructuredLLMClient, _ Options, references ...contr if len(references) > 1 { return nil, extractorErrorf("at most one reference set may be supplied") } - promptSHA, err := scriptoriumPromptMetadata() + promptSHA, err := promptAssetMetadata() if err != nil { return nil, extractorErrorf("load prompt metadata: %w", err) } diff --git a/internal/modules/dnd/extract/itemevents/scriptorium_assets.go b/internal/modules/dnd/extract/itemevents/prompt_assets.go similarity index 69% rename from internal/modules/dnd/extract/itemevents/scriptorium_assets.go rename to internal/modules/dnd/extract/itemevents/prompt_assets.go index 74113fe..b463a1c 100644 --- a/internal/modules/dnd/extract/itemevents/scriptorium_assets.go +++ b/internal/modules/dnd/extract/itemevents/prompt_assets.go @@ -9,7 +9,7 @@ import ( "gitea.maximumdirect.net/eric/notarius/internal/modules/dnd/shared" ) -const scriptoriumPromptRoot = "assets/prompts" +const promptAssetRoot = "assets/prompts" var promptAssetManifest = shared.PromptAssetManifest{ ModuleDir: "dnd.item_events", @@ -32,21 +32,21 @@ func RegisterPromptAssets(registry *llm.AssetRegistry) error { if err != nil { return fmt.Errorf("prepare item event prompt assets: %w", err) } - if err := registry.RegisterPromptFS(promptFS, scriptoriumPromptRoot); err != nil { + if err := registry.RegisterPromptFS(promptFS, promptAssetRoot); err != nil { return err } return registry.RegisterSchemaFS(embeddedAssets, "assets/schemas") } -func scriptoriumPromptMetadata() (string, error) { - scriptoriumPromptHashOnce.Do(func() { - scriptoriumPromptHash, scriptoriumPromptHashErr = promptAssetManifest.Hash(embeddedAssets) +func promptAssetMetadata() (string, error) { + promptAssetHashOnce.Do(func() { + promptAssetHash, promptAssetHashErr = promptAssetManifest.Hash(embeddedAssets) }) - return scriptoriumPromptHash, scriptoriumPromptHashErr + return promptAssetHash, promptAssetHashErr } var ( - scriptoriumPromptHashOnce sync.Once - scriptoriumPromptHash string - scriptoriumPromptHashErr error + promptAssetHashOnce sync.Once + promptAssetHash string + promptAssetHashErr error ) diff --git a/internal/modules/dnd/extract/itemevents/scriptorium_assets_test.go b/internal/modules/dnd/extract/itemevents/prompt_assets_test.go similarity index 95% rename from internal/modules/dnd/extract/itemevents/scriptorium_assets_test.go rename to internal/modules/dnd/extract/itemevents/prompt_assets_test.go index 280a241..15f45d2 100644 --- a/internal/modules/dnd/extract/itemevents/scriptorium_assets_test.go +++ b/internal/modules/dnd/extract/itemevents/prompt_assets_test.go @@ -46,9 +46,9 @@ func TestPromptAssetsPrepareItemEventPrompt(t *testing.T) { } func TestPromptAssetsDoNotLeakIntoMetadata(t *testing.T) { - hash, err := scriptoriumPromptMetadata() + hash, err := promptAssetMetadata() if err != nil || !strings.HasPrefix(hash, "sha256:") { - t.Fatalf("scriptoriumPromptMetadata() = %q, %v", hash, err) + t.Fatalf("promptAssetMetadata() = %q, %v", hash, err) } metadata := newExtractor(t, &fakeItemEventsLLMClient{}).ManifestMetadata() payload, err := json.Marshal(metadata) diff --git a/internal/modules/dnd/extract/npcinteractions/extractor.go b/internal/modules/dnd/extract/npcinteractions/extractor.go index d74e338..0a5091a 100644 --- a/internal/modules/dnd/extract/npcinteractions/extractor.go +++ b/internal/modules/dnd/extract/npcinteractions/extractor.go @@ -80,7 +80,7 @@ func New(llmClient contracts.StructuredLLMClient, _ Options, references ...contr if err != nil { return nil, extractorErrorf("prepare NPC registry prompt input: %w", err) } - promptSHA, err := scriptoriumPromptMetadata() + promptSHA, err := promptAssetMetadata() if err != nil { return nil, extractorErrorf("load prompt metadata: %w", err) } diff --git a/internal/modules/dnd/extract/npcinteractions/scriptorium_assets.go b/internal/modules/dnd/extract/npcinteractions/prompt_assets.go similarity index 70% rename from internal/modules/dnd/extract/npcinteractions/scriptorium_assets.go rename to internal/modules/dnd/extract/npcinteractions/prompt_assets.go index 821b8b4..ad7ff0d 100644 --- a/internal/modules/dnd/extract/npcinteractions/scriptorium_assets.go +++ b/internal/modules/dnd/extract/npcinteractions/prompt_assets.go @@ -9,7 +9,7 @@ import ( "gitea.maximumdirect.net/eric/notarius/internal/modules/dnd/shared" ) -const scriptoriumPromptRoot = "assets/prompts" +const promptAssetRoot = "assets/prompts" var promptAssetManifest = shared.PromptAssetManifest{ ModuleDir: "dnd.npc_interactions", @@ -33,21 +33,21 @@ func RegisterPromptAssets(registry *llm.AssetRegistry) error { if err != nil { return fmt.Errorf("prepare NPC-interaction prompt assets: %w", err) } - if err := registry.RegisterPromptFS(promptFS, scriptoriumPromptRoot); err != nil { + if err := registry.RegisterPromptFS(promptFS, promptAssetRoot); err != nil { return err } return registry.RegisterSchemaFS(embeddedAssets, "assets/schemas") } -func scriptoriumPromptMetadata() (string, error) { - scriptoriumPromptHashOnce.Do(func() { - scriptoriumPromptHash, scriptoriumPromptHashErr = promptAssetManifest.Hash(embeddedAssets) +func promptAssetMetadata() (string, error) { + promptAssetHashOnce.Do(func() { + promptAssetHash, promptAssetHashErr = promptAssetManifest.Hash(embeddedAssets) }) - return scriptoriumPromptHash, scriptoriumPromptHashErr + return promptAssetHash, promptAssetHashErr } var ( - scriptoriumPromptHashOnce sync.Once - scriptoriumPromptHash string - scriptoriumPromptHashErr error + promptAssetHashOnce sync.Once + promptAssetHash string + promptAssetHashErr error ) diff --git a/internal/modules/dnd/extract/npcinteractions/scriptorium_assets_test.go b/internal/modules/dnd/extract/npcinteractions/prompt_assets_test.go similarity index 95% rename from internal/modules/dnd/extract/npcinteractions/scriptorium_assets_test.go rename to internal/modules/dnd/extract/npcinteractions/prompt_assets_test.go index 1b63cd1..4b41447 100644 --- a/internal/modules/dnd/extract/npcinteractions/scriptorium_assets_test.go +++ b/internal/modules/dnd/extract/npcinteractions/prompt_assets_test.go @@ -54,9 +54,9 @@ func TestRegisterPromptAssetsAndPrepareInteractionPrompt(t *testing.T) { } func TestPromptMetadataDoesNotExposeAssetContent(t *testing.T) { - hash, err := scriptoriumPromptMetadata() + hash, err := promptAssetMetadata() if err != nil || !strings.HasPrefix(hash, "sha256:") { - t.Fatalf("scriptoriumPromptMetadata() = %q, %v", hash, err) + t.Fatalf("promptAssetMetadata() = %q, %v", hash, err) } metadata := newExtractor(t, &fakeInteractionsLLMClient{}).ManifestMetadata() for _, forbidden := range []string{"common-dnd-system", "dnd_npc_interactions_llm.v1.json"} { diff --git a/internal/modules/dnd/extract/npcs/extractor.go b/internal/modules/dnd/extract/npcs/extractor.go index b813855..886a11d 100644 --- a/internal/modules/dnd/extract/npcs/extractor.go +++ b/internal/modules/dnd/extract/npcs/extractor.go @@ -54,7 +54,7 @@ func New(llmClient contracts.StructuredLLMClient, _ Options, references ...contr if len(references) > 1 { return nil, extractorErrorf("at most one reference set may be supplied") } - promptSHA, err := scriptoriumPromptMetadata() + promptSHA, err := promptAssetMetadata() if err != nil { return nil, extractorErrorf("load prompt metadata: %w", err) } diff --git a/internal/modules/dnd/extract/npcs/scriptorium_assets.go b/internal/modules/dnd/extract/npcs/prompt_assets.go similarity index 68% rename from internal/modules/dnd/extract/npcs/scriptorium_assets.go rename to internal/modules/dnd/extract/npcs/prompt_assets.go index 81f1798..d145a84 100644 --- a/internal/modules/dnd/extract/npcs/scriptorium_assets.go +++ b/internal/modules/dnd/extract/npcs/prompt_assets.go @@ -9,7 +9,7 @@ import ( "gitea.maximumdirect.net/eric/notarius/internal/modules/dnd/shared" ) -const scriptoriumPromptRoot = "assets/prompts" +const promptAssetRoot = "assets/prompts" var promptAssetManifest = shared.PromptAssetManifest{ ModuleDir: "dnd.npcs", @@ -32,21 +32,21 @@ func RegisterPromptAssets(registry *llm.AssetRegistry) error { if err != nil { return fmt.Errorf("prepare NPC prompt assets: %w", err) } - if err := registry.RegisterPromptFS(promptFS, scriptoriumPromptRoot); err != nil { + if err := registry.RegisterPromptFS(promptFS, promptAssetRoot); err != nil { return err } return registry.RegisterSchemaFS(embeddedAssets, "assets/schemas") } -func scriptoriumPromptMetadata() (string, error) { - scriptoriumPromptHashOnce.Do(func() { - scriptoriumPromptHash, scriptoriumPromptHashErr = promptAssetManifest.Hash(embeddedAssets) +func promptAssetMetadata() (string, error) { + promptAssetHashOnce.Do(func() { + promptAssetHash, promptAssetHashErr = promptAssetManifest.Hash(embeddedAssets) }) - return scriptoriumPromptHash, scriptoriumPromptHashErr + return promptAssetHash, promptAssetHashErr } var ( - scriptoriumPromptHashOnce sync.Once - scriptoriumPromptHash string - scriptoriumPromptHashErr error + promptAssetHashOnce sync.Once + promptAssetHash string + promptAssetHashErr error ) diff --git a/internal/modules/dnd/extract/npcs/scriptorium_assets_test.go b/internal/modules/dnd/extract/npcs/prompt_assets_test.go similarity index 94% rename from internal/modules/dnd/extract/npcs/scriptorium_assets_test.go rename to internal/modules/dnd/extract/npcs/prompt_assets_test.go index 73aa284..23c27e2 100644 --- a/internal/modules/dnd/extract/npcs/scriptorium_assets_test.go +++ b/internal/modules/dnd/extract/npcs/prompt_assets_test.go @@ -45,9 +45,9 @@ func TestRegisterPromptAssetsAndPrepareNPCPrompt(t *testing.T) { } func TestPromptMetadataAndDiagnosticsDoNotContainRawAssets(t *testing.T) { - hash, err := scriptoriumPromptMetadata() + hash, err := promptAssetMetadata() if err != nil || !strings.HasPrefix(hash, "sha256:") { - t.Fatalf("scriptoriumPromptMetadata() = %q, %v; want hash", hash, err) + t.Fatalf("promptAssetMetadata() = %q, %v; want hash", hash, err) } metadata := newExtractor(t, &fakeNPCsLLMClient{}).ManifestMetadata() payload, err := json.Marshal(metadata) diff --git a/internal/modules/dnd/extract/scenedescriptions/extractor.go b/internal/modules/dnd/extract/scenedescriptions/extractor.go index 070bfad..9ce7001 100644 --- a/internal/modules/dnd/extract/scenedescriptions/extractor.go +++ b/internal/modules/dnd/extract/scenedescriptions/extractor.go @@ -59,7 +59,7 @@ func New(llmClient contracts.StructuredLLMClient, _ Options, references ...contr if len(references) > 1 { return nil, extractorErrorf("at most one reference set may be supplied") } - promptSHA, err := scriptoriumPromptMetadata() + promptSHA, err := promptAssetMetadata() if err != nil { return nil, extractorErrorf("load prompt metadata: %w", err) } diff --git a/internal/modules/dnd/extract/scenedescriptions/scriptorium_assets.go b/internal/modules/dnd/extract/scenedescriptions/prompt_assets.go similarity index 69% rename from internal/modules/dnd/extract/scenedescriptions/scriptorium_assets.go rename to internal/modules/dnd/extract/scenedescriptions/prompt_assets.go index 2e918f1..1bd9b21 100644 --- a/internal/modules/dnd/extract/scenedescriptions/scriptorium_assets.go +++ b/internal/modules/dnd/extract/scenedescriptions/prompt_assets.go @@ -9,7 +9,7 @@ import ( "gitea.maximumdirect.net/eric/notarius/internal/modules/dnd/shared" ) -const scriptoriumPromptRoot = "assets/prompts" +const promptAssetRoot = "assets/prompts" var promptAssetManifest = shared.PromptAssetManifest{ ModuleDir: "dnd.scene_descriptions", @@ -31,21 +31,21 @@ func RegisterPromptAssets(registry *llm.AssetRegistry) error { if err != nil { return fmt.Errorf("prepare scene-description prompt assets: %w", err) } - if err := registry.RegisterPromptFS(promptFS, scriptoriumPromptRoot); err != nil { + if err := registry.RegisterPromptFS(promptFS, promptAssetRoot); err != nil { return err } return registry.RegisterSchemaFS(embeddedAssets, "assets/schemas") } -func scriptoriumPromptMetadata() (string, error) { - scriptoriumPromptHashOnce.Do(func() { - scriptoriumPromptHash, scriptoriumPromptHashErr = promptAssetManifest.Hash(embeddedAssets) +func promptAssetMetadata() (string, error) { + promptAssetHashOnce.Do(func() { + promptAssetHash, promptAssetHashErr = promptAssetManifest.Hash(embeddedAssets) }) - return scriptoriumPromptHash, scriptoriumPromptHashErr + return promptAssetHash, promptAssetHashErr } var ( - scriptoriumPromptHashOnce sync.Once - scriptoriumPromptHash string - scriptoriumPromptHashErr error + promptAssetHashOnce sync.Once + promptAssetHash string + promptAssetHashErr error ) diff --git a/internal/modules/dnd/extract/scenedescriptions/scriptorium_assets_test.go b/internal/modules/dnd/extract/scenedescriptions/prompt_assets_test.go similarity index 95% rename from internal/modules/dnd/extract/scenedescriptions/scriptorium_assets_test.go rename to internal/modules/dnd/extract/scenedescriptions/prompt_assets_test.go index a89b19e..5b5736a 100644 --- a/internal/modules/dnd/extract/scenedescriptions/scriptorium_assets_test.go +++ b/internal/modules/dnd/extract/scenedescriptions/prompt_assets_test.go @@ -45,9 +45,9 @@ func TestRegisterPromptAssetsPreparesSceneDescriptionPrompt(t *testing.T) { } func TestPromptMetadataAndDiagnosticsDoNotContainRawAssets(t *testing.T) { - hash, err := scriptoriumPromptMetadata() + hash, err := promptAssetMetadata() if err != nil || !strings.HasPrefix(hash, "sha256:") { - t.Fatalf("scriptoriumPromptMetadata() = %q, %v; want hash", hash, err) + t.Fatalf("promptAssetMetadata() = %q, %v; want hash", hash, err) } payload, err := json.Marshal(newExtractor(t, &fakeSceneDescriptionsLLMClient{}).ManifestMetadata()) if err != nil { diff --git a/internal/modules/dnd/extract/spells/extractor.go b/internal/modules/dnd/extract/spells/extractor.go index 11fbc92..d609493 100644 --- a/internal/modules/dnd/extract/spells/extractor.go +++ b/internal/modules/dnd/extract/spells/extractor.go @@ -94,7 +94,7 @@ func New(llmClient contracts.StructuredLLMClient, _ Options, references ...contr if err != nil { return nil, extractorErrorf("prepare NPC registry prompt input: %w", err) } - promptSHA, err := scriptoriumPromptMetadata() + promptSHA, err := promptAssetMetadata() if err != nil { return nil, extractorErrorf("load prompt metadata: %w", err) } diff --git a/internal/modules/dnd/extract/spells/scriptorium_assets.go b/internal/modules/dnd/extract/spells/prompt_assets.go similarity index 70% rename from internal/modules/dnd/extract/spells/scriptorium_assets.go rename to internal/modules/dnd/extract/spells/prompt_assets.go index 48205c7..f5d9ae3 100644 --- a/internal/modules/dnd/extract/spells/scriptorium_assets.go +++ b/internal/modules/dnd/extract/spells/prompt_assets.go @@ -9,7 +9,7 @@ import ( "gitea.maximumdirect.net/eric/notarius/internal/modules/dnd/shared" ) -const scriptoriumPromptRoot = "assets/prompts" +const promptAssetRoot = "assets/prompts" var promptAssetManifest = shared.PromptAssetManifest{ ModuleDir: "dnd.spells", @@ -34,21 +34,21 @@ func RegisterPromptAssets(registry *llm.AssetRegistry) error { if err != nil { return fmt.Errorf("prepare spell prompt assets: %w", err) } - if err := registry.RegisterPromptFS(promptFS, scriptoriumPromptRoot); err != nil { + if err := registry.RegisterPromptFS(promptFS, promptAssetRoot); err != nil { return err } return registry.RegisterSchemaFS(embeddedAssets, "assets/schemas") } -func scriptoriumPromptMetadata() (string, error) { - scriptoriumPromptHashOnce.Do(func() { - scriptoriumPromptHash, scriptoriumPromptHashErr = promptAssetManifest.Hash(embeddedAssets) +func promptAssetMetadata() (string, error) { + promptAssetHashOnce.Do(func() { + promptAssetHash, promptAssetHashErr = promptAssetManifest.Hash(embeddedAssets) }) - return scriptoriumPromptHash, scriptoriumPromptHashErr + return promptAssetHash, promptAssetHashErr } var ( - scriptoriumPromptHashOnce sync.Once - scriptoriumPromptHash string - scriptoriumPromptHashErr error + promptAssetHashOnce sync.Once + promptAssetHash string + promptAssetHashErr error ) diff --git a/internal/modules/dnd/extract/spells/scriptorium_assets_test.go b/internal/modules/dnd/extract/spells/prompt_assets_test.go similarity index 95% rename from internal/modules/dnd/extract/spells/scriptorium_assets_test.go rename to internal/modules/dnd/extract/spells/prompt_assets_test.go index 92c66cc..866b2b8 100644 --- a/internal/modules/dnd/extract/spells/scriptorium_assets_test.go +++ b/internal/modules/dnd/extract/spells/prompt_assets_test.go @@ -11,7 +11,7 @@ import ( "gitea.maximumdirect.net/eric/promptkit" ) -func TestScriptoriumPromptPreparesSpellPrompt(t *testing.T) { +func TestPromptAssetsPrepareSpellPrompt(t *testing.T) { transcript := []byte(`{"id":"session-1","segments":[{"id":"u1","text":"Mira casts shield."}]}`) prepared := prepareSpellsPrompt(t, transcript, "Dana: Mira", "Mira: wizard", "Shield: abjuration") @@ -23,7 +23,7 @@ func TestScriptoriumPromptPreparesSpellPrompt(t *testing.T) { } } -func TestScriptoriumPromptPreparesWithMissingOptionalReferences(t *testing.T) { +func TestPromptAssetsPrepareWithMissingOptionalReferences(t *testing.T) { transcript := []byte(`{"id":"session-1","segments":[]}`) prepared := prepareSpellsPrompt(t, transcript, " ", " ", " ") @@ -35,7 +35,7 @@ func TestScriptoriumPromptPreparesWithMissingOptionalReferences(t *testing.T) { t.Fatalf("reference message did not render empty optional reference placeholders") } -func TestScriptoriumPromptDiagnosticsOmitRawMaterials(t *testing.T) { +func TestPromptAssetDiagnosticsOmitRawMaterials(t *testing.T) { transcript := []byte(`{"secret":"source text"}`) reference := "private party note" prepared := prepareSpellsPrompt(t, transcript, "private player note", reference, " ") diff --git a/internal/modules/dnd/normalize/npcs/normalizer.go b/internal/modules/dnd/normalize/npcs/normalizer.go index d3ef3fe..65fe565 100644 --- a/internal/modules/dnd/normalize/npcs/normalizer.go +++ b/internal/modules/dnd/normalize/npcs/normalizer.go @@ -53,7 +53,7 @@ func New(llmClient contracts.StructuredLLMClient, _ Options) (*Normalizer, error if llmClient == nil { return nil, normalizerErrorf("LLM client must not be nil") } - promptSHA, err := scriptoriumPromptMetadata() + promptSHA, err := promptAssetMetadata() if err != nil { return nil, normalizerErrorf("load prompt metadata: %w", err) } diff --git a/internal/modules/dnd/normalize/npcs/scriptorium_assets.go b/internal/modules/dnd/normalize/npcs/prompt_assets.go similarity index 68% rename from internal/modules/dnd/normalize/npcs/scriptorium_assets.go rename to internal/modules/dnd/normalize/npcs/prompt_assets.go index 3a38ef7..28779dc 100644 --- a/internal/modules/dnd/normalize/npcs/scriptorium_assets.go +++ b/internal/modules/dnd/normalize/npcs/prompt_assets.go @@ -9,7 +9,7 @@ import ( "gitea.maximumdirect.net/eric/notarius/internal/modules/dnd/shared" ) -const scriptoriumPromptRoot = "assets/prompts" +const promptAssetRoot = "assets/prompts" var promptAssetManifest = shared.PromptAssetManifest{ ModuleDir: PromptID, @@ -30,21 +30,21 @@ func RegisterPromptAssets(registry *llm.AssetRegistry) error { if err != nil { return fmt.Errorf("prepare NPC normalization prompt assets: %w", err) } - if err := registry.RegisterPromptFS(promptFS, scriptoriumPromptRoot); err != nil { + if err := registry.RegisterPromptFS(promptFS, promptAssetRoot); err != nil { return err } return registry.RegisterSchemaFS(embeddedAssets, "assets/schemas") } -func scriptoriumPromptMetadata() (string, error) { - scriptoriumPromptHashOnce.Do(func() { - scriptoriumPromptHash, scriptoriumPromptHashErr = promptAssetManifest.Hash(embeddedAssets) +func promptAssetMetadata() (string, error) { + promptAssetHashOnce.Do(func() { + promptAssetHash, promptAssetHashErr = promptAssetManifest.Hash(embeddedAssets) }) - return scriptoriumPromptHash, scriptoriumPromptHashErr + return promptAssetHash, promptAssetHashErr } var ( - scriptoriumPromptHashOnce sync.Once - scriptoriumPromptHash string - scriptoriumPromptHashErr error + promptAssetHashOnce sync.Once + promptAssetHash string + promptAssetHashErr error ) diff --git a/internal/modules/dnd/normalize/npcs/scriptorium_assets_test.go b/internal/modules/dnd/normalize/npcs/prompt_assets_test.go similarity index 94% rename from internal/modules/dnd/normalize/npcs/scriptorium_assets_test.go rename to internal/modules/dnd/normalize/npcs/prompt_assets_test.go index 9d1705d..654b93f 100644 --- a/internal/modules/dnd/normalize/npcs/scriptorium_assets_test.go +++ b/internal/modules/dnd/normalize/npcs/prompt_assets_test.go @@ -15,8 +15,8 @@ func TestRegisterPromptAssetsPreparesNormalizationPrompt(t *testing.T) { if want := []string{"common-dnd-system.md", "common-dnd-transcript.md"}; !reflect.DeepEqual(promptAssetManifest.SharedFiles, want) { t.Fatalf("shared prompt assets = %#v, want %#v", promptAssetManifest.SharedFiles, want) } - if promptHash, err := scriptoriumPromptMetadata(); err != nil || promptHash == "" { - t.Fatalf("scriptoriumPromptMetadata() = %q, %v; want prompt fingerprint", promptHash, err) + if promptHash, err := promptAssetMetadata(); err != nil || promptHash == "" { + t.Fatalf("promptAssetMetadata() = %q, %v; want prompt fingerprint", promptHash, err) } registry := llm.NewAssetRegistry() if err := RegisterPromptAssets(registry); err != nil {