Skip to content

Commit 4c8c615

Browse files
authored
Merge pull request #71 from cocoide/feat/add-qdrant-server
2 parents 57e4a35 + 5a8a15b commit 4c8c615

File tree

7 files changed

+134
-6
lines changed

7 files changed

+134
-6
lines changed

cmd/config.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,13 @@ var (
1818
{},
1919
{int(entity.EN), int(entity.JP)},
2020
{int(entity.NormalFormat), int(entity.EmojiFormat), int(entity.PrefixFormat)},
21-
{int(entity.Server), int(entity.Client)},
21+
{int(entity.Server), int(entity.Client), int(entity.Qdrant), int(entity.Gemini)},
2222
}
2323
configOptionLabel = [][]string{
2424
{},
2525
{"English", "Japanese"},
2626
{"Normal Format", "Emoji Format", "PrefixFormat"},
27-
{"Wrap Server", "OpenAI API"},
27+
{"Wrap Server", "OpenAI API", "Qdrant Database", "Gemini API"},
2828
}
2929
)
3030

cmd/suggest.go

+8-3
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@ package cmd
22

33
import (
44
"fmt"
5+
"log"
6+
"os"
7+
"strings"
8+
59
"github.com/cocoide/commitify/internal/entity"
610
"github.com/cocoide/commitify/internal/gateway"
711
"github.com/cocoide/commitify/internal/service"
812
"github.com/cocoide/commitify/internal/usecase"
913
"golang.org/x/net/context"
10-
"log"
11-
"os"
12-
"strings"
1314

1415
"github.com/charmbracelet/bubbles/spinner"
1516
"github.com/charmbracelet/bubbles/textinput"
@@ -135,6 +136,10 @@ func NewSuggestModel() *suggestModel {
135136
commitMessageService = gateway.NewClientCommitMessageGateway(nlp)
136137
case entity.Server:
137138
commitMessageService = gateway.NewGrpcServerGateway()
139+
case entity.Qdrant:
140+
commitMessageService = gateway.NewQdrantServerGateway()
141+
case entity.Gemini:
142+
commitMessageService = gateway.NewGeminiServerGateway()
138143
}
139144
suggestCmdUsecase := usecase.NewSuggestCmdUsecase(commitMessageService, github)
140145

go.mod

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ require (
1212
github.com/sashabaranov/go-openai v1.15.2
1313
github.com/spf13/cobra v1.7.0
1414
github.com/spf13/viper v1.16.0
15+
go.uber.org/mock v0.3.0
1516
golang.org/x/net v0.15.0
1617
google.golang.org/grpc v1.58.0
1718
google.golang.org/protobuf v1.31.0

go.sum

+2
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,8 @@ go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
229229
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
230230
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
231231
go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
232+
go.uber.org/mock v0.3.0 h1:3mUxI1No2/60yUYax92Pt8eNOEecx2D3lcXZh2NEZJo=
233+
go.uber.org/mock v0.3.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc=
232234
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
233235
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
234236
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=

internal/entity/config.go

+8-1
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@ package entity
33
import (
44
"encoding/json"
55
"fmt"
6+
"os"
7+
68
pb "github.com/cocoide/commitify/proto/gen"
79
"github.com/spf13/viper"
8-
"os"
910
)
1011

1112
// コミットメッセージの言語の列挙型
@@ -31,6 +32,8 @@ type GptRequestLocation int
3132
const (
3233
Server GptRequestLocation = iota
3334
Client
35+
Qdrant
36+
Gemini
3437
)
3538

3639
type Config struct {
@@ -145,6 +148,10 @@ func (c *Config) GptRequestLocation() GptRequestLocation {
145148
return Server
146149
case 1:
147150
return Client
151+
case 2:
152+
return Qdrant
153+
case 3:
154+
return Gemini
148155
default:
149156
return Server
150157
}

internal/gateway/gemini.go

+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package gateway
2+
3+
import (
4+
"encoding/json"
5+
6+
"github.com/cocoide/commitify/internal/entity"
7+
"github.com/cocoide/commitify/internal/service"
8+
"github.com/pkg/errors"
9+
)
10+
11+
type geminiServerGateway struct {
12+
client *HttpClient
13+
}
14+
15+
func NewGeminiServerGateway() service.CommitMessageService {
16+
c := NewHttpClient().
17+
WithBaseURL("http://suwageeks.org:5215").
18+
WithPath("/gemini").
19+
WithHeader("Content-Type", "application/json")
20+
21+
return &geminiServerGateway{client: c}
22+
}
23+
24+
func (qs *geminiServerGateway) GenerateCommitMessageList(diff string, conf entity.Config) ([]string, error) {
25+
if diff == "" {
26+
return nil, errors.New("ステージされた変更がありません。")
27+
}
28+
29+
type geminiBody struct {
30+
Diff string `json:"diff"`
31+
}
32+
33+
body := &geminiBody{
34+
Diff: diff,
35+
}
36+
b, err := json.Marshal(body)
37+
if err != nil {
38+
return nil, err
39+
}
40+
41+
res, err := qs.client.WithBody(b).Execute(POST)
42+
if err != nil {
43+
return nil, err
44+
}
45+
46+
type geminiResponse struct {
47+
Messages []string `json:"messages"`
48+
}
49+
50+
values := new(geminiResponse)
51+
if err = json.Unmarshal(res, values); err != nil {
52+
return nil, err
53+
}
54+
55+
return values.Messages, nil
56+
}

internal/gateway/qdrant.go

+57
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package gateway
2+
3+
import (
4+
"encoding/json"
5+
"errors"
6+
7+
"github.com/cocoide/commitify/internal/entity"
8+
"github.com/cocoide/commitify/internal/service"
9+
)
10+
11+
type qdrantServerGateway struct {
12+
client *HttpClient
13+
}
14+
15+
func NewQdrantServerGateway() service.CommitMessageService {
16+
c := NewHttpClient()
17+
18+
return &qdrantServerGateway{client: c}
19+
}
20+
21+
func (qs *qdrantServerGateway) GenerateCommitMessageList(diff string, conf entity.Config) ([]string, error) {
22+
if diff == "" {
23+
return nil, errors.New("ステージされた変更がありません。")
24+
}
25+
26+
type qdrantBody struct {
27+
Diff string `json:"diff"`
28+
}
29+
30+
body := &qdrantBody{
31+
Diff: diff,
32+
}
33+
b, err := json.Marshal(body)
34+
if err != nil {
35+
return nil, err
36+
}
37+
38+
res, err := qs.client.
39+
WithBaseURL("http://suwageeks.org:5215").
40+
WithPath("/search").
41+
WithHeader("Content-Type", "application/json").
42+
WithBody(b).Execute(POST)
43+
if err != nil {
44+
return nil, err
45+
}
46+
47+
type qdrantResponse struct {
48+
Messages []string `json:"messages"`
49+
}
50+
51+
values := new(qdrantResponse)
52+
if err = json.Unmarshal(res, values); err != nil {
53+
return nil, err
54+
}
55+
56+
return values.Messages, nil
57+
}

0 commit comments

Comments
 (0)