61 lines
1.5 KiB
Go
61 lines
1.5 KiB
Go
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)
|
|
} |