Centralize NPC LLM assets
This commit is contained in:
@@ -1,6 +0,0 @@
|
|||||||
package npcinteractions
|
|
||||||
|
|
||||||
import "embed"
|
|
||||||
|
|
||||||
//go:embed assets/schemas/dnd_npc_interactions_llm.v1.json assets/prompts/*.yaml assets/prompts/*.md
|
|
||||||
var embeddedAssets embed.FS
|
|
||||||
@@ -2,8 +2,10 @@ package npcinteractions
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io/fs"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
|
rootassets "gitea.maximumdirect.net/eric/notarius/assets"
|
||||||
"gitea.maximumdirect.net/eric/notarius/internal/framework/llm"
|
"gitea.maximumdirect.net/eric/notarius/internal/framework/llm"
|
||||||
"gitea.maximumdirect.net/eric/notarius/internal/framework/promptfs"
|
"gitea.maximumdirect.net/eric/notarius/internal/framework/promptfs"
|
||||||
"gitea.maximumdirect.net/eric/notarius/internal/modules/dnd/shared"
|
"gitea.maximumdirect.net/eric/notarius/internal/modules/dnd/shared"
|
||||||
@@ -14,9 +16,9 @@ const promptAssetRoot = "assets/prompts"
|
|||||||
var promptAssetManifest = shared.PromptAssetManifest{
|
var promptAssetManifest = shared.PromptAssetManifest{
|
||||||
ModuleDir: "dnd.npc_interactions",
|
ModuleDir: "dnd.npc_interactions",
|
||||||
ModuleFiles: []promptfs.ModulePromptFile{
|
ModuleFiles: []promptfs.ModulePromptFile{
|
||||||
{Name: "dnd.npc_interactions.yaml", Path: "assets/prompts/dnd.npc_interactions.yaml"},
|
{Name: "dnd.npc_interactions.yaml", Path: "prompts/dnd.npc_interactions.yaml"},
|
||||||
{Name: "task.md", Path: "assets/prompts/task.md"},
|
{Name: "task.md", Path: "prompts/task.md"},
|
||||||
{Name: "instructions.md", Path: "assets/prompts/instructions.md"},
|
{Name: "instructions.md", Path: "prompts/instructions.md"},
|
||||||
},
|
},
|
||||||
SharedFiles: []string{
|
SharedFiles: []string{
|
||||||
"common-dnd-system.md",
|
"common-dnd-system.md",
|
||||||
@@ -28,20 +30,41 @@ var promptAssetManifest = shared.PromptAssetManifest{
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func moduleAssetFS() (fs.FS, error) {
|
||||||
|
assets, err := fs.Sub(rootassets.FS(), "dnd/npc-interactions")
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("scope NPC-interaction assets: %w", err)
|
||||||
|
}
|
||||||
|
return assets, nil
|
||||||
|
}
|
||||||
|
|
||||||
func RegisterPromptAssets(registry *llm.AssetRegistry) error {
|
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 {
|
if err != nil {
|
||||||
return fmt.Errorf("prepare NPC-interaction prompt assets: %w", err)
|
return fmt.Errorf("prepare NPC-interaction prompt assets: %w", err)
|
||||||
}
|
}
|
||||||
if err := registry.RegisterPromptFS(promptFS, promptAssetRoot); err != nil {
|
if err := registry.RegisterPromptFS(promptFS, promptAssetRoot); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return registry.RegisterSchemaFS(embeddedAssets, "assets/schemas")
|
schemas, err := fs.Sub(assets, "schemas")
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("scope NPC-interaction schemas: %w", err)
|
||||||
|
}
|
||||||
|
return registry.RegisterSchemaFS(schemas, ".")
|
||||||
}
|
}
|
||||||
|
|
||||||
func promptAssetMetadata() (string, error) {
|
func promptAssetMetadata() (string, error) {
|
||||||
promptAssetHashOnce.Do(func() {
|
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
|
return promptAssetHash, promptAssetHashErr
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,11 +11,15 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func loadResponseSchema() (llm.ResponseSchema, error) {
|
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,
|
Key: ResponseSchemaKey,
|
||||||
ID: ResponseSchemaID,
|
ID: ResponseSchemaID,
|
||||||
Version: SchemaVersion,
|
Version: SchemaVersion,
|
||||||
Name: ResponseSchemaName,
|
Name: ResponseSchemaName,
|
||||||
AssetPath: "assets/schemas/dnd_npc_interactions_llm.v1.json",
|
AssetPath: "schemas/dnd_npc_interactions_llm.v1.json",
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +0,0 @@
|
|||||||
package npcs
|
|
||||||
|
|
||||||
import "embed"
|
|
||||||
|
|
||||||
//go:embed assets/schemas/dnd_npcs_llm.v1.json assets/prompts/*.yaml assets/prompts/*.md
|
|
||||||
var embeddedAssets embed.FS
|
|
||||||
@@ -2,8 +2,10 @@ package npcs
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io/fs"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
|
rootassets "gitea.maximumdirect.net/eric/notarius/assets"
|
||||||
"gitea.maximumdirect.net/eric/notarius/internal/framework/llm"
|
"gitea.maximumdirect.net/eric/notarius/internal/framework/llm"
|
||||||
"gitea.maximumdirect.net/eric/notarius/internal/framework/promptfs"
|
"gitea.maximumdirect.net/eric/notarius/internal/framework/promptfs"
|
||||||
"gitea.maximumdirect.net/eric/notarius/internal/modules/dnd/shared"
|
"gitea.maximumdirect.net/eric/notarius/internal/modules/dnd/shared"
|
||||||
@@ -14,9 +16,9 @@ const promptAssetRoot = "assets/prompts"
|
|||||||
var promptAssetManifest = shared.PromptAssetManifest{
|
var promptAssetManifest = shared.PromptAssetManifest{
|
||||||
ModuleDir: "dnd.npcs",
|
ModuleDir: "dnd.npcs",
|
||||||
ModuleFiles: []promptfs.ModulePromptFile{
|
ModuleFiles: []promptfs.ModulePromptFile{
|
||||||
{Name: "dnd.npcs.yaml", Path: "assets/prompts/dnd.npcs.yaml"},
|
{Name: "dnd.npcs.yaml", Path: "prompts/dnd.npcs.yaml"},
|
||||||
{Name: "task.md", Path: "assets/prompts/task.md"},
|
{Name: "task.md", Path: "prompts/task.md"},
|
||||||
{Name: "instructions.md", Path: "assets/prompts/instructions.md"},
|
{Name: "instructions.md", Path: "prompts/instructions.md"},
|
||||||
},
|
},
|
||||||
SharedFiles: []string{
|
SharedFiles: []string{
|
||||||
"common-dnd-system.md",
|
"common-dnd-system.md",
|
||||||
@@ -27,20 +29,41 @@ var promptAssetManifest = shared.PromptAssetManifest{
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func moduleAssetFS() (fs.FS, error) {
|
||||||
|
assets, err := fs.Sub(rootassets.FS(), "dnd/npcs/extract")
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("scope NPC extraction assets: %w", err)
|
||||||
|
}
|
||||||
|
return assets, nil
|
||||||
|
}
|
||||||
|
|
||||||
func RegisterPromptAssets(registry *llm.AssetRegistry) error {
|
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 {
|
if err != nil {
|
||||||
return fmt.Errorf("prepare NPC prompt assets: %w", err)
|
return fmt.Errorf("prepare NPC prompt assets: %w", err)
|
||||||
}
|
}
|
||||||
if err := registry.RegisterPromptFS(promptFS, promptAssetRoot); err != nil {
|
if err := registry.RegisterPromptFS(promptFS, promptAssetRoot); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return registry.RegisterSchemaFS(embeddedAssets, "assets/schemas")
|
schemas, err := fs.Sub(assets, "schemas")
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("scope NPC extraction schemas: %w", err)
|
||||||
|
}
|
||||||
|
return registry.RegisterSchemaFS(schemas, ".")
|
||||||
}
|
}
|
||||||
|
|
||||||
func promptAssetMetadata() (string, error) {
|
func promptAssetMetadata() (string, error) {
|
||||||
promptAssetHashOnce.Do(func() {
|
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
|
return promptAssetHash, promptAssetHashErr
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,11 +11,15 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func loadResponseSchema() (llm.ResponseSchema, error) {
|
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,
|
Key: ResponseSchemaKey,
|
||||||
ID: ResponseSchemaID,
|
ID: ResponseSchemaID,
|
||||||
Version: SchemaVersion,
|
Version: SchemaVersion,
|
||||||
Name: ResponseSchemaName,
|
Name: ResponseSchemaName,
|
||||||
AssetPath: "assets/schemas/dnd_npcs_llm.v1.json",
|
AssetPath: "schemas/dnd_npcs_llm.v1.json",
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +0,0 @@
|
|||||||
package npcs
|
|
||||||
|
|
||||||
import "embed"
|
|
||||||
|
|
||||||
//go:embed assets/prompts/*.yaml assets/prompts/*.md
|
|
||||||
var embeddedAssets embed.FS
|
|
||||||
@@ -2,8 +2,10 @@ package npcs
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io/fs"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
|
rootassets "gitea.maximumdirect.net/eric/notarius/assets"
|
||||||
"gitea.maximumdirect.net/eric/notarius/internal/framework/llm"
|
"gitea.maximumdirect.net/eric/notarius/internal/framework/llm"
|
||||||
"gitea.maximumdirect.net/eric/notarius/internal/framework/promptfs"
|
"gitea.maximumdirect.net/eric/notarius/internal/framework/promptfs"
|
||||||
"gitea.maximumdirect.net/eric/notarius/internal/modules/dnd/shared"
|
"gitea.maximumdirect.net/eric/notarius/internal/modules/dnd/shared"
|
||||||
@@ -14,9 +16,9 @@ const promptAssetRoot = "assets/prompts"
|
|||||||
var promptAssetManifest = shared.PromptAssetManifest{
|
var promptAssetManifest = shared.PromptAssetManifest{
|
||||||
ModuleDir: PromptID,
|
ModuleDir: PromptID,
|
||||||
ModuleFiles: []promptfs.ModulePromptFile{
|
ModuleFiles: []promptfs.ModulePromptFile{
|
||||||
{Name: "dnd.npcs.normalize.yaml", Path: "assets/prompts/dnd.npcs.normalize.yaml"},
|
{Name: "dnd.npcs.normalize.yaml", Path: "prompts/dnd.npcs.normalize.yaml"},
|
||||||
{Name: "task.md", Path: "assets/prompts/task.md"},
|
{Name: "task.md", Path: "prompts/task.md"},
|
||||||
{Name: "candidates.md", Path: "assets/prompts/candidates.md"},
|
{Name: "candidates.md", Path: "prompts/candidates.md"},
|
||||||
},
|
},
|
||||||
SharedFiles: []string{
|
SharedFiles: []string{
|
||||||
"common-dnd-system.md",
|
"common-dnd-system.md",
|
||||||
@@ -25,8 +27,20 @@ var promptAssetManifest = shared.PromptAssetManifest{
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func moduleAssetFS() (fs.FS, error) {
|
||||||
|
assets, err := fs.Sub(rootassets.FS(), "dnd/npcs/normalize")
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("scope NPC normalization assets: %w", err)
|
||||||
|
}
|
||||||
|
return assets, nil
|
||||||
|
}
|
||||||
|
|
||||||
func RegisterPromptAssets(registry *llm.AssetRegistry) error {
|
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 {
|
if err != nil {
|
||||||
return fmt.Errorf("prepare NPC normalization prompt assets: %w", err)
|
return fmt.Errorf("prepare NPC normalization prompt assets: %w", err)
|
||||||
}
|
}
|
||||||
@@ -35,7 +49,12 @@ func RegisterPromptAssets(registry *llm.AssetRegistry) error {
|
|||||||
|
|
||||||
func promptAssetMetadata() (string, error) {
|
func promptAssetMetadata() (string, error) {
|
||||||
promptAssetHashOnce.Do(func() {
|
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
|
return promptAssetHash, promptAssetHashErr
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user