返回提交历史
Modified
g4f/Provider/needs_auth/CopilotAccount.py
+21
-19
XFEstudio/gpt4free
Add cookies_to_dict for Copilot
408031c9
代码差异
1 个文件
+21
-19
@@ -10,6 +10,9 @@ from ...typing import AsyncResult, Messages
10
10
from ...errors import NoValidHarFileError
11
11
from ... import debug
12
12
13
def cookies_to_dict():
14
return Copilot._cookies if isinstance(Copilot._cookies, dict) else {c.name: c.value for c in Copilot._cookies}
15
13
16
class CopilotAccount(AsyncAuthedProvider, Copilot):
14
17
needs_auth = True
15
18
use_nodriver = True
@@ -24,21 +27,20 @@ class CopilotAccount(AsyncAuthedProvider, Copilot):
24
27
25
28
@classmethod
26
29
async def on_auth_async(cls, proxy: str = None, **kwargs) -> AsyncIterator:
27
if cls._access_token is None:
28
try:
29
cls._access_token, cls._cookies = readHAR(cls.url)
30
except NoValidHarFileError as h:
31
debug.log(f"Copilot: {h}")
32
if has_nodriver:
33
login_url = os.environ.get("G4F_LOGIN_URL")
34
if login_url:
35
yield RequestLogin(cls.label, login_url)
36
cls._access_token, cls._cookies = await get_access_token_and_cookies(cls.url, proxy)
37
else:
38
raise h
30
try:
31
Copilot._access_token, Copilot._cookies = readHAR(cls.url)
32
except NoValidHarFileError as h:
33
debug.log(f"Copilot: {h}")
34
if has_nodriver:
35
login_url = os.environ.get("G4F_LOGIN_URL")
36
if login_url:
37
yield RequestLogin(cls.label, login_url)
38
Copilot._access_token, Copilot._cookies = await get_access_token_and_cookies(cls.url, proxy)
39
else:
40
raise h
39
41
yield AuthResult(
40
api_key=cls._access_token,
41
cookies=cls._cookies if isinstance(cls._cookies, dict) else {c.name: c.value for c in cls._cookies},
42
api_key=Copilot._access_token,
43
cookies=cookies_to_dict()
42
44
)
43
45
44
46
@classmethod
@@ -49,9 +51,9 @@ class CopilotAccount(AsyncAuthedProvider, Copilot):
49
51
auth_result: AuthResult,
50
52
**kwargs
51
53
) -> AsyncResult:
52
cls._access_token = getattr(auth_result, "api_key")
53
cls._cookies = getattr(auth_result, "cookies")
54
cls.needs_auth = cls.needs_auth
55
for chunk in cls.create_completion(model, messages, **kwargs):
54
Copilot._access_token = getattr(auth_result, "api_key")
55
Copilot._cookies = getattr(auth_result, "cookies")
56
Copilot.needs_auth = cls.needs_auth
57
for chunk in Copilot.create_completion(model, messages, **kwargs):
56
58
yield chunk
57
auth_result.cookies = cls._cookies if isinstance(cls._cookies, dict) else {c.name: c.value for c in cls._cookies}
59
auth_result.cookies = cookies_to_dict()