46 lines
1.5 KiB
Go
46 lines
1.5 KiB
Go
package spells
|
|
|
|
import (
|
|
"fmt"
|
|
"sync"
|
|
|
|
"gitea.maximumdirect.net/eric/notarius/internal/framework/llm"
|
|
"gitea.maximumdirect.net/eric/notarius/internal/modules/sharedassets"
|
|
"gitea.maximumdirect.net/eric/notarius/internal/modules/sharedassets/dnd"
|
|
)
|
|
|
|
const scriptoriumPromptRoot = "assets/prompts"
|
|
|
|
func RegisterPromptAssets(registry *llm.AssetRegistry) error {
|
|
promptFS, err := dnd.ModulePromptFS("dnd.spells", embeddedAssets, []sharedassets.ModulePromptFile{
|
|
{Name: "dnd.spells.yaml", Path: "assets/prompts/dnd.spells.yaml"},
|
|
{Name: "task.md", Path: "assets/prompts/task.md"},
|
|
{Name: "instructions.md", Path: "assets/prompts/instructions.md"},
|
|
})
|
|
if err != nil {
|
|
return fmt.Errorf("prepare spell prompt assets: %w", err)
|
|
}
|
|
if err := registry.RegisterPromptFS(promptFS, scriptoriumPromptRoot); err != nil {
|
|
return err
|
|
}
|
|
return registry.RegisterSchemaFS(embeddedAssets, "assets/schemas")
|
|
}
|
|
|
|
func scriptoriumPromptMetadata() (string, error) {
|
|
scriptoriumPromptHashOnce.Do(func() {
|
|
parts := append([]llm.AssetHashPart{
|
|
{FS: embeddedAssets, Path: "assets/prompts/dnd.spells.yaml"},
|
|
{FS: embeddedAssets, Path: "assets/prompts/task.md"},
|
|
{FS: embeddedAssets, Path: "assets/prompts/instructions.md"},
|
|
}, append(dnd.CommonHashParts(), dnd.ReferenceHashParts()...)...)
|
|
scriptoriumPromptHash, scriptoriumPromptHashErr = llm.HashAssets(parts)
|
|
})
|
|
return scriptoriumPromptHash, scriptoriumPromptHashErr
|
|
}
|
|
|
|
var (
|
|
scriptoriumPromptHashOnce sync.Once
|
|
scriptoriumPromptHash string
|
|
scriptoriumPromptHashErr error
|
|
)
|