feat: include file content in llm prompt context (#13)
This commit is contained in:
@ -4,6 +4,7 @@ import (
|
||||
"context"
|
||||
"fmt"
|
||||
"log/slog"
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
"strings"
|
||||
"time"
|
||||
@ -220,6 +221,13 @@ func (m *IssueManager) extractResources(ctx context.Context, forge port.Forge, p
|
||||
|
||||
resources = append(resources, issues...)
|
||||
|
||||
files, err := m.extractFiles(ctx, forge, projectID, issueSummary)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "could not extract files")
|
||||
}
|
||||
|
||||
resources = append(resources, files...)
|
||||
|
||||
return resources, nil
|
||||
}
|
||||
|
||||
@ -256,6 +264,36 @@ func (m *IssueManager) extractIssues(ctx context.Context, forge port.Forge, proj
|
||||
return resources, nil
|
||||
}
|
||||
|
||||
var fileRefRegExp = regexp.MustCompile(`(?i)(?:\/[^\/]+)+\/?[^\s]+(?:\.[^\s]+)+|[^\s]+(?:\.[^\s]+)+`)
|
||||
|
||||
func (m *IssueManager) extractFiles(ctx context.Context, forge port.Forge, projectID string, issueSummary string) ([]*model.Resource, error) {
|
||||
fileRefMatches := fileRefRegExp.FindAllStringSubmatch(issueSummary, -1)
|
||||
|
||||
paths := make([]string, 0, len(fileRefMatches))
|
||||
for _, m := range fileRefMatches {
|
||||
paths = append(paths, m[0])
|
||||
}
|
||||
|
||||
resources := make([]*model.Resource, 0)
|
||||
|
||||
for _, p := range paths {
|
||||
data, err := forge.GetFile(ctx, projectID, p)
|
||||
if err != nil {
|
||||
slog.ErrorContext(ctx, "could not retrieve file", slog.Any("error", errors.WithStack(err)), slog.String("path", p))
|
||||
continue
|
||||
}
|
||||
|
||||
resources = append(resources, &model.Resource{
|
||||
Name: p,
|
||||
Type: "File",
|
||||
Syntax: strings.TrimPrefix(filepath.Ext(p), "."),
|
||||
Content: string(data),
|
||||
})
|
||||
}
|
||||
|
||||
return resources, nil
|
||||
}
|
||||
|
||||
func NewIssueManager(llmClient llm.Client, forgeFactories ...ForgeFactory) *IssueManager {
|
||||
return &IssueManager{
|
||||
llmClient: llmClient,
|
||||
|
Reference in New Issue
Block a user