Skip to content

Commit 6325df9

Browse files
committed
feat: custom system instruction
1 parent 1b499db commit 6325df9

File tree

5 files changed

+37
-38
lines changed

5 files changed

+37
-38
lines changed

cmd/cli/main.go

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,4 @@ import (
66

77
func main() {
88
cli.Run()
9-
// pullRequestId := os.Getenv("BITBUCKET_PR_ID")
10-
// if pullRequestId == "" {
11-
// panic("Failed Get PULL REQUEST ID")
12-
// }
13-
// cli.RunE(pullRequestId)
149
}

internal/app/cli/app.go

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,6 @@
11
package cli
22

33
import (
4-
infraBitbucket "codebleu/internal/infrastructure/http/bitbucket"
5-
infraGemini "codebleu/internal/infrastructure/thirdparty/gemini"
6-
codeAssistantUseCase "codebleu/internal/usecase/codeassistant"
7-
gitRepoUseCase "codebleu/internal/usecase/gitrepo"
8-
llmUseCase "codebleu/internal/usecase/llm"
9-
"context"
104
"log"
115
"os"
126
)
@@ -16,23 +10,3 @@ func Run() {
1610
log.Fatalln(err)
1711
}
1812
}
19-
20-
func RunE(pullRequestId string) {
21-
cfg := NewConfigFromEnv()
22-
bitbucketClient := infraBitbucket.NewClient(
23-
cfg.BitbucketRepositoryAccessConfig.Workspace,
24-
cfg.BitbucketRepositoryAccessConfig.RepoSlug,
25-
cfg.BitbucketRepositoryAccessConfig.AccessToken,
26-
)
27-
geminiClient := infraGemini.NewClient("gemini-1.5-flash", cfg.GeminiConfig.ApiKey)
28-
getPullRequest := gitRepoUseCase.GetPullRequest(bitbucketClient)
29-
postPullRequestComment := gitRepoUseCase.PostPullRequestComment(bitbucketClient)
30-
sendPromptUseCase := llmUseCase.SendPromptUseCase(geminiClient)
31-
reviewPullRequest := codeAssistantUseCase.ReviewPullRequest(sendPromptUseCase)
32-
reviewAndCommentPullRequest := codeAssistantUseCase.ReviewAndCommentPullRequest(getPullRequest, reviewPullRequest, postPullRequestComment)
33-
34-
_, err := reviewAndCommentPullRequest.Invoke(context.Background(), pullRequestId)
35-
if err != nil {
36-
panic(err)
37-
}
38-
}

internal/app/cli/cli.go

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
package cli
22

