36 lines
1.2 KiB
Go
36 lines
1.2 KiB
Go
package prompt
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
// RenderUserSystem renders the system and user prompt pair for promptID.
|
|
func RenderUserSystem(promptID string, data any) (system string, user string, metadata Metadata, err error) {
|
|
trimmedID := strings.TrimSpace(promptID)
|
|
compiled, ok := promptRegistry[trimmedID]
|
|
if !ok {
|
|
return "", "", Metadata{}, fmt.Errorf("unknown prompt id %q", promptID)
|
|
}
|
|
return compiled.RenderUserSystem(data)
|
|
}
|
|
|
|
// RenderUserSystem renders the bundle's system and user prompts.
|
|
func (b *Bundle) RenderUserSystem(data any) (system string, user string, metadata Metadata, err error) {
|
|
if b == nil {
|
|
return "", "", Metadata{}, fmt.Errorf("prompt bundle must not be nil")
|
|
}
|
|
var systemBuf bytes.Buffer
|
|
if err := b.systemTmpl.Execute(&systemBuf, data); err != nil {
|
|
return "", "", Metadata{}, fmt.Errorf("render system prompt %q: %w", b.metadata.PromptID, err)
|
|
}
|
|
|
|
var userBuf bytes.Buffer
|
|
if err := b.userTmpl.Execute(&userBuf, data); err != nil {
|
|
return "", "", Metadata{}, fmt.Errorf("render user prompt %q: %w", b.metadata.PromptID, err)
|
|
}
|
|
|
|
return strings.TrimSpace(systemBuf.String()), strings.TrimSpace(userBuf.String()), b.metadata, nil
|
|
}
|