8
8
makeMongoDbVerifiedAnswerStore ,
9
9
makeOpenAiEmbedder ,
10
10
makeMongoDbConversationsService ,
11
- makeOpenAiChatLlm ,
12
11
AppConfig ,
13
12
CORE_ENV_VARS ,
14
13
assertEnvVars ,
@@ -19,19 +18,25 @@ import {
19
18
makeDefaultFindVerifiedAnswer ,
20
19
defaultCreateConversationCustomData ,
21
20
defaultAddMessageToConversationCustomData ,
22
- makeLegacyGenerateResponse ,
21
+ makeGenerateResponseWithSearchTool ,
23
22
makeVerifiedAnswerGenerateResponse ,
24
23
} from "mongodb-chatbot-server" ;
25
24
import cookieParser from "cookie-parser" ;
26
- import { makeStepBackRagGenerateUserPrompt } from "./processors/makeStepBackRagGenerateUserPrompt" ;
27
25
import { blockGetRequests } from "./middleware/blockGetRequests" ;
28
26
import { getRequestId , logRequest } from "./utils" ;
29
27
import { systemPrompt } from "./systemPrompt" ;
30
- import { addReferenceSourceType } from "./processors/makeMongoDbReferences" ;
28
+ import {
29
+ addReferenceSourceType ,
30
+ makeMongoDbReferences ,
31
+ } from "./processors/makeMongoDbReferences" ;
31
32
import { redactConnectionUri } from "./middleware/redactConnectionUri" ;
32
33
import path from "path" ;
33
34
import express from "express" ;
34
- import { wrapOpenAI , wrapTraced } from "mongodb-rag-core/braintrust" ;
35
+ import {
36
+ wrapOpenAI ,
37
+ wrapTraced ,
38
+ wrapAISDKModel ,
39
+ } from "mongodb-rag-core/braintrust" ;
35
40
import { AzureOpenAI } from "mongodb-rag-core/openai" ;
36
41
import { MongoClient } from "mongodb-rag-core/mongodb" ;
37
42
import { TRACING_ENV_VARS } from "./EnvVars" ;
@@ -41,6 +46,8 @@ import {
41
46
makeRateMessageUpdateTrace ,
42
47
} from "./tracing/routesUpdateTraceHandlers" ;
43
48
import { useSegmentIds } from "./middleware/useSegmentIds" ;
49
+ import { createAzure } from "mongodb-rag-core/aiSdk" ;
50
+ import { makeSearchTool } from "./tools/search" ;
44
51
export const {
45
52
MONGODB_CONNECTION_URI ,
46
53
MONGODB_DATABASE_NAME ,
@@ -79,19 +86,6 @@ export const openAiClient = wrapOpenAI(
79
86
} )
80
87
) ;
81
88
82
- export const llm = makeOpenAiChatLlm ( {
83
- openAiClient,
84
- deployment : OPENAI_CHAT_COMPLETION_DEPLOYMENT ,
85
- openAiLmmConfigOptions : {
86
- temperature : 0 ,
87
- max_tokens : 1000 ,
88
- } ,
89
- } ) ;
90
-
91
- llm . answerQuestionAwaited = wrapTraced ( llm . answerQuestionAwaited , {
92
- name : "answerQuestionAwaited" ,
93
- } ) ;
94
-
95
89
export const embeddedContentStore = makeMongoDbEmbeddedContentStore ( {
96
90
connectionUri : MONGODB_CONNECTION_URI ,
97
91
databaseName : MONGODB_DATABASE_NAME ,
@@ -173,6 +167,16 @@ export const preprocessorOpenAiClient = wrapOpenAI(
173
167
apiVersion : OPENAI_API_VERSION ,
174
168
} )
175
169
) ;
170
+ export const mongodb = new MongoClient ( MONGODB_CONNECTION_URI ) ;
171
+
172
+ export const conversations = makeMongoDbConversationsService (
173
+ mongodb . db ( MONGODB_DATABASE_NAME )
174
+ ) ;
175
+ const azureOpenAi = createAzure ( {
176
+ apiKey : OPENAI_API_KEY ,
177
+ resourceName : process . env . OPENAI_RESOURCE_NAME ,
178
+ } ) ;
179
+ const languageModel = wrapAISDKModel ( azureOpenAi ( "gpt-4.1" ) ) ;
176
180
177
181
export const generateResponse = wrapTraced (
178
182
makeVerifiedAnswerGenerateResponse ( {
@@ -184,17 +188,24 @@ export const generateResponse = wrapTraced(
184
188
} ;
185
189
} ,
186
190
onNoVerifiedAnswerFound : wrapTraced (
187
- makeLegacyGenerateResponse ( {
188
- llm,
189
- generateUserPrompt : makeStepBackRagGenerateUserPrompt ( {
190
- openAiClient : preprocessorOpenAiClient ,
191
- model : retrievalConfig . preprocessorLlm ,
192
- findContent,
193
- numPrecedingMessagesToInclude : 6 ,
194
- } ) ,
191
+ makeGenerateResponseWithSearchTool ( {
192
+ languageModel,
195
193
systemMessage : systemPrompt ,
196
- llmNotWorkingMessage : "LLM not working. Sad!" ,
197
- noRelevantContentMessage : "No relevant content found. Sad!" ,
194
+ makeReferenceLinks : makeMongoDbReferences ,
195
+ filterPreviousMessages : async ( conversation ) => {
196
+ return conversation . messages . filter ( ( message ) => {
197
+ return (
198
+ message . role === "user" ||
199
+ // Only include assistant messages that are not tool calls
200
+ ( message . role === "assistant" && ! message . toolCall )
201
+ ) ;
202
+ } ) ;
203
+ } ,
204
+ llmNotWorkingMessage :
205
+ conversations . conversationConstants . LLM_NOT_WORKING ,
206
+ searchTool : makeSearchTool ( findContent ) ,
207
+ toolChoice : "auto" ,
208
+ maxSteps : 5 ,
198
209
} ) ,
199
210
{ name : "makeStepBackRagGenerateUserPrompt" }
200
211
) ,
@@ -204,12 +215,6 @@ export const generateResponse = wrapTraced(
204
215
}
205
216
) ;
206
217
207
- export const mongodb = new MongoClient ( MONGODB_CONNECTION_URI ) ;
208
-
209
- export const conversations = makeMongoDbConversationsService (
210
- mongodb . db ( MONGODB_DATABASE_NAME )
211
- ) ;
212
-
213
218
export const createConversationCustomDataWithAuthUser : AddCustomDataFunc =
214
219
async ( req , res ) => {
215
220
const customData = await defaultCreateConversationCustomData ( req , res ) ;
0 commit comments