haixunMaster/haixun-backend/internal/library/prompt/compose.go

61 lines
1.5 KiB
Go
Raw Normal View History

2026-06-23 16:55:10 +00:00
package prompt
import "strings"
const overlaySeparator = "\n\n---\n\n"
// ComposeSystem prepends global overlay to the base system prompt before provider send.
func ComposeSystem(base string) (string, error) {
base = strings.TrimSpace(base)
overlayText, err := Overlay()
if err != nil {
return "", err
}
overlayText = strings.TrimSpace(overlayText)
if overlayText == "" {
return base, nil
}
if base == "" {
return overlayText, nil
}
return overlayText + overlaySeparator + base, nil
}
// Style8DSystem loads 8D slots from config files and composes the outgoing system prompt.
func Style8DSystem() (string, error) {
system, err := Slot(KeyStyle8DSystem)
if err != nil {
return "", err
}
schema, err := Slot(KeyStyle8DSchema)
if err != nil {
return "", err
}
return ComposeSystem(system + schema)
}
// IslanderSystem composes the islander guide system prompt with optional live page context.
func IslanderSystem(pageContext string) (string, error) {
base, err := Slot(KeyIslanderSystem)
if err != nil {
return "", err
}
pageContext = strings.TrimSpace(pageContext)
if pageContext != "" {
base = base + "\n\n---\n\n" + pageContext
}
return ComposeSystem(base)
}
// AIChatSystem composes the outgoing system prompt for console AI chat.
func AIChatSystem(clientSystem string) (string, error) {
base := strings.TrimSpace(clientSystem)
if base == "" {
var err error
base, err = Slot(KeyAIChatSystem)
if err != nil {
return "", err
}
}
return ComposeSystem(base)
}