Add D&D enemy event extractor

This commit is contained in:
2026-08-03 20:44:44 +00:00
parent c164a3fc69
commit 9dd57dbfa4
15 changed files with 977 additions and 5 deletions

View File

@@ -130,12 +130,9 @@ func (r *groundingResolver) Resolve(references contracts.ReferenceSet) (groundin
if !npcs.Bound() {
return grounding{}, fmt.Errorf("NPC registry reference is required")
}
scenes, err := r.scenes.Resolve(references)
scenes, err := r.resolveScenes(references)
if err != nil {
return grounding{}, fmt.Errorf("resolve scene eligibility: %w", err)
}
if !scenes.Bound() {
return grounding{}, fmt.Errorf("scene descriptions reference is required")
return grounding{}, err
}
combatTurns, err := resolveInput(references, CombatTurnReferenceSlot, r.combatTurns, prepareCombatTurnInput)
if err != nil {
@@ -153,6 +150,28 @@ func (r *groundingResolver) Resolve(references contracts.ReferenceSet) (groundin
}, nil
}
func (r *groundingResolver) SceneMatch(references contracts.ReferenceSet, chunk *source.Chunk) (sceneregistry.ChunkMatch, error) {
if r == nil {
return sceneregistry.ChunkMatch{}, fmt.Errorf("grounding resolver must not be nil")
}
scenes, err := r.resolveScenes(references)
if err != nil {
return sceneregistry.ChunkMatch{}, err
}
return scenes.Match(chunk), nil
}
func (r *groundingResolver) resolveScenes(references contracts.ReferenceSet) (*sceneregistry.Registry, error) {
scenes, err := r.scenes.Resolve(references)
if err != nil {
return nil, fmt.Errorf("resolve scene eligibility: %w", err)
}
if !scenes.Bound() {
return nil, fmt.Errorf("scene descriptions reference is required")
}
return scenes, nil
}
func resolveInput(references contracts.ReferenceSet, slot string, seeded *contracts.LLMInputMaterial, prepare func(contracts.ReferenceSet) (*contracts.LLMInputMaterial, error)) (contracts.LLMInputMaterial, error) {
if _, ok := references.Slots[slot]; ok {
value, err := prepare(references)