prompts.go

 1package agent
 2
 3import (
 4	"context"
 5	_ "embed"
 6
 7	"charm.land/fantasy/providers/openai"
 8	"github.com/charmbracelet/crush/internal/agent/prompt"
 9	"github.com/charmbracelet/crush/internal/config"
10)
11
12//go:embed templates/coder.md.tpl
13var coderPromptTmpl []byte
14
15//go:embed templates/coder_openai.md.tpl
16var coderOpenAIPromptTmpl []byte
17
18//go:embed templates/task.md.tpl
19var taskPromptTmpl []byte
20
21//go:embed templates/initialize.md.tpl
22var initializePromptTmpl []byte
23
24func coderPrompt(provider string, opts ...prompt.Option) (*prompt.Prompt, error) {
25	tmpl := coderPromptTmpl
26	if provider == openai.Name {
27		tmpl = coderOpenAIPromptTmpl
28	}
29	systemPrompt, err := prompt.NewPrompt("coder", string(tmpl), opts...)
30	if err != nil {
31		return nil, err
32	}
33	return systemPrompt, nil
34}
35
36func taskPrompt(opts ...prompt.Option) (*prompt.Prompt, error) {
37	systemPrompt, err := prompt.NewPrompt("task", string(taskPromptTmpl), opts...)
38	if err != nil {
39		return nil, err
40	}
41	return systemPrompt, nil
42}
43
44func InitializePrompt(cfg config.Config) (string, error) {
45	systemPrompt, err := prompt.NewPrompt("initialize", string(initializePromptTmpl))
46	if err != nil {
47		return "", err
48	}
49	return systemPrompt.Build(context.Background(), "", "", cfg)
50}