47 lines
1.7 KiB
Go
47 lines
1.7 KiB
Go
package promptkit_test
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"strings"
|
|
"testing"
|
|
|
|
"go.maximumdirect.net/promptkit"
|
|
)
|
|
|
|
func TestRunRequestFormattingAndJSONProtectDirectCredential(t *testing.T) {
|
|
markers := []string{"secret-key-marker", "variable-marker", "artifact-body-marker", "message-body-marker", "setting-marker", "schema-path-marker"}
|
|
request := promptkit.RunRequest{
|
|
PromptID: "prompt", ProfileID: "profile", APIKey: markers[0],
|
|
Vars: map[string]string{"name": markers[1]},
|
|
Inputs: map[string]promptkit.ArtifactRef{"input": {Type: promptkit.ArtifactRefInline, Body: markers[2]}},
|
|
AppendedMessages: []promptkit.RenderedMessage{{Role: promptkit.RoleUser, Content: markers[3]}},
|
|
Execution: &promptkit.ExecutionTargetOverride{Model: markers[4]},
|
|
Validation: &promptkit.OutputContract{SchemaPath: markers[5]},
|
|
}
|
|
for _, rendered := range []string{
|
|
fmt.Sprintf("%v", request), fmt.Sprintf("%+v", request), fmt.Sprintf("%#v", request),
|
|
fmt.Sprintf("%v", &request), fmt.Sprintf("%+v", &request), fmt.Sprintf("%#v", &request),
|
|
request.String(), request.GoString(), (&request).String(), (&request).GoString(),
|
|
} {
|
|
for _, marker := range markers {
|
|
if strings.Contains(rendered, marker) {
|
|
t.Fatalf("request formatting exposes %q: %s", marker, rendered)
|
|
}
|
|
}
|
|
}
|
|
for _, value := range []any{request, &request} {
|
|
encoded, err := json.Marshal(value)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
var object map[string]any
|
|
if err := json.Unmarshal(encoded, &object); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if _, found := object["APIKey"]; found || strings.Contains(string(encoded), markers[0]) {
|
|
t.Fatal("request JSON exposed the direct credential")
|
|
}
|
|
}
|
|
}
|