@@ -33,7 +33,7 @@ function parseOpenAIMessage(request: APIRequest) {
3333 prompt,
3434 context,
3535 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 ) ,
3737 model : / C r e a t i v e | g p t - ? 4 / i. test ( request . model ) ? 'Creative' : request . model ,
3838 } ;
3939}
@@ -72,49 +72,70 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse)
7272 req . socket . once ( 'close' , ( ) => {
7373 abortController . abort ( )
7474 } )
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- } )
8275
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 ( '缺少授权信息' ) ;
8590 }
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+ } )
86102
87- assert ( prompt , 'messages can\'t be empty!' )
103+ if ( stream ) {
104+ res . setHeader ( 'Content-Type' , 'text/event-stream; charset=utf-8' )
105+ }
88106
89- const toneType = model as BingConversationStyle
107+ assert ( prompt , 'messages can\'t be empty!' )
90108
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+ }
106127 }
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+ }
118139 }
119140 }
120141}
0 commit comments