@@ -33,7 +33,7 @@ function parseOpenAIMessage(request: APIRequest) {
33
33
prompt,
34
34
context,
35
35
stream : request . stream ,
36
- allowSearch : ! / C r e a t i v e | B a l a n c e d | P r e c i s e / i. test ( request . model ) ,
36
+ allowSearch : / C r e a t i v e | B a l a n c e d | P r e c i s e / i. test ( request . model ) ,
37
37
model : / C r e a t i v e | g p t - ? 4 / i. test ( request . model ) ? 'Creative' : request . model ,
38
38
} ;
39
39
}
@@ -72,49 +72,70 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse)
72
72
req . socket . once ( 'close' , ( ) => {
73
73
abortController . abort ( )
74
74
} )
75
- const { prompt, stream, model, allowSearch, context } = parseOpenAIMessage ( req . body ) ;
76
- let lastLength = 0
77
- let lastText = ''
78
- try {
79
- const chatbot = new BingWebBot ( {
80
- endpoint : getOriginFromHost ( req . headers . host || '127.0.0.1:3000' ) ,
81
- } )
82
75
83
- if ( stream ) {
84
- res . setHeader ( 'Content-Type' , 'text/event-stream; charset=utf-8' )
76
+ let authFlag = false
77
+ if ( process . env . apikey ) {
78
+ const authHeader = req . headers . authorization ;
79
+ if ( authHeader && authHeader . startsWith ( 'Bearer ' ) ) {
80
+ const token = authHeader . substring ( 7 ) ;
81
+ if ( token === process . env . apikey ) {
82
+ authFlag = true ;
83
+ } else {
84
+ authFlag = false ;
85
+ res . status ( 401 ) . send ( '授权失败' ) ;
86
+ }
87
+ } else {
88
+ authFlag = false ;
89
+ res . status ( 401 ) . send ( '缺少授权信息' ) ;
85
90
}
91
+ } else {
92
+ authFlag = true ;
93
+ }
94
+ if ( authFlag ) {
95
+ const { prompt, stream, model, allowSearch, context} = parseOpenAIMessage ( req . body ) ;
96
+ let lastLength = 0
97
+ let lastText = ''
98
+ try {
99
+ const chatbot = new BingWebBot ( {
100
+ endpoint : getOriginFromHost ( req . headers . host || '127.0.0.1:3000' ) ,
101
+ } )
86
102
87
- assert ( prompt , 'messages can\'t be empty!' )
103
+ if ( stream ) {
104
+ res . setHeader ( 'Content-Type' , 'text/event-stream; charset=utf-8' )
105
+ }
88
106
89
- const toneType = model as BingConversationStyle
107
+ assert ( prompt , 'messages can\'t be empty!' )
90
108
91
- await chatbot . sendMessage ( {
92
- prompt,
93
- context,
94
- options : {
95
- allowSearch,
96
- bingConversationStyle : Object . values ( BingConversationStyle )
97
- . includes ( toneType ) ? toneType : BingConversationStyle . Creative ,
98
- } ,
99
- signal : abortController . signal ,
100
- onEvent ( event ) {
101
- if ( event . type === 'UPDATE_ANSWER' ) {
102
- lastText = event . data . text
103
- if ( stream && lastLength !== lastText . length ) {
104
- res . write ( `data: ${ JSON . stringify ( responseOpenAIMessage ( lastText . slice ( lastLength ) ) ) } \n\n` )
105
- lastLength = lastText . length
109
+ const toneType = model as BingConversationStyle
110
+
111
+ await chatbot . sendMessage ( {
112
+ prompt,
113
+ context,
114
+ options : {
115
+ allowSearch,
116
+ bingConversationStyle : Object . values ( BingConversationStyle )
117
+ . includes ( toneType ) ? toneType : BingConversationStyle . Creative ,
118
+ } ,
119
+ signal : abortController . signal ,
120
+ onEvent ( event ) {
121
+ if ( event . type === 'UPDATE_ANSWER' && event . data . text ) {
122
+ lastText = event . data . text
123
+ if ( stream && lastLength !== lastText . length ) {
124
+ res . write ( `data: ${ JSON . stringify ( responseOpenAIMessage ( lastText . slice ( lastLength ) ) ) } \n\n` )
125
+ lastLength = lastText . length
126
+ }
106
127
}
107
- }
108
- } ,
109
- } )
110
- } catch ( error ) {
111
- console . log ( 'Catch Error:' , error )
112
- res . write ( `data: ${ JSON . stringify ( responseOpenAIMessage ( ` ${ error } ` ) ) } \n\n` )
113
- } finally {
114
- if ( stream ) {
115
- res . end ( `data: [DONE]\n\n` ) ;
116
- } else {
117
- res . end ( JSON . stringify ( responseOpenAIMessage ( lastText ) ) )
128
+ } ,
129
+ } )
130
+ } catch ( error ) {
131
+ console . log ( 'Catch Error:' , error )
132
+ res . write ( `data: ${ JSON . stringify ( responseOpenAIMessage ( ` ${ error } ` ) ) } \n\n` )
133
+ } finally {
134
+ if ( stream ) {
135
+ res . end ( `data: [DONE]\n\n` ) ;
136
+ } else {
137
+ res . end ( JSON . stringify ( responseOpenAIMessage ( lastText ) ) )
138
+ }
118
139
}
119
140
}
120
141
}
0 commit comments