|
|
from __future__ import annotations |
|
|
|
|
|
import os |
|
|
from typing import AsyncIterator |
|
|
|
|
|
from ..Copilot import Copilot, readHAR, has_nodriver, get_access_token_and_cookies |
|
|
from ...providers.response import AuthResult, RequestLogin |
|
|
from ...errors import NoValidHarFileError |
|
|
from ... import debug |
|
|
|
|
|
class CopilotAccount(Copilot): |
|
|
needs_auth = True |
|
|
use_nodriver = True |
|
|
parent = "Copilot" |
|
|
default_model = "Copilot" |
|
|
default_vision_model = default_model |
|
|
model_aliases = { |
|
|
"gpt-4": default_model, |
|
|
"gpt-4o": default_model, |
|
|
"o1": "Think Deeper", |
|
|
"dall-e-3": default_model |
|
|
} |
|
|
|
|
|
@classmethod |
|
|
async def on_auth_async(cls, proxy: str = None, **kwargs) -> AsyncIterator: |
|
|
try: |
|
|
cls._access_token, cls._cookies = readHAR(cls.url) |
|
|
except NoValidHarFileError as h: |
|
|
debug.log(f"Copilot: {h}") |
|
|
if has_nodriver: |
|
|
yield RequestLogin(cls.label, os.environ.get("G4F_LOGIN_URL", "")) |
|
|
cls._access_token, cls._cookies = await get_access_token_and_cookies(cls.url, proxy) |
|
|
else: |
|
|
raise h |
|
|
yield AuthResult( |
|
|
api_key=cls._access_token, |
|
|
cookies=cls.cookies_to_dict() |
|
|
) |
|
|
|