2026-08-05 19:13:37 +00:00
package locationregistry
2026-08-04 00:07:47 +00:00
import (
"context"
"encoding/json"
2026-08-26 23:24:20 +00:00
"fmt"
2026-08-04 00:07:47 +00:00
"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 ) {
2026-08-26 23:24:20 +00:00
snapshot , err := contracts . CloneStructuredCompletionRequest ( request )
if err != nil {
return contracts . StructuredCompletionResponse { } , fmt . Errorf ( "clone recording request: %w" , err )
}
c . requests = append ( c . requests , snapshot )
2026-08-04 00:07:47 +00:00
if c . err != nil {
return contracts . StructuredCompletionResponse { } , c . err
}
response := c . response
if response == "" {
response = ` { "duplicate_groups":[]} `
}
2026-08-09 16:51:29 +00:00
content := [ ] byte ( response )
2026-08-08 15:05:35 +00:00
if err := json . Unmarshal ( content , output ) ; err != nil {
2026-08-04 00:07:47 +00:00
return contracts . StructuredCompletionResponse { } , err
}
2026-08-08 15:05:35 +00:00
return contracts . StructuredCompletionResponse { Content : content } , nil
}
2026-08-04 00:07:47 +00:00
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 ] {
2026-08-09 18:30:32 +00:00
return contracts . TypedNormalizeRequest [ dnd . LocationRegistry ] {
Source : & source . SourceDocument { } ,
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." } } }
}
2026-08-27 15:57:29 +00:00
func hasDiagnostic ( diagnostics [ ] contracts . ProducerDiagnostic , reason string , disposition contracts . DiagnosticDisposition ) bool {
for _ , diagnostic := range diagnostics {
if diagnostic . ReasonCode == reason && diagnostic . Disposition == disposition {
2026-08-04 00:07:47 +00:00
return true
}
}
return false
}