mirror of
https://github.com/xtekky/gpt4free.git
synced 2025-12-06 02:30:41 -08:00
Add nodriver to OpenaiChat
This commit is contained in:
parent
b35dfcd1b0
commit
bdc61ca273
4 changed files with 43 additions and 3 deletions
|
|
@ -338,6 +338,8 @@ class OpenaiChat(AsyncGeneratorProvider, ProviderModelMixin):
|
||||||
impersonate="chrome",
|
impersonate="chrome",
|
||||||
timeout=timeout
|
timeout=timeout
|
||||||
) as session:
|
) as session:
|
||||||
|
if cls._expires is not None and cls._expires < time.time():
|
||||||
|
cls._headers = cls._api_key = None
|
||||||
if cls._headers is None or cookies is not None:
|
if cls._headers is None or cookies is not None:
|
||||||
cls._create_request_args(cookies)
|
cls._create_request_args(cookies)
|
||||||
api_key = kwargs["access_token"] if "access_token" in kwargs else api_key
|
api_key = kwargs["access_token"] if "access_token" in kwargs else api_key
|
||||||
|
|
@ -365,6 +367,8 @@ class OpenaiChat(AsyncGeneratorProvider, ProviderModelMixin):
|
||||||
cls._set_api_key(api_key)
|
cls._set_api_key(api_key)
|
||||||
except NoValidHarFileError:
|
except NoValidHarFileError:
|
||||||
...
|
...
|
||||||
|
if cls._api_key is None:
|
||||||
|
await cls.nodriver_access_token()
|
||||||
cls.default_model = cls.get_model(await cls.get_default_model(session, cls._headers))
|
cls.default_model = cls.get_model(await cls.get_default_model(session, cls._headers))
|
||||||
|
|
||||||
async with session.post(
|
async with session.post(
|
||||||
|
|
@ -566,6 +570,40 @@ this.fetch = async (url, options) => {
|
||||||
cls._expires = int(time.time()) + 60 * 60 * 4
|
cls._expires = int(time.time()) + 60 * 60 * 4
|
||||||
cls._update_cookie_header()
|
cls._update_cookie_header()
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
async def nodriver_access_token(cls):
|
||||||
|
try:
|
||||||
|
import nodriver as uc
|
||||||
|
except ImportError:
|
||||||
|
return
|
||||||
|
try:
|
||||||
|
from platformdirs import user_config_dir
|
||||||
|
user_data_dir = user_config_dir("g4f-nodriver")
|
||||||
|
except:
|
||||||
|
user_data_dir = None
|
||||||
|
browser = await uc.start(user_data_dir=user_data_dir)
|
||||||
|
page = await browser.get("https://chat.openai.com/")
|
||||||
|
while await page.query_selector("#prompt-textarea") is None:
|
||||||
|
await asyncio.sleep(1)
|
||||||
|
api_key = await page.evaluate(
|
||||||
|
"(async () => {"
|
||||||
|
"let session = await fetch('/api/auth/session');"
|
||||||
|
"let data = await session.json();"
|
||||||
|
"let accessToken = data['accessToken'];"
|
||||||
|
"let expires = new Date(); expires.setTime(expires.getTime() + 60 * 60 * 4 * 1000);"
|
||||||
|
"document.cookie = 'access_token=' + accessToken + ';expires=' + expires.toUTCString() + ';path=/';"
|
||||||
|
"return accessToken;"
|
||||||
|
"})();",
|
||||||
|
await_promise=True
|
||||||
|
)
|
||||||
|
cookies = {}
|
||||||
|
for c in await page.browser.cookies.get_all():
|
||||||
|
if c.domain.endswith("chat.openai.com"):
|
||||||
|
cookies[c.name] = c.value
|
||||||
|
await page.close()
|
||||||
|
cls._create_request_args(cookies)
|
||||||
|
cls._set_api_key(api_key)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def browse_access_token(cls, proxy: str = None, timeout: int = 1200) -> None:
|
def browse_access_token(cls, proxy: str = None, timeout: int = 1200) -> None:
|
||||||
"""
|
"""
|
||||||
|
|
|
||||||
|
|
@ -87,7 +87,8 @@ def create_response(
|
||||||
else:
|
else:
|
||||||
create = provider.create_completion
|
create = provider.create_completion
|
||||||
response = create(
|
response = create(
|
||||||
model, messages, stream,
|
model, messages,
|
||||||
|
stream=stream,
|
||||||
**filter_none(
|
**filter_none(
|
||||||
proxy=proxy,
|
proxy=proxy,
|
||||||
max_tokens=max_tokens,
|
max_tokens=max_tokens,
|
||||||
|
|
|
||||||
|
|
@ -98,7 +98,8 @@ class Completions():
|
||||||
)
|
)
|
||||||
stop = [stop] if isinstance(stop, str) else stop
|
stop = [stop] if isinstance(stop, str) else stop
|
||||||
response = provider.create_completion(
|
response = provider.create_completion(
|
||||||
model, messages, stream,
|
model, messages,
|
||||||
|
stream=stream,
|
||||||
**filter_none(
|
**filter_none(
|
||||||
proxy=self.client.get_proxy() if proxy is None else proxy,
|
proxy=self.client.get_proxy() if proxy is None else proxy,
|
||||||
max_tokens=max_tokens,
|
max_tokens=max_tokens,
|
||||||
|
|
|
||||||
|
|
@ -1018,7 +1018,7 @@ a:-webkit-any-link {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
color: var(--colour-3);
|
color: var(--colour-3);
|
||||||
min-height: 50px;
|
min-height: 50px;
|
||||||
height: 50px;
|
height: 59px;
|
||||||
outline: none;
|
outline: none;
|
||||||
padding: var(--inner-gap) var(--section-gap);
|
padding: var(--inner-gap) var(--section-gap);
|
||||||
resize: vertical;
|
resize: vertical;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue