@@ -162,11 +162,21 @@ def __init__(
162162 self .conversation_id_prev_queue = []
163163 self .parent_id_prev_queue = []
164164 self .lazy_loading = lazy_loading
165- self .base_url = base_url or BASE_URL
166165 self .recipients = RecipientManager ()
167166 self .disable_history = config .get ("disable_history" , False )
168167
169168 self .__check_credentials ()
169+ # Check if chat.openai.com is reachable
170+ if not base_url :
171+ response = self .session .get ("https://chat.openai.com/backend-api/accounts/check" , impersonate = 'safari15_5' )
172+ if response .status_code != 200 :
173+ print (f"Using bypass.churchless.tech backend due to status code { response .status_code } " )
174+ self .base_url = BASE_URL
175+ else :
176+ print ("Using chat.openai.com backend" )
177+ self .base_url = "https://chat.openai.com/backend-api/"
178+ else :
179+ self .base_url = base_url
170180
171181 @logger (is_timed = True )
172182 def __check_credentials (self ) -> None :
@@ -345,7 +355,7 @@ def __send_request(
345355 url = f"{ self .base_url } conversation" ,
346356 data = json .dumps (data ),
347357 timeout = timeout ,
348- impersonate = 'chrome110 ' ,
358+ impersonate = 'safari15_5 ' ,
349359 content_callback = response_file .write , # a hack around curl_cffi not supporting stream=True
350360 )
351361 self .__check_response (response )
@@ -693,7 +703,7 @@ def get_conversations(
693703 :param limit: Integer
694704 """
695705 url = f"{ self .base_url } conversations?offset={ offset } &limit={ limit } "
696- response = self .session .get (url , impersonate = 'chrome110 ' )
706+ response = self .session .get (url , impersonate = 'safari15_5 ' )
697707 self .__check_response (response )
698708 if encoding is not None :
699709 response .encoding = encoding
@@ -708,7 +718,7 @@ def get_msg_history(self, convo_id: str, encoding: str | None = None) -> list:
708718 :param encoding: String
709719 """
710720 url = f"{ self .base_url } conversation/{ convo_id } "
711- response = self .session .get (url , impersonate = 'chrome110 ' )
721+ response = self .session .get (url , impersonate = 'safari15_5 ' )
712722 self .__check_response (response )
713723 if encoding is not None :
714724 response .encoding = encoding
@@ -724,7 +734,7 @@ def gen_title(self, convo_id: str, message_id: str) -> str:
724734 data = json .dumps (
725735 {"message_id" : message_id , "model" : "text-davinci-002-render" },
726736 ),
727- impersonate = 'chrome110 '
737+ impersonate = 'safari15_5 '
728738 )
729739 self .__check_response (response )
730740 return response .json ().get ("title" , "Error generating title" )
@@ -737,7 +747,7 @@ def change_title(self, convo_id: str, title: str) -> None:
737747 :param title: String
738748 """
739749 url = f"{ self .base_url } conversation/{ convo_id } "
740- response = self .session .patch (url , data = json .dumps ({"title" : title }), impersonate = 'chrome110 ' )
750+ response = self .session .patch (url , data = json .dumps ({"title" : title }), impersonate = 'safari15_5 ' )
741751 self .__check_response (response )
742752
743753 @logger (is_timed = True )
@@ -747,7 +757,7 @@ def delete_conversation(self, convo_id: str) -> None:
747757 :param id: UUID of conversation
748758 """
749759 url = f"{ self .base_url } conversation/{ convo_id } "
750- response = self .session .patch (url , data = '{"is_visible": false}' , impersonate = 'chrome110 ' )
760+ response = self .session .patch (url , data = '{"is_visible": false}' , impersonate = 'safari15_5 ' )
751761 self .__check_response (response )
752762
753763 @logger (is_timed = True )
@@ -756,7 +766,7 @@ def clear_conversations(self) -> None:
756766 Delete all conversations
757767 """
758768 url = f"{ self .base_url } conversations"
759- response = self .session .patch (url , data = '{"is_visible": false}' , impersonate = 'chrome110 ' )
769+ response = self .session .patch (url , data = '{"is_visible": false}' , impersonate = 'safari15_5 ' )
760770 self .__check_response (response )
761771
762772 @logger (is_timed = False )
@@ -790,7 +800,7 @@ def rollback_conversation(self, num: int = 1) -> None:
790800 @logger (is_timed = True )
791801 def get_plugins (self , offset : int = 0 , limit : int = 250 , status : str = "approved" ):
792802 url = f"{ self .base_url } aip/p?offset={ offset } &limit={ limit } &statuses={ status } "
793- response = self .session .get (url , impersonate = 'chrome110 ' )
803+ response = self .session .get (url , impersonate = 'safari15_5 ' )
794804 self .__check_response (response )
795805 # Parse as JSON
796806 return json .loads (response .text )
@@ -799,7 +809,7 @@ def get_plugins(self, offset: int = 0, limit: int = 250, status: str = "approved
799809 def install_plugin (self , plugin_id : str ):
800810 url = f"{ self .base_url } aip/p/{ plugin_id } /user-settings"
801811 payload = {"is_installed" : True }
802- response = self .session .patch (url , data = json .dumps (payload ), impersonate = 'chrome110 ' )
812+ response = self .session .patch (url , data = json .dumps (payload ), impersonate = 'safari15_5 ' )
803813 self .__check_response (response )
804814
805815 @logger (is_timed = False )
@@ -861,7 +871,7 @@ async def __send_request(
861871 url = f"{ self .base_url } conversation" ,
862872 data = json .dumps (data ),
863873 timeout = timeout ,
864- impersonate = 'chrome110 ' ,
874+ impersonate = 'safari15_5 ' ,
865875 content_callback = response_file .write ,
866876 )
867877 await self .__check_response (response )
@@ -1138,7 +1148,7 @@ async def get_conversations(self, offset: int = 0, limit: int = 20) -> list:
11381148 :param limit: Integer
11391149 """
11401150 url = f"{ self .base_url } conversations?offset={ offset } &limit={ limit } "
1141- response = await self .session .get (url , impersonate = 'chrome110 ' )
1151+ response = await self .session .get (url , impersonate = 'safari15_5 ' )
11421152 await self .__check_response (response )
11431153 data = json .loads (response .text )
11441154 return data ["items" ]
@@ -1153,7 +1163,7 @@ async def get_msg_history(
11531163 :param id: UUID of conversation
11541164 """
11551165 url = f"{ self .base_url } conversation/{ convo_id } "
1156- response = await self .session .get (url , impersonate = 'chrome110 ' )
1166+ response = await self .session .get (url , impersonate = 'safari15_5 ' )
11571167 if encoding is not None :
11581168 response .encoding = encoding
11591169 await self .__check_response (response )
@@ -1169,7 +1179,7 @@ async def gen_title(self, convo_id: str, message_id: str) -> None:
11691179 url ,
11701180 data = json .dumps (
11711181 {"message_id" : message_id , "model" : "text-davinci-002-render" },
1172- ), impersonate = 'chrome110 '
1182+ ), impersonate = 'safari15_5 '
11731183 )
11741184 await self .__check_response (response )
11751185
@@ -1180,7 +1190,7 @@ async def change_title(self, convo_id: str, title: str) -> None:
11801190 :param title: String
11811191 """
11821192 url = f"{ self .base_url } conversation/{ convo_id } "
1183- response = await self .session .patch (url , data = f'{{"title": "{ title } "}}' , impersonate = 'chrome110 ' )
1193+ response = await self .session .patch (url , data = f'{{"title": "{ title } "}}' , impersonate = 'safari15_5 ' )
11841194 await self .__check_response (response )
11851195
11861196 async def delete_conversation (self , convo_id : str ) -> None :
@@ -1189,15 +1199,15 @@ async def delete_conversation(self, convo_id: str) -> None:
11891199 :param convo_id: UUID of conversation
11901200 """
11911201 url = f"{ self .base_url } conversation/{ convo_id } "
1192- response = await self .session .patch (url , data = '{"is_visible": false}' , impersonate = 'chrome110 ' )
1202+ response = await self .session .patch (url , data = '{"is_visible": false}' , impersonate = 'safari15_5 ' )
11931203 await self .__check_response (response )
11941204
11951205 async def clear_conversations (self ) -> None :
11961206 """
11971207 Delete all conversations
11981208 """
11991209 url = f"{ self .base_url } conversations"
1200- response = await self .session .patch (url , data = '{"is_visible": false}' , impersonate = 'chrome110 ' )
1210+ response = await self .session .patch (url , data = '{"is_visible": false}' , impersonate = 'safari15_5 ' )
12011211 await self .__check_response (response )
12021212
12031213 async def __map_conversations (self ) -> None :
0 commit comments