Add prompt input materials and session IDs
This commit is contained in:
@@ -476,6 +476,84 @@ func TestRunExecutesChunksAndPassesChunkAndLLMClient(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestRunPassesSourceInputAndSessionIDToPromptCapableStages(t *testing.T) {
|
||||
modules := defaultRunnerModules()
|
||||
rawInput := []byte("{\"source\":\"exact bytes\"}")
|
||||
|
||||
output, err := New(newRunnerRegistries(t, modules)).Run(context.Background(), RunInput{
|
||||
Pipeline: resolvedPipeline(),
|
||||
Path: "session.json",
|
||||
RawInput: rawInput,
|
||||
SessionID: " explicit-session ",
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("Run() error = %v, want nil", err)
|
||||
}
|
||||
|
||||
if got := output.Manifest.Metadata["session_id"]; got != "explicit-session" {
|
||||
t.Fatalf("manifest metadata = %#v, want session_id", output.Manifest.Metadata)
|
||||
}
|
||||
|
||||
requests := []struct {
|
||||
name string
|
||||
material contracts.LLMInputMaterial
|
||||
sessionID string
|
||||
}{
|
||||
{name: "chunk", material: modules.chunker.requests[0].SourceInput, sessionID: modules.chunker.requests[0].SessionID},
|
||||
{name: "extract first", material: modules.extractors["extract-alpha"].requests[0].SourceInput, sessionID: modules.extractors["extract-alpha"].requests[0].SessionID},
|
||||
{name: "extract second", material: modules.extractors["extract-alpha"].requests[1].SourceInput, sessionID: modules.extractors["extract-alpha"].requests[1].SessionID},
|
||||
{name: "normalize", material: modules.normalizers["normalize"].requests[0].SourceInput, sessionID: modules.normalizers["normalize"].requests[0].SessionID},
|
||||
}
|
||||
for _, req := range requests {
|
||||
if req.sessionID != "explicit-session" {
|
||||
t.Fatalf("%s session ID = %q, want explicit-session", req.name, req.sessionID)
|
||||
}
|
||||
if got := string(req.material.Content); got != string(rawInput) {
|
||||
t.Fatalf("%s source input content = %q, want exact raw input", req.name, got)
|
||||
}
|
||||
if req.material.Name != "source" || req.material.MediaType != "application/json" || req.material.SizeBytes != int64(len(rawInput)) {
|
||||
t.Fatalf("%s source input = %#v, want source metadata", req.name, req.material)
|
||||
}
|
||||
if req.material.Digest != sourceInputDigest(rawInput) {
|
||||
t.Fatalf("%s digest = %q, want %q", req.name, req.material.Digest, sourceInputDigest(rawInput))
|
||||
}
|
||||
if !strings.HasPrefix(req.material.OriginURI, "file://") || !strings.HasSuffix(req.material.OriginURI, "/session.json") {
|
||||
t.Fatalf("%s origin URI = %q, want file URI ending in session.json", req.name, req.material.OriginURI)
|
||||
}
|
||||
}
|
||||
|
||||
modules.chunker.requests[0].SourceInput.Content[0] = 'X'
|
||||
if got := string(modules.extractors["extract-alpha"].requests[0].SourceInput.Content); got != string(rawInput) {
|
||||
t.Fatalf("source input content aliased across requests: %q", got)
|
||||
}
|
||||
if got := string(rawInput); got != "{\"source\":\"exact bytes\"}" {
|
||||
t.Fatalf("raw input mutated through request material: %q", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRunDefaultsSessionIDFromParsedSourceDocumentID(t *testing.T) {
|
||||
modules := defaultRunnerModules()
|
||||
|
||||
output, err := New(newRunnerRegistries(t, modules)).Run(context.Background(), RunInput{
|
||||
Pipeline: resolvedPipeline(),
|
||||
Path: "notes.unknown",
|
||||
RawInput: []byte("notes"),
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("Run() error = %v, want nil", err)
|
||||
}
|
||||
|
||||
if got := modules.chunker.requests[0].SessionID; got != "source-1" {
|
||||
t.Fatalf("chunk session ID = %q, want parsed source document ID", got)
|
||||
}
|
||||
if got := output.Manifest.Metadata["session_id"]; got != "source-1" {
|
||||
t.Fatalf("manifest metadata = %#v, want default session id", output.Manifest.Metadata)
|
||||
}
|
||||
if got := modules.chunker.requests[0].SourceInput.MediaType; got != unknownMediaType {
|
||||
t.Fatalf("source input media type = %q, want fallback %q", got, unknownMediaType)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRunPassesInputRequestFields(t *testing.T) {
|
||||
modules := defaultRunnerModules()
|
||||
metadata := map[string]any{"request": "test"}
|
||||
|
||||
Reference in New Issue
Block a user