1
1
import * as dotenv from 'dotenv'
2
2
import 'isomorphic-fetch'
3
3
import type { ChatGPTAPI , SendMessageOptions } from 'chatgpt'
4
+ import { ChatGPTUnofficialProxyAPI } from 'chatgpt'
4
5
import { sendResponse } from './utils'
5
6
7
+ dotenv . config ( )
8
+
9
+ let apiModel : 'ChatGPTAPI' | 'ChatGPTUnofficialProxyAPI' | undefined
10
+
6
11
export interface ChatContext {
7
12
conversationId ?: string
8
13
parentMessageId ?: string
9
14
}
10
15
11
- dotenv . config ( )
12
-
13
- const apiKey = process . env . OPENAI_API_KEY
16
+ const timeoutMs : number = ! isNaN ( + process . env . TIMEOUT_MS ) ? + process . env . TIMEOUT_MS : 30 * 1000
14
17
15
- if ( apiKey === undefined )
16
- throw new Error ( 'OPENAI_API_KEY is not defined ' )
18
+ if ( ! process . env . OPENAI_API_KEY && ! process . env . OPENAI_ACCESS_TOKEN )
19
+ throw new Error ( 'Missing OPENAI_API_KEY or OPENAI_ACCESS_TOKEN environment variable ' )
17
20
18
- let api : ChatGPTAPI
21
+ let api : ChatGPTAPI | ChatGPTUnofficialProxyAPI
19
22
20
23
// To use ESM in CommonJS, you can use a dynamic import
21
24
( async ( ) => {
22
25
// More Info: https://github.com/transitive-bullshit/chatgpt-api
23
26
const { ChatGPTAPI } = await import ( 'chatgpt' )
24
- api = new ChatGPTAPI ( { apiKey : process . env . OPENAI_API_KEY } )
27
+
28
+ if ( process . env . OPENAI_API_KEY ) {
29
+ api = new ChatGPTAPI ( { apiKey : process . env . OPENAI_API_KEY } )
30
+ apiModel = 'ChatGPTAPI'
31
+ }
32
+ else {
33
+ let options = { }
34
+
35
+ if ( process . env . API_REVERSE_PROXY )
36
+ options = { apiReverseProxyUrl : process . env . API_REVERSE_PROXY }
37
+
38
+ api = new ChatGPTUnofficialProxyAPI ( {
39
+ accessToken : process . env . OPENAI_ACCESS_TOKEN ,
40
+ ...options ,
41
+ } )
42
+ apiModel = 'ChatGPTUnofficialProxyAPI'
43
+ }
25
44
} ) ( )
26
45
27
46
async function chatReply (
@@ -32,7 +51,7 @@ async function chatReply(
32
51
return sendResponse ( { type : 'Fail' , message : 'Message is empty' } )
33
52
34
53
try {
35
- let options : SendMessageOptions = { timeoutMs : 30 * 1000 }
54
+ let options : SendMessageOptions = { timeoutMs }
36
55
37
56
if ( lastContext )
38
57
options = { ...lastContext }
@@ -46,4 +65,15 @@ async function chatReply(
46
65
}
47
66
}
48
67
49
- export { chatReply }
68
+ async function chatConfig ( ) {
69
+ return sendResponse ( {
70
+ type : 'Success' ,
71
+ data : {
72
+ apiModel,
73
+ reverseProxy : process . env . API_REVERSE_PROXY ,
74
+ timeoutMs,
75
+ } ,
76
+ } )
77
+ }
78
+
79
+ export { chatReply , chatConfig }
0 commit comments