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 }