Skip to content
This repository was archived by the owner on Mar 14, 2024. It is now read-only.

Commit dce6d6b

Browse files
authored
0.1.9.8
1 parent 50b6d44 commit dce6d6b

File tree

7 files changed

+43
-20
lines changed

7 files changed

+43
-20
lines changed

g4f/Provider/needs_auth/Bard.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@
88
from selenium.webdriver.common.keys import Keys
99

1010
from ...typing import CreateResult, Messages
11-
from ..base_provider import BaseProvider
11+
from ..base_provider import AbstractProvider
1212
from ..helper import format_prompt
1313
from ...webdriver import WebDriver, WebDriverSession
1414

15-
class Bard(BaseProvider):
15+
class Bard(AbstractProvider):
1616
url = "https://bard.google.com"
1717
working = True
1818
needs_auth = True

g4f/Provider/needs_auth/HuggingChat.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88
from ..base_provider import AsyncGeneratorProvider
99
from ..helper import format_prompt, get_cookies
1010

11+
map = {
12+
"openchat/openchat_3.5": "openchat/openchat-3.5-1210",
13+
}
1114

1215
class HuggingChat(AsyncGeneratorProvider):
1316
url = "https://huggingface.co/chat"
@@ -25,7 +28,10 @@ async def create_async_generator(
2528
cookies: dict = None,
2629
**kwargs
2730
) -> AsyncResult:
28-
model = model if model else cls.model
31+
if not model:
32+
model = cls.model
33+
elif model in map:
34+
model = map[model]
2935
if not cookies:
3036
cookies = get_cookies(".huggingface.co")
3137

@@ -47,14 +53,19 @@ async def create_async_generator(
4753
"web_search": web_search
4854
}
4955
async with session.post(f"{cls.url}/conversation/{conversation_id}", json=send, proxy=proxy) as response:
56+
first_token = True
5057
async for line in response.content:
5158
line = json.loads(line[:-1])
5259
if "type" not in line:
5360
raise RuntimeError(f"Response: {line}")
5461
elif line["type"] == "stream":
55-
yield line["token"]
62+
token = line["token"]
63+
if first_token:
64+
token = token.lstrip()
65+
first_token = False
66+
yield token
5667
elif line["type"] == "finalAnswer":
5768
break
5869

5970
async with session.delete(f"{cls.url}/conversation/{conversation_id}", proxy=proxy) as response:
60-
response.raise_for_status()
71+
response.raise_for_status()

g4f/Provider/needs_auth/OpenaiChat.py

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77
from selenium.webdriver.common.by import By
88
from selenium.webdriver.support.ui import WebDriverWait
99
from selenium.webdriver.support import expected_conditions as EC
10-
10+
1111
from ..base_provider import AsyncGeneratorProvider
12-
from ..helper import get_event_loop, format_prompt
12+
from ..helper import get_event_loop, format_prompt, get_cookies
1313
from ...webdriver import get_browser
1414
from ...typing import AsyncResult, Messages
1515
from ...requests import StreamSession
@@ -27,7 +27,7 @@ class OpenaiChat(AsyncGeneratorProvider):
2727
needs_auth = True
2828
supports_gpt_35_turbo = True
2929
supports_gpt_4 = True
30-
_access_token: str = None
30+
_cookies: dict = {}
3131

