mirror of
https://github.com/Pull-Pal/pull-pal.git
synced 2024-11-08 03:08:35 -05:00
d92efcb7e9
improve prompt templates to get response in yaml format and make parsing easier also add debug file functionality so that exact input, prompts, and output can be easily seen for every request
64 lines
1.4 KiB
Go
64 lines
1.4 KiB
Go
package llm
|
|
|
|
import (
|
|
"bytes"
|
|
"text/template"
|
|
|
|
"gopkg.in/yaml.v3"
|
|
)
|
|
|
|
func (req DiffCommentRequest) String() string {
|
|
return req.MustGetPrompt()
|
|
}
|
|
|
|
// MustGetPrompt only returns the prompt, but panics if the data in the request cannot populate the template.
|
|
func (req DiffCommentRequest) MustGetPrompt() string {
|
|
prompt, err := req.GetPrompt()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
return prompt
|
|
}
|
|
|
|
// GetPrompt converts the information in the request to a prompt for an LLM.
|
|
func (req DiffCommentRequest) GetPrompt() (string, error) {
|
|
tmpl, err := template.ParseFiles("./llm/prompts/comment-diff-request.tmpl")
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
var result bytes.Buffer
|
|
err = tmpl.Execute(&result, req)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
return result.String(), nil
|
|
}
|
|
|
|
// String is a string representation of DiffCommentResponse.
|
|
func (res DiffCommentResponse) String() string {
|
|
out := ""
|
|
if res.Type == ResponseAnswer {
|
|
out += "Type: Answer\n"
|
|
out += res.Response
|
|
return out
|
|
}
|
|
|
|
out += "Type: Code Change\n"
|
|
|
|
out += "Response:\n"
|
|
out += res.Response + "\n\n"
|
|
out += "Files:\n"
|
|
out += res.File.Path + ":\n```\n"
|
|
out += res.File.Contents + "\n```\n"
|
|
|
|
return out
|
|
}
|
|
|
|
func ParseDiffCommentResponse(llmResponse string) (DiffCommentResponse, error) {
|
|
var response DiffCommentResponse
|
|
err := yaml.Unmarshal([]byte(llmResponse), &response)
|
|
return response, err
|
|
}
|