2026-08-05 19:13:37 +00:00
package locationregistry
2026-08-04 00:07:47 +00:00
import (
"context"
"encoding/json"
"testing"
"gitea.maximumdirect.net/eric/notarius/internal/core/source"
"gitea.maximumdirect.net/eric/notarius/internal/framework/contracts"
"gitea.maximumdirect.net/eric/notarius/internal/modules/dnd"
)
type recordingLocationNormalizerClient struct {
response string
err error
requests [ ] contracts . StructuredCompletionRequest
}
func ( c * recordingLocationNormalizerClient ) CompleteStructured ( _ context . Context , request contracts . StructuredCompletionRequest , output any ) ( contracts . StructuredCompletionResponse , error ) {
c . requests = append ( c . requests , request )
if c . err != nil {
return contracts . StructuredCompletionResponse { } , c . err
}
response := c . response
if response == "" {
response = ` { "duplicate_groups":[]} `
}
if err := json . Unmarshal ( [ ] byte ( response ) , output ) ; err != nil {
return contracts . StructuredCompletionResponse { } , err
}
return contracts . StructuredCompletionResponse { Content : json . RawMessage ( response ) } , nil
}
func newNormalizer ( t * testing . T , client contracts . StructuredLLMClient ) * Normalizer {
t . Helper ( )
normalizer , err := New ( client , Options { } )
if err != nil {
t . Fatalf ( "New() error = %v" , err )
}
return normalizer
}
2026-08-05 19:05:42 +00:00
func normalizeRequest ( value dnd . LocationRegistry ) contracts . TypedNormalizeRequest [ dnd . LocationRegistry ] {
return contracts . TypedNormalizeRequest [ dnd . LocationRegistry ] { MergeOutput : contracts . MergeArtifact [ dnd . LocationRegistry ] { Value : value } }
2026-08-04 00:07:47 +00:00
}
2026-08-05 19:05:42 +00:00
func normalizeRequestWithSource ( value dnd . LocationRegistry , doc * source . SourceDocument ) contracts . TypedNormalizeRequest [ dnd . LocationRegistry ] {
2026-08-04 00:07:47 +00:00
request := normalizeRequest ( value )
request . Source = doc
return request
}
func semanticDocument ( ) * source . SourceDocument {
return & source . SourceDocument { ID : "location-session" , Units : [ ] source . SourceUnit { { ID : 10 , Kind : "speech" , Text : "The old mill is the Greencloak's refuge." } , { ID : 20 , Kind : "speech" , Text : "The mill stands on the northern road." } , { ID : 30 , Kind : "speech" , Text : "The tavern is beside the mill." } , { ID : 40 , Kind : "speech" , Text : "The mill's cellar is flooded." } } }
}
func hasWarning ( warnings [ ] contracts . Warning , reason string ) bool {
for _ , warning := range warnings {
if warning . ReasonCode == reason {
return true
}
}
return false
}