3232
@classmethod
3333
async def create(
@@ -72,6 +72,7 @@ async def create_async_generator(
7272
proxy: str = None,
7373
timeout: int = 120,
7474
access_token: str = None,
75+
cookies: dict = None,
7576
auto_continue: bool = False,
7677
history_disabled: bool = True,
7778
action: str = "next",
@@ -86,13 +87,18 @@ async def create_async_generator(
8687
raise ValueError(f"Model are not supported: {model}")
8788
if not parent_id:
8889
parent_id = str(uuid.uuid4())
90+
if not cookies:
91+
cookies = cls._cookies
8992
if not access_token:
90-
access_token = cls._access_token
93+
if not cookies:
94+
cls._cookies = cookies = get_cookies("chat.openai.com")
95+
if "access_token" in cookies:
96+
access_token = cookies["access_token"]
9197
if not access_token:
9298
login_url = os.environ.get("G4F_LOGIN_URL")
9399
if login_url:
94100
yield f"Please login: [ChatGPT]({login_url})\n\n"
95-
access_token = cls._access_token = await cls.browse_access_token(proxy)
101+
cls._cookies["access_token"] = access_token = await cls.browse_access_token(proxy)
96102
headers = {
97103
"Accept": "text/event-stream",
98104
"Authorization": f"Bearer {access_token}",
@@ -101,7 +107,8 @@ async def create_async_generator(
101107
proxies={"https": proxy},
102108
impersonate="chrome110",
103109
headers=headers,
104-
timeout=timeout
110+
timeout=timeout,
111+
cookies=dict([(name, value) for name, value in cookies.items() if name == "_puid"])
105112
) as session:
106113
end_turn = EndTurn()
107114
while not end_turn.is_end:
@@ -170,7 +177,12 @@ def browse() -> str:
170177
WebDriverWait(driver, 1200).until(
171178
EC.presence_of_element_located((By.ID, "prompt-textarea"))
172179
)
173-
javascript = "return (await (await fetch('/api/auth/session')).json())['accessToken']"
180+
javascript = """
181+
access_token = (await (await fetch('/api/auth/session')).json())['accessToken'];
182+
expires = new Date(); expires.setTime(expires.getTime() + 60 * 60 * 24 * 7); // One week
183+
document.cookie = 'access_token=' + access_token + ';expires=' + expires.toUTCString() + ';path=/';
184+
return access_token;
185+
"""
174186
return driver.execute_script(javascript)
175187
finally:
176188
driver.quit()

g4f/Provider/needs_auth/Poe.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import time
44

55
from ...typing import CreateResult, Messages
6-
from ..base_provider import BaseProvider
6+
from ..base_provider import AbstractProvider
77
from ..helper import format_prompt
88
from ...webdriver import WebDriver, WebDriverSession
99

@@ -20,7 +20,7 @@
2020
"palm": {"name": "Google-PaLM"},
2121
}
2222

23-
class Poe(BaseProvider):
23+
class Poe(AbstractProvider):
2424
url = "https://poe.com"
2525
working = True
2626
needs_auth = True

g4f/Provider/needs_auth/Raycast.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@
55
import requests
66

77
from ...typing import CreateResult, Messages
8-
from ..base_provider import BaseProvider
8+
from ..base_provider import AbstractProvider
99

1010

11-
class Raycast(BaseProvider):
11+
class Raycast(AbstractProvider):
1212
url = "https://raycast.com"
1313
supports_gpt_35_turbo = True
1414
supports_gpt_4 = True

g4f/Provider/needs_auth/Theb.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import time
44

55
from ...typing import CreateResult, Messages
6-
from ..base_provider import BaseProvider
6+
from ..base_provider import AbstractProvider
77
from ..helper import format_prompt
88
from ...webdriver import WebDriver, WebDriverSession
99

@@ -31,7 +31,7 @@
3131
"qwen-7b-chat": "Qwen 7B"
3232
}
3333

34-
class Theb(BaseProvider):
34+
class Theb(AbstractProvider):
3535
url = "https://beta.theb.ai"
3636
working = True
3737
supports_gpt_35_turbo = True

g4f/Provider/needs_auth/ThebApi.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import requests
44

55
from ...typing import Any, CreateResult, Messages
6-
from ..base_provider import BaseProvider
6+
from ..base_provider import AbstractProvider
77

88
models = {
99
"theb-ai": "TheB.AI",
@@ -29,7 +29,7 @@
2929
"qwen-7b-chat": "Qwen 7B"
3030
}
3131

32-
class ThebApi(BaseProvider):
32+
class ThebApi(AbstractProvider):
3333
url = "https://theb.ai"
3434
working = True
3535
needs_auth = True

0 commit comments

Comments
 (0)