@@ -4,23 +4,39 @@ import (
4
4
"context"
5
5
_ "embed"
6
6
"fmt"
7
+ "os"
7
8
"time"
8
9
9
10
"github.com/philippgille/chromem-go"
10
11
"github.com/sashabaranov/go-openai"
11
12
)
12
13
14
+ type OpenAIConfig struct {
15
+ EmbedModel string
16
+ Endpoint string
17
+ LLMModel string
18
+ Token string
19
+ }
20
+
13
21
type RAG struct {
14
22
db * chromem.DB
15
23
16
- embedModel string
17
- endpoint string
18
- llmModel string
19
- token string
24
+ config OpenAIConfig
20
25
embeddingFunc chromem.EmbeddingFunc
21
26
}
22
27
23
- func NewRAG (filename string , embedModel string , llmModel string , endpoint string , token string ) (* RAG , error ) {
28
+ func NewRAG (filename string , config * OpenAIConfig ) (* RAG , error ) {
29
+ if config == nil {
30
+ config = & OpenAIConfig {
31
+ // https://platform.openai.com/docs/guides/embeddings#embedding-models
32
+ EmbedModel : "text-embedding-3-small" ,
33
+ Endpoint : "https://api.openai.com/v1" ,
34
+ // https://platform.openai.com/docs/model
35
+ LLMModel : "gpt-4o-mini" ,
36
+ Token : os .Getenv ("OPENAI_API_KEY" ),
37
+ }
38
+ }
39
+
24
40
db := chromem .NewDB ()
25
41
26
42
if filename != ":memory:" {
@@ -35,11 +51,8 @@ func NewRAG(filename string, embedModel string, llmModel string, endpoint string
35
51
return & RAG {
36
52
db : db ,
37
53
38
- embedModel : embedModel ,
39
- endpoint : endpoint ,
40
- llmModel : llmModel ,
41
- token : token ,
42
- embeddingFunc : chromem .NewEmbeddingFuncOpenAICompat (endpoint , token , embedModel , nil ),
54
+ config : * config ,
55
+ embeddingFunc : chromem .NewEmbeddingFuncOpenAICompat (config .Endpoint , config .Token , config .EmbedModel , nil ),
43
56
}, nil
44
57
}
45
58
@@ -89,8 +102,8 @@ func (r *RAG) Ask(query string) (string, error) {
89
102
return "" , fmt .Errorf ("failed to search: %w" , err )
90
103
}
91
104
92
- config := openai .DefaultConfig (r .token )
93
- config .BaseURL = r .endpoint
105
+ config := openai .DefaultConfig (r .config . Token )
106
+ config .BaseURL = r .config . Endpoint
94
107
client := openai .NewClientWithConfig (config )
95
108
96
109
userPrompt := "Query: " + query + "\n \n Documents:\n \n "
@@ -103,7 +116,7 @@ func (r *RAG) Ask(query string) (string, error) {
103
116
response , err := client .CreateChatCompletion (
104
117
context .Background (),
105
118
openai.ChatCompletionRequest {
106
- Model : r .llmModel ,
119
+ Model : r .config . LLMModel ,
107
120
Messages : []openai.ChatCompletionMessage {
108
121
{
109
122
Role : "system" ,
0 commit comments