2
2
import logging
3
3
import os
4
4
5
- from fastapi import WebSocket , Form
5
+ import httpx
6
+ from fastapi import Form
6
7
from fastapi .responses import JSONResponse
7
8
from fastapi_poe .client import get_bot_response , get_final_response , QueryRequest
8
9
from fastapi_poe .types import ProtocolMessage
13
14
14
15
client_dict = {}
15
16
17
+
16
18
async def get_responses (api_key , prompt = [], bot = "gpt-4" ):
17
19
bot_name = get_bot (bot )
18
20
# "system", "user", "bot"
@@ -30,14 +32,17 @@ async def get_responses(api_key, prompt=[], bot="gpt-4"):
30
32
** additional_params
31
33
)
32
34
33
- return await get_final_response (query , bot_name = bot_name , api_key = api_key )
35
+ session = create_client ()
36
+ return await get_final_response (query , bot_name = bot_name , api_key = api_key , session = session )
34
37
35
38
36
39
async def stream_get_responses (api_key , prompt , bot ):
37
40
bot_name = get_bot (bot )
38
41
messages = openai_message_to_poe_message (prompt )
42
+
43
+ session = create_client ()
39
44
async for partial in get_bot_response (messages = messages , bot_name = bot_name , api_key = api_key ,
40
- skip_system_prompt = True ):
45
+ skip_system_prompt = True , session = session ):
41
46
yield partial .text
42
47
43
48
@@ -69,24 +74,6 @@ async def ask(token: str = Form(...), bot: str = Form(...), content: str = Form(
69
74
return JSONResponse (status_code = 400 , content = {"message" : errmsg })
70
75
71
76
72
- # @app.websocket("/stream")
73
- async def websocket_endpoint (websocket : WebSocket ):
74
- try :
75
- await websocket .accept ()
76
- token = await websocket .receive_text ()
77
- bot = await websocket .receive_text ()
78
- content = await websocket .receive_text ()
79
- add_token (token )
80
- async for ret in stream_get_responses (token , content , bot ):
81
- await websocket .send_text (ret )
82
- except Exception as e :
83
- errmsg = f"An exception of type { type (e ).__name__ } occurred. Arguments: { e .args } "
84
- logging .info (errmsg )
85
- await websocket .send_text (errmsg )
86
- finally :
87
- await websocket .close ()
88
-
89
-
90
77
def get_bot (model ):
91
78
model_mapping = json .loads (os .environ .get ("MODEL_MAPPING" , "{}" ))
92
79
return model_mapping .get (model , "GPT-4o" )
@@ -100,3 +87,48 @@ def openai_message_to_poe_message(messages=[]):
100
87
new_messages .append (ProtocolMessage (role = role , content = message ["content" ]))
101
88
102
89
return new_messages
90
+
91
+
92
+ def create_client ():
93
+ proxy_config = {
94
+ "proxy_type" : os .environ .get ("PROXY_TYPE" ),
95
+ "proxy_host" : os .environ .get ("PROXY_HOST" ),
96
+ "proxy_port" : os .environ .get ("PROXY_PORT" ),
97
+ "proxy_username" : os .environ .get ("PROXY_USERNAME" ),
98
+ "proxy_password" : os .environ .get ("PROXY_PASSWORD" ),
99
+ }
100
+
101
+ proxy = create_proxy (proxy_config )
102
+ client = httpx .AsyncClient (timeout = 600 , proxies = proxy )
103
+ return client
104
+
105
+
106
+ def create_proxy (proxy_config ):
107
+ proxy_type = proxy_config ["proxy_type" ]
108
+ proxy_url = create_proxy_url (proxy_config )
109
+
110
+ if proxy_type in ["http" , "socks" ] and proxy_url :
111
+ return {
112
+ "http://" : proxy_url ,
113
+ "https://" : proxy_url ,
114
+ }
115
+ else :
116
+ return None
117
+
118
+
119
+ def create_proxy_url (proxy_config ):
120
+ proxy_type = proxy_config ["proxy_type" ]
121
+ proxy_host = proxy_config ["proxy_host" ]
122
+ proxy_port = proxy_config ["proxy_port" ]
123
+ proxy_username = proxy_config ["proxy_username" ]
124
+ proxy_password = proxy_config ["proxy_password" ]
125
+
126
+ if not proxy_host or not proxy_port :
127
+ return None
128
+
129
+ if proxy_type == "http" :
130
+ return f"http://{ proxy_username } :{ proxy_password } @{ proxy_host } :{ proxy_port } "
131
+ elif proxy_type == "socks" :
132
+ return f"socks5://{ proxy_username } :{ proxy_password } @{ proxy_host } :{ proxy_port } "
133
+ else :
134
+ return None
0 commit comments