Files
ai-workflow/inbox/internal/app/runtimeconfig/instructions.go
T

42 lines
1.1 KiB
Go

package runtimeconfig
import (
"fmt"
"strings"
"inbox/internal/domain/role"
)
// RenderInstructions flattens the resolved system prompt and bound skills into
// the markdown instructions that should be given to the runtime.
func RenderInstructions(resolved ResolvedRole, fallbackSystemPrompt string) string {
var builder strings.Builder
systemPrompt := strings.TrimSpace(fallbackSystemPrompt)
if prompt, ok := resolved.Prompts[role.PromptSystem]; ok && strings.TrimSpace(prompt.ContentMarkdown) != "" {
systemPrompt = strings.TrimSpace(prompt.ContentMarkdown)
}
if systemPrompt != "" {
builder.WriteString(systemPrompt)
}
if len(resolved.Skills) > 0 {
if builder.Len() > 0 {
builder.WriteString("\n\n")
}
builder.WriteString("## Skills\n")
for _, item := range resolved.Skills {
name := strings.TrimSpace(item.Skill.Name)
if name == "" {
name = strings.TrimSpace(item.Skill.SkillKey)
}
if name == "" {
name = strings.TrimSpace(item.Skill.ID)
}
builder.WriteString(fmt.Sprintf("### %s\n%s\n", name, strings.TrimSpace(item.Skill.ContentMarkdown)))
}
}
return strings.TrimSpace(builder.String())
}