diff --git a/internal/modules/dnd/extract/enemyevents/assets/prompts/dnd.enemy_events.yaml b/assets/dnd/enemy-events/prompts/dnd.enemy_events.yaml similarity index 100% rename from internal/modules/dnd/extract/enemyevents/assets/prompts/dnd.enemy_events.yaml rename to assets/dnd/enemy-events/prompts/dnd.enemy_events.yaml diff --git a/internal/modules/dnd/extract/enemyevents/assets/prompts/grounding.md b/assets/dnd/enemy-events/prompts/grounding.md similarity index 100% rename from internal/modules/dnd/extract/enemyevents/assets/prompts/grounding.md rename to assets/dnd/enemy-events/prompts/grounding.md diff --git a/internal/modules/dnd/extract/enemyevents/assets/prompts/instructions.md b/assets/dnd/enemy-events/prompts/instructions.md similarity index 100% rename from internal/modules/dnd/extract/enemyevents/assets/prompts/instructions.md rename to assets/dnd/enemy-events/prompts/instructions.md diff --git a/internal/modules/dnd/extract/enemyevents/assets/prompts/task.md b/assets/dnd/enemy-events/prompts/task.md similarity index 100% rename from internal/modules/dnd/extract/enemyevents/assets/prompts/task.md rename to assets/dnd/enemy-events/prompts/task.md diff --git a/internal/modules/dnd/extract/enemyevents/assets/schemas/dnd_enemy_events_llm.v1.json b/assets/dnd/enemy-events/schemas/dnd_enemy_events_llm.v1.json similarity index 100% rename from internal/modules/dnd/extract/enemyevents/assets/schemas/dnd_enemy_events_llm.v1.json rename to assets/dnd/enemy-events/schemas/dnd_enemy_events_llm.v1.json diff --git a/internal/modules/dnd/extract/itemevents/assets/prompts/dnd.item_events.yaml b/assets/dnd/item-events/prompts/dnd.item_events.yaml similarity index 100% rename from internal/modules/dnd/extract/itemevents/assets/prompts/dnd.item_events.yaml rename to assets/dnd/item-events/prompts/dnd.item_events.yaml diff --git a/internal/modules/dnd/extract/itemevents/assets/prompts/instructions.md b/assets/dnd/item-events/prompts/instructions.md similarity index 100% rename from internal/modules/dnd/extract/itemevents/assets/prompts/instructions.md rename to assets/dnd/item-events/prompts/instructions.md diff --git a/internal/modules/dnd/extract/itemevents/assets/prompts/task.md b/assets/dnd/item-events/prompts/task.md similarity index 100% rename from internal/modules/dnd/extract/itemevents/assets/prompts/task.md rename to assets/dnd/item-events/prompts/task.md diff --git a/internal/modules/dnd/extract/itemevents/assets/schemas/dnd_item_events_llm.v1.json b/assets/dnd/item-events/schemas/dnd_item_events_llm.v1.json similarity index 100% rename from internal/modules/dnd/extract/itemevents/assets/schemas/dnd_item_events_llm.v1.json rename to assets/dnd/item-events/schemas/dnd_item_events_llm.v1.json diff --git a/internal/modules/dnd/extract/enemyevents/assets.go b/internal/modules/dnd/extract/enemyevents/assets.go deleted file mode 100644 index 8245ea5..0000000 --- a/internal/modules/dnd/extract/enemyevents/assets.go +++ /dev/null @@ -1,6 +0,0 @@ -package enemyevents - -import "embed" - -//go:embed assets/schemas/dnd_enemy_events_llm.v1.json assets/prompts/*.yaml assets/prompts/*.md -var embeddedAssets embed.FS diff --git a/internal/modules/dnd/extract/enemyevents/prompt_assets.go b/internal/modules/dnd/extract/enemyevents/prompt_assets.go index 080ba90..507936e 100644 --- a/internal/modules/dnd/extract/enemyevents/prompt_assets.go +++ b/internal/modules/dnd/extract/enemyevents/prompt_assets.go @@ -2,8 +2,10 @@ package enemyevents import ( "fmt" + "io/fs" "sync" + rootassets "gitea.maximumdirect.net/eric/notarius/assets" "gitea.maximumdirect.net/eric/notarius/internal/framework/llm" "gitea.maximumdirect.net/eric/notarius/internal/framework/promptfs" "gitea.maximumdirect.net/eric/notarius/internal/modules/dnd/shared" @@ -14,10 +16,10 @@ const promptAssetRoot = "assets/prompts" var promptAssetManifest = shared.PromptAssetManifest{ ModuleDir: "dnd.enemy_events", ModuleFiles: []promptfs.ModulePromptFile{ - {Name: "dnd.enemy_events.yaml", Path: "assets/prompts/dnd.enemy_events.yaml"}, - {Name: "grounding.md", Path: "assets/prompts/grounding.md"}, - {Name: "task.md", Path: "assets/prompts/task.md"}, - {Name: "instructions.md", Path: "assets/prompts/instructions.md"}, + {Name: "dnd.enemy_events.yaml", Path: "prompts/dnd.enemy_events.yaml"}, + {Name: "grounding.md", Path: "prompts/grounding.md"}, + {Name: "task.md", Path: "prompts/task.md"}, + {Name: "instructions.md", Path: "prompts/instructions.md"}, }, SharedFiles: []string{ "common-dnd-system.md", @@ -29,20 +31,41 @@ var promptAssetManifest = shared.PromptAssetManifest{ }, } +func moduleAssetFS() (fs.FS, error) { + assets, err := fs.Sub(rootassets.FS(), "dnd/enemy-events") + if err != nil { + return nil, fmt.Errorf("scope enemy-event assets: %w", err) + } + return assets, nil +} + func RegisterPromptAssets(registry *llm.AssetRegistry) error { - promptFS, err := promptAssetManifest.PromptFS(embeddedAssets) + assets, err := moduleAssetFS() + if err != nil { + return err + } + promptFS, err := promptAssetManifest.PromptFS(assets) if err != nil { return fmt.Errorf("prepare enemy-event prompt assets: %w", err) } if err := registry.RegisterPromptFS(promptFS, promptAssetRoot); err != nil { return err } - return registry.RegisterSchemaFS(embeddedAssets, "assets/schemas") + schemas, err := fs.Sub(assets, "schemas") + if err != nil { + return fmt.Errorf("scope enemy-event schemas: %w", err) + } + return registry.RegisterSchemaFS(schemas, ".") } func promptAssetMetadata() (string, error) { promptAssetHashOnce.Do(func() { - promptAssetHash, promptAssetHashErr = promptAssetManifest.Hash(embeddedAssets) + assets, err := moduleAssetFS() + if err != nil { + promptAssetHashErr = err + return + } + promptAssetHash, promptAssetHashErr = promptAssetManifest.Hash(assets) }) return promptAssetHash, promptAssetHashErr } diff --git a/internal/modules/dnd/extract/enemyevents/schema.go b/internal/modules/dnd/extract/enemyevents/schema.go index c320393..211a65e 100644 --- a/internal/modules/dnd/extract/enemyevents/schema.go +++ b/internal/modules/dnd/extract/enemyevents/schema.go @@ -11,11 +11,15 @@ const ( ) func loadResponseSchema() (llm.ResponseSchema, error) { - return llm.LoadResponseSchema(embeddedAssets, llm.ResponseSchemaDefinition{ + assets, err := moduleAssetFS() + if err != nil { + return llm.ResponseSchema{}, err + } + return llm.LoadResponseSchema(assets, llm.ResponseSchemaDefinition{ Key: ResponseSchemaKey, ID: ResponseSchemaID, Version: SchemaVersion, Name: ResponseSchemaName, - AssetPath: "assets/schemas/dnd_enemy_events_llm.v1.json", + AssetPath: "schemas/dnd_enemy_events_llm.v1.json", }) } diff --git a/internal/modules/dnd/extract/itemevents/assets.go b/internal/modules/dnd/extract/itemevents/assets.go deleted file mode 100644 index 4a29b5d..0000000 --- a/internal/modules/dnd/extract/itemevents/assets.go +++ /dev/null @@ -1,6 +0,0 @@ -package itemevents - -import "embed" - -//go:embed assets/schemas/dnd_item_events_llm.v1.json assets/prompts/*.yaml assets/prompts/*.md -var embeddedAssets embed.FS diff --git a/internal/modules/dnd/extract/itemevents/prompt_assets.go b/internal/modules/dnd/extract/itemevents/prompt_assets.go index b463a1c..516d0fc 100644 --- a/internal/modules/dnd/extract/itemevents/prompt_assets.go +++ b/internal/modules/dnd/extract/itemevents/prompt_assets.go @@ -2,8 +2,10 @@ package itemevents import ( "fmt" + "io/fs" "sync" + rootassets "gitea.maximumdirect.net/eric/notarius/assets" "gitea.maximumdirect.net/eric/notarius/internal/framework/llm" "gitea.maximumdirect.net/eric/notarius/internal/framework/promptfs" "gitea.maximumdirect.net/eric/notarius/internal/modules/dnd/shared" @@ -14,9 +16,9 @@ const promptAssetRoot = "assets/prompts" var promptAssetManifest = shared.PromptAssetManifest{ ModuleDir: "dnd.item_events", ModuleFiles: []promptfs.ModulePromptFile{ - {Name: "dnd.item_events.yaml", Path: "assets/prompts/dnd.item_events.yaml"}, - {Name: "task.md", Path: "assets/prompts/task.md"}, - {Name: "instructions.md", Path: "assets/prompts/instructions.md"}, + {Name: "dnd.item_events.yaml", Path: "prompts/dnd.item_events.yaml"}, + {Name: "task.md", Path: "prompts/task.md"}, + {Name: "instructions.md", Path: "prompts/instructions.md"}, }, SharedFiles: []string{ "common-dnd-system.md", @@ -27,20 +29,41 @@ var promptAssetManifest = shared.PromptAssetManifest{ }, } +func moduleAssetFS() (fs.FS, error) { + assets, err := fs.Sub(rootassets.FS(), "dnd/item-events") + if err != nil { + return nil, fmt.Errorf("scope item-event assets: %w", err) + } + return assets, nil +} + func RegisterPromptAssets(registry *llm.AssetRegistry) error { - promptFS, err := promptAssetManifest.PromptFS(embeddedAssets) + assets, err := moduleAssetFS() + if err != nil { + return err + } + promptFS, err := promptAssetManifest.PromptFS(assets) if err != nil { return fmt.Errorf("prepare item event prompt assets: %w", err) } if err := registry.RegisterPromptFS(promptFS, promptAssetRoot); err != nil { return err } - return registry.RegisterSchemaFS(embeddedAssets, "assets/schemas") + schemas, err := fs.Sub(assets, "schemas") + if err != nil { + return fmt.Errorf("scope item-event schemas: %w", err) + } + return registry.RegisterSchemaFS(schemas, ".") } func promptAssetMetadata() (string, error) { promptAssetHashOnce.Do(func() { - promptAssetHash, promptAssetHashErr = promptAssetManifest.Hash(embeddedAssets) + assets, err := moduleAssetFS() + if err != nil { + promptAssetHashErr = err + return + } + promptAssetHash, promptAssetHashErr = promptAssetManifest.Hash(assets) }) return promptAssetHash, promptAssetHashErr } diff --git a/internal/modules/dnd/extract/itemevents/schema.go b/internal/modules/dnd/extract/itemevents/schema.go index 10791b1..8dbe2ad 100644 --- a/internal/modules/dnd/extract/itemevents/schema.go +++ b/internal/modules/dnd/extract/itemevents/schema.go @@ -11,11 +11,15 @@ const ( ) func loadResponseSchema() (llm.ResponseSchema, error) { - return llm.LoadResponseSchema(embeddedAssets, llm.ResponseSchemaDefinition{ + assets, err := moduleAssetFS() + if err != nil { + return llm.ResponseSchema{}, err + } + return llm.LoadResponseSchema(assets, llm.ResponseSchemaDefinition{ Key: ResponseSchemaKey, ID: ResponseSchemaID, Version: SchemaVersion, Name: ResponseSchemaName, - AssetPath: "assets/schemas/dnd_item_events_llm.v1.json", + AssetPath: "schemas/dnd_item_events_llm.v1.json", }) }