@@ -4,15 +4,17 @@ const { saveMessage, getConvoTitle, getConvo } = require('~/models');
4
4
const { createAbortController, handleAbortError } = require ( '~/server/middleware' ) ;
5
5
const { logger } = require ( '~/config' ) ;
6
6
7
- const AskController = async ( req , res , next , initializeClient ) => {
7
+ const AskController = async ( req , res , next , initializeClient , addTitle ) => {
8
8
let {
9
9
text,
10
10
endpointOption,
11
11
conversationId,
12
12
parentMessageId = null ,
13
13
overrideParentMessageId = null ,
14
14
} = req . body ;
15
+
15
16
logger . debug ( '[AskController]' , { text, conversationId, ...endpointOption } ) ;
17
+
16
18
let metadata ;
17
19
let userMessage ;
18
20
let promptTokens ;
@@ -21,8 +23,11 @@ const AskController = async (req, res, next, initializeClient) => {
21
23
let lastSavedTimestamp = 0 ;
22
24
let saveDelay = 100 ;
23
25
const sender = getResponseSender ( { ...endpointOption , model : endpointOption . modelOptions . model } ) ;
26
+ const newConvo = ! conversationId ;
24
27
const user = req . user . id ;
25
28
29
+ const addMetadata = ( data ) => ( metadata = data ) ;
30
+
26
31
const getReqData = ( data = { } ) => {
27
32
for ( let key in data ) {
28
33
if ( key === 'userMessage' ) {
@@ -50,6 +55,7 @@ const AskController = async (req, res, next, initializeClient) => {
50
55
conversationId,
51
56
parentMessageId : overrideParentMessageId ?? userMessageId ,
52
57
text : partialText ,
58
+ model : endpointOption . modelOptions . model ,
53
59
unfinished : true ,
54
60
cancelled : false ,
55
61
error : false ,
@@ -62,46 +68,50 @@ const AskController = async (req, res, next, initializeClient) => {
62
68
}
63
69
} ,
64
70
} ) ;
65
- try {
66
- const addMetadata = ( data ) => ( metadata = data ) ;
67
- const getAbortData = ( ) => ( {
68
- conversationId,
69
- messageId : responseMessageId ,
70
- sender,
71
- parentMessageId : overrideParentMessageId ?? userMessageId ,
72
- text : getPartialText ( ) ,
73
- userMessage,
74
- promptTokens,
75
- } ) ;
76
71
77
- const { abortController, onStart } = createAbortController ( req , res , getAbortData ) ;
72
+ const getAbortData = ( ) => ( {
73
+ sender,
74
+ conversationId,
75
+ messageId : responseMessageId ,
76
+ parentMessageId : overrideParentMessageId ?? userMessageId ,
77
+ text : getPartialText ( ) ,
78
+ userMessage,
79
+ promptTokens,
80
+ } ) ;
78
81
79
- const { client } = await initializeClient ( { req, res, endpointOption } ) ;
82
+ const { abortController , onStart } = createAbortController ( req , res , getAbortData ) ;
80
83
81
- let response = await client . sendMessage ( text , {
82
- // debug: true,
84
+ try {
85
+ const { client } = await initializeClient ( { req, res, endpointOption } ) ;
86
+ const messageOptions = {
83
87
user,
84
- conversationId,
85
88
parentMessageId,
89
+ conversationId,
86
90
overrideParentMessageId,
87
- ...endpointOption ,
91
+ getReqData,
92
+ onStart,
93
+ addMetadata,
94
+ abortController,
88
95
onProgress : progressCallback . call ( null , {
89
96
res,
90
97
text,
91
- parentMessageId : overrideParentMessageId ?? userMessageId ,
98
+ parentMessageId : overrideParentMessageId || userMessageId ,
92
99
} ) ,
93
- onStart,
94
- getReqData,
95
- addMetadata,
96
- abortController,
97
- } ) ;
100
+ } ;
101
+
102
+ let response = await client . sendMessage ( text , messageOptions ) ;
103
+
104
+ if ( overrideParentMessageId ) {
105
+ response . parentMessageId = overrideParentMessageId ;
106
+ }
98
107
99
108
if ( metadata ) {
100
109
response = { ...response , ...metadata } ;
101
110
}
102
111
103
- if ( overrideParentMessageId ) {
104
- response . parentMessageId = overrideParentMessageId ;
112
+ if ( client . options . attachments ) {
113
+ userMessage . files = client . options . attachments ;
114
+ delete userMessage . image_urls ;
105
115
}
106
116
107
117
sendMessage ( res , {
@@ -116,7 +126,13 @@ const AskController = async (req, res, next, initializeClient) => {
116
126
await saveMessage ( { ...response , user } ) ;
117
127
await saveMessage ( userMessage ) ;
118
128
119
- // TODO: add title service
129
+ if ( addTitle && parentMessageId === '00000000-0000-0000-0000-000000000000' && newConvo ) {
130
+ addTitle ( req , {
131
+ text,
132
+ response,
133
+ client,
134
+ } ) ;
135
+ }
120
136
} catch ( error ) {
121
137
const partialText = getPartialText ( ) ;
122
138
handleAbortError ( res , req , error , {
0 commit comments