package promptkit_test import ( "context" "errors" "sync/atomic" "testing" "gitea.maximumdirect.net/eric/promptkit" ) func TestAppendedMessageRoleConstantsAreStrings(t *testing.T) { var ( developer string = promptkit.RoleDeveloper system string = promptkit.RoleSystem user string = promptkit.RoleUser assistant string = promptkit.RoleAssistant ) if developer != "developer" || system != "system" || user != "user" || assistant != "assistant" { t.Fatalf("unexpected role constants: %q %q %q %q", developer, system, user, assistant) } } func TestInvalidAppendedMessagesFailBeforeSourceOrModelWork(t *testing.T) { promptSource := &inspectionCountingFS{} var modelCalls atomic.Int64 engine, err := promptkit.NewEngine( promptkit.Config{}, promptkit.WithPromptFS(promptSource, "."), promptkit.WithLLMClient(countingLLMClient{calls: &modelCalls}), ) if err != nil { t.Fatalf("construct engine: %v", err) } request := promptkit.RunRequest{ PromptID: "unreached", AppendedMessages: []promptkit.RenderedMessage{{ Role: "unsupported-role", Content: "sensitive appended content", }}, } operations := []struct { name string run func() error }{ {name: "Prepare", run: func() error { _, err := engine.Prepare(context.Background(), request); return err }}, {name: "PrepareExecution", run: func() error { _, err := engine.PrepareExecution(context.Background(), request); return err }}, {name: "Run", run: func() error { _, err := engine.Run(context.Background(), request); return err }}, } for _, operation := range operations { t.Run(operation.name, func(t *testing.T) { err := operation.run() if !errors.Is(err, promptkit.ErrInvalidRequest) { t.Fatalf("error = %v, want ErrInvalidRequest", err) } }) } if promptSource.opens.Load() != 0 { t.Fatalf("invalid appended message opened prompt sources %d times", promptSource.opens.Load()) } if modelCalls.Load() != 0 { t.Fatalf("invalid appended message invoked the model %d times", modelCalls.Load()) } }