33
import (
4+
"codebleu/internal/domain/codeassistant"
45
"codebleu/internal/infrastructure/factories/gitrepo"
56
"codebleu/internal/infrastructure/factories/llm"
67
"context"
78
"errors"
9+
"fmt"
10+
"io/ioutil"
811

912
codeAssistantUseCase "codebleu/internal/usecase/codeassistant"
1013
gitRepoUseCase "codebleu/internal/usecase/gitrepo"
@@ -22,9 +25,10 @@ func NewCliApp() *cli.App {
2225
cliApp.Flags = []cli.Flag{
2326
&cli.StringFlag{
2427
Name: "model",
25-
Usage: `uses model to review pull request (options: "gemini-1.5-flash", "gemini-1.5-pro", "gemini-1.0-pro")`,
28+
Usage: `uses model to review pull request (options: "gemini-1.5-flash" (default), "gemini-1.5-pro", "gemini-1.0-pro")`,
2629
Aliases: []string{"m"},
2730
EnvVars: []string{"MODEL"},
31+
Value: "gemini-1.5-flash",
2832
Required: true,
2933
},
3034
&cli.StringFlag{
@@ -40,6 +44,11 @@ func NewCliApp() *cli.App {
4044
EnvVars: []string{"PULL_REQUEST_ID"},
4145
Required: true,
4246
},
47+
&cli.StringFlag{
48+
Name: "system-instruction",
49+
Usage: "Custom system instruction for review pull request diff chages",
50+
EnvVars: []string{"SYSTEM_INSTRUCTION"},
51+
},
4352
}
4453
cliApp.Action = action
4554

@@ -63,12 +72,27 @@ func action(ctx *cli.Context) error {
6372
if err != nil {
6473
return err
6574
}
75+
systemInstructionPath := ctx.String("system-instruction")
76+
systemInstruction := ""
77+
if systemInstructionPath != "" {
78+
content, err := ioutil.ReadFile(systemInstructionPath)
79+
if err != nil {
80+
return errors.Join(err, fmt.Errorf("failed read file %s", systemInstructionPath))
81+
}
82+
systemInstruction = string(content)
83+
}
6684
getPullRequest := gitRepoUseCase.GetPullRequest(remoteRepo)
6785
postPullRequestComment := gitRepoUseCase.PostPullRequestComment(remoteRepo)
6886
sendPromptUseCase := llmUseCase.SendPromptUseCase(llmRepo)
6987
reviewPullRequest := codeAssistantUseCase.ReviewPullRequest(sendPromptUseCase)
7088
reviewAndCommentPullRequest := codeAssistantUseCase.ReviewAndCommentPullRequest(getPullRequest, reviewPullRequest, postPullRequestComment)
71-
if _, err := reviewAndCommentPullRequest.Invoke(context.Background(), ctx.String("id")); err != nil {
89+
if _, err := reviewAndCommentPullRequest.Invoke(
90+
context.Background(),
91+
codeassistant.ReviewAndCommentPullRequestInput{
92+
PullRequestId: ctx.String("id"),
93+
SystemInstruction: systemInstruction,
94+
},
95+
); err != nil {
7296
return err
7397
}
7498
return nil

internal/domain/codeassistant/entity.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,11 @@ type PullRequestReviewInput struct {
99
SystemInstruction string
1010
}
1111

12+
type ReviewAndCommentPullRequestInput struct {
13+
PullRequestId string
14+
SystemInstruction string
15+
}
16+
1217
type ReviewResult struct {
1318
Path string `json:"path"`
1419
Comment string `json:"comment_in_markdown"`

internal/usecase/codeassistant/review_and_comment_pull_request.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,21 @@ type reviewAndCommentPullRequest struct {
1515
}
1616

1717
// Invoke implements usecase.UseCase.
18-
func (r *reviewAndCommentPullRequest) Invoke(ctx context.Context, input string) (interface{}, error) {
19-
pullRequest, err := r.getPullRequest.Invoke(ctx, input)
18+
func (r *reviewAndCommentPullRequest) Invoke(ctx context.Context, input domain.ReviewAndCommentPullRequestInput) (interface{}, error) {
19+
pullRequest, err := r.getPullRequest.Invoke(ctx, input.PullRequestId)
2020
if err != nil {
2121
return nil, err
2222
}
2323
reviewResults, err := r.reviewPullRequest.Invoke(ctx, domain.PullRequestReviewInput{
24-
PullRequest: pullRequest,
24+
PullRequest: pullRequest,
25+
SystemInstruction: input.SystemInstruction,
2526
})
2627
if err != nil {
2728
return nil, err
2829
}
2930
for _, reviewResult := range reviewResults {
3031
_, postCommentErr := r.postPullRequestComment.Invoke(ctx, gitRepoDomain.PostPullRequestCommentInput{
31-
PullRequestId: input,
32+
PullRequestId: input.PullRequestId,
3233
CommitHash: pullRequest.CommitHash,
3334
Path: reviewResult.Path,
3435
Comment: reviewResult.Comment,
@@ -50,7 +51,7 @@ func ReviewAndCommentPullRequest(
5051
getPullRequest usecase.UseCase[string, *gitRepoDomain.PullRequest],
5152
reviewPullRequest usecase.UseCase[domain.PullRequestReviewInput, []domain.ReviewResult],
5253
postPullRequestComment usecase.UseCase[gitRepoDomain.PostPullRequestCommentInput, interface{}],
53-
) usecase.UseCase[string, interface{}] {
54+
) usecase.UseCase[domain.ReviewAndCommentPullRequestInput, interface{}] {
5455
return &reviewAndCommentPullRequest{
5556
reviewPullRequest: reviewPullRequest,
5657
postPullRequestComment: postPullRequestComment,

0 commit comments

Comments
 (0)