XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet
公开
关注 0 Fork 0 Star 1
返回提交历史

XFEstudio/gpt4free

fix: Update default model to "auto" and adjust system hints in OpenaiChat

2827fe65
hlohaus <hlohaus@users.noreply.github.com>
提交于

代码差异

4 个文件 +62 -60
Modified g4f/Provider/needs_auth/OpenaiChat.py +59 -51
@@ -16,7 +16,6 @@ from ...requests.curl_cffi import AsyncSession
16 16
17 17 try:
18 18 import zendriver as nodriver
19
20 19 has_nodriver = True
21 20 except ImportError:
22 21 has_nodriver = False
@@ -444,6 +443,11 @@ class OpenaiChat(AsyncAuthedProvider, ProviderModelMixin):
444 443 conversation.finish_reason = None
445 444 sources = OpenAISources([])
446 445 references = ContentReferences()
446 system_hints = ["picture_v2"] if image_model else []
447 if reasoning_effort == "high":
448 system_hints.append("reason")
449 if web_search:
450 system_hints.append("search")
447 451 while conversation.finish_reason is None:
448 452 conduit_token = None
449 453 if cls._api_key is not None:
@@ -455,10 +459,7 @@ class OpenaiChat(AsyncAuthedProvider, ProviderModelMixin):
455 459 "timezone_offset_min": -120,
456 460 "timezone": "Europe/Berlin",
457 461 "conversation_mode": {"kind": "primary_assistant"},
458 "system_hints": [
459 "picture_v2"
460 ] if image_model else [],
461 "thinking_effort": "extended" if reasoning_effort == "high" else "standard",
462 "system_hints": system_hints,
462 463 "supports_buffering": True,
463 464 "supported_encodings": ["v1"]
464 465 }
@@ -467,19 +468,19 @@ class OpenaiChat(AsyncAuthedProvider, ProviderModelMixin):
467 468 if conversation.conversation_id is not None and not temporary:
468 469 data["conversation_id"] = conversation.conversation_id
469 470 async with session.post(
470 prepare_url,
471 json=data,
472 headers=cls._headers
471 prepare_url,
472 json=data,
473 headers=cls._headers
473 474 ) as response:
474 475 await raise_for_status(response)
475 476 conduit_token = (await response.json())["conduit_token"]
476 477 async with session.post(
477 f"{cls.url}/backend-anon/sentinel/chat-requirements"
478 if cls._api_key is None else
479 f"{cls.url}/backend-api/sentinel/chat-requirements",
480 json={"p": None if not getattr(auth_result, "proof_token", None) else get_requirements_token(
481 getattr(auth_result, "proof_token", None))},
482 headers=cls._headers
478 f"{cls.url}/backend-anon/sentinel/chat-requirements"
479 if cls._api_key is None else
480 f"{cls.url}/backend-api/sentinel/chat-requirements",
481 json={"p": None if not getattr(auth_result, "proof_token", None) else get_requirements_token(
482 getattr(auth_result, "proof_token", None))},
483 headers=cls._headers
483 484 ) as response:
484 485 if response.status in (401, 403):
485 486 raise MissingAuthError(f"Response status: {response.status}")
@@ -520,8 +521,7 @@ class OpenaiChat(AsyncAuthedProvider, ProviderModelMixin):
520 521 "timezone": "Europe/Berlin",
521 522 "conversation_mode": {"kind": "primary_assistant"},
522 523 "enable_message_followups": True,
523 "system_hints": ["search"] if web_search else None,
524 "thinking_effort": "extended" if reasoning_effort == "high" else "standard",
524 "system_hints": system_hints,
525 525 "supports_buffering": True,
526 526 "supported_encodings": ["v1"],
527 527 "client_contextual_info": {"is_dark_mode": False, "time_since_loaded": random.randint(20, 500),
@@ -564,11 +564,11 @@ class OpenaiChat(AsyncAuthedProvider, ProviderModelMixin):
564 564 if need_turnstile and getattr(auth_result, "turnstile_token", None) is not None:
565 565 headers['openai-sentinel-turnstile-token'] = auth_result.turnstile_token
566 566 async with session.post(
567 backend_anon_url
568 if cls._api_key is None else
569 backend_url,
570 json=data,
571 headers=headers
567 backend_anon_url
568 if cls._api_key is None else
569 backend_url,
570 json=data,
571 headers=headers
572 572 ) as response:
573 573 cls._update_request_args(auth_result, session)
574 574 if response.status in (401, 403, 429, 500):
@@ -722,19 +722,19 @@ class OpenaiChat(AsyncAuthedProvider, ProviderModelMixin):
722 722
723 723 @classmethod
724 724 async def wss_media(
725 cls,
726 _session,
727 conversation: Conversation,
728 headers: Dict[str, str],
729 auth_result: AuthResult,
730 timeout: Optional[int] = 20,
725 cls,
726 _session,
727 conversation: Conversation,
728 headers: Dict[str, str],
729 auth_result: AuthResult,
730 timeout: Optional[int] = 20,
731 731 ):
732 732 seen_assets: Set[str] = set()
733 733 async with AsyncSession(
734 timeout=timeout,
735 impersonate="chrome",
736 headers=headers,
737 cookies=auth_result.cookies
734 timeout=timeout,
735 impersonate="chrome",
736 headers=headers,
737 cookies=auth_result.cookies
738 738 ) as session:
739 739 response = await session.get(
740 740 "https://chatgpt.com/backend-api/celsius/ws/user",
@@ -789,13 +789,13 @@ class OpenaiChat(AsyncAuthedProvider, ProviderModelMixin):
789 789
790 790 @classmethod
791 791 async def wait_media(
792 cls,
793 session,
794 conversation,
795 headers: Dict[str, str],
796 auth_result: AuthResult,
797 poll_interval: int = 10,
798 timeout: Optional[int] = None,
792 cls,
793 session,
794 conversation,
795 headers: Dict[str, str],
796 auth_result: AuthResult,
797 poll_interval: int = 10,
798 timeout: Optional[int] = None,
799 799 ) -> AsyncGenerator[Any, None]:
800 800 start_time = asyncio.get_event_loop().time()
801 801 seen_assets: Set[str] = set()
@@ -1106,17 +1106,25 @@ class OpenaiChat(AsyncAuthedProvider, ProviderModelMixin):
1106 1106 for _ in range(3):
1107 1107 try:
1108 1108 if cls.needs_auth:
1109 await page.select('[data-testid="accounts-profile-button"]', 300)
1110 textarea = await page.select("#prompt-textarea", 300)
1111 await textarea.send_keys("Hello")
1112 await asyncio.sleep(1)
1109 try:
1110 await page.select('[data-testid="accounts-profile-button"]', 300)
1111 except TimeoutError:
1112 continue
1113 try:
1114 textarea = await page.select("#prompt-textarea", 300)
1115 await textarea.send_keys("Hello")
1116 await asyncio.sleep(1)
1117 except TimeoutError:
1118 continue
1113 1119 except nodriver.core.connection.ProtocolException:
1114 1120 continue
1115 1121 break
1116 button = await page.select("[data-testid=\"send-button\"]")
1117 if button:
1122 try:
1123 button = await page.select("[data-testid=\"send-button\"]")
1118 1124 await button.click()
1119 debug.log("OpenaiChat: 'Hello' sended")
1125 debug.log("OpenaiChat: 'Hello' sended")
1126 except TimeoutError:
1127 pass
1120 1128 while True:
1121 1129 body = await page.evaluate("JSON.stringify(window.__remixContext)", return_by_value=True)
1122 1130 if hasattr(body, "value"):
@@ -1131,12 +1139,12 @@ class OpenaiChat(AsyncAuthedProvider, ProviderModelMixin):
1131 1139 await asyncio.sleep(1)
1132 1140 debug.log("OpenaiChat: Waiting for access token...")
1133 1141 debug.log(f"OpenaiChat: Access token: {'False' if cls._api_key is None else cls._api_key[:12] + '...'}")
1134 while True:
1135 if cls.request_config.proof_token:
1136 break
1137 await asyncio.sleep(1)
1138 debug.log("OpenaiChat: Waiting for proof token...")
1139 debug.log(f"OpenaiChat: Proof token: Yes")
1142 #while True:
1143 # if cls.request_config.proof_token:
1144 # break
1145 # await asyncio.sleep(1)
1146 # debug.log("OpenaiChat: Waiting for proof token...")
1147 #debug.log(f"OpenaiChat: Proof token: Yes")
1140 1148 cls.request_config.data_build = await page.evaluate("document.documentElement.getAttribute('data-build')")
1141 1149 cls.request_config.cookies = await page.send(get_cookies([cls.url]))
1142 1150 await page.close()
Modified g4f/Provider/openai/models.py +3 -2
@@ -1,10 +1,11 @@
1 default_model = "gpt-5-2"
1 default_model = "auto"
2 2 default_image_model = "gpt-image"
3 3 image_models = [default_image_model]
4 text_models = [default_model, "gpt-5-2-instant", "gpt-5-2-thinking", "gpt-5-1", "gpt-5-1-instant", "gpt-5-1-thinking", "gpt-5", "gpt-5-instant", "gpt-5-thinking", "gpt-4", "gpt-4.1", "gpt-4.1-mini", "gpt-4.5", "gpt-4o", "gpt-4o-mini", "o1", "o1-mini", "o3-mini", "o3-mini-high", "o4-mini", "o4-mini-high"]
4 text_models = [default_model, "gpt-5-2", "gpt-5-2-instant", "gpt-5-2-thinking", "gpt-5-1", "gpt-5-1-instant", "gpt-5-1-thinking", "gpt-5", "gpt-5-instant", "gpt-5-thinking", "gpt-4", "gpt-4.1", "gpt-4.1-mini", "gpt-4.5", "gpt-4o", "gpt-4o-mini", "o1", "o1-mini", "o3-mini", "o3-mini-high", "o4-mini", "o4-mini-high"]
5 5 vision_models = text_models
6 6 models = text_models + image_models
7 7 model_aliases = {
8 "gpt-5.2": "gpt-5-2",
8 9 "gpt-5.1": "gpt-5-1",
9 10 "gpt-4.1": "gpt-4-1",
10 11 "gpt-4.1-mini": "gpt-4-1-mini",
Modified g4f/requests/__init__.py +0 -6
@@ -221,12 +221,6 @@ async def get_nodriver(
221 221 )
222 222 except FileNotFoundError as e:
223 223 raise MissingRequirementsError(e)
224 except Exception as e:
225 if util.get_registered_instances():
226 debug.error(e)
227 browser = util.get_registered_instances().pop()
228 else:
229 raise
230 224
231 225 async def on_stop():
232 226 try:
Modified g4f/requests/curl_cffi.py +0 -1
@@ -5,7 +5,6 @@ try:
5 5 has_curl_cffi = True
6 6 except ImportError:
7 7 # Fallback for systems where curl_cffi is not available or causes illegal instruction errors
8 from typing import Any
9 8 class AsyncSession:
10 9 def __init__(self, *args, **kwargs):
11 10 raise ImportError("curl_cffi is not available on this platform")