diff options
Diffstat (limited to 'g4f/Provider/ChatgptFree.py')
-rw-r--r-- | g4f/Provider/ChatgptFree.py | 53 |
1 files changed, 33 insertions, 20 deletions
diff --git a/g4f/Provider/ChatgptFree.py b/g4f/Provider/ChatgptFree.py index ecba2878..8b7d04c4 100644 --- a/g4f/Provider/ChatgptFree.py +++ b/g4f/Provider/ChatgptFree.py @@ -5,6 +5,7 @@ from __future__ import annotations import re from aiohttp import ClientSession +from ..requests import StreamSession from ..typing import Messages from .base_provider import AsyncProvider from .helper import format_prompt, get_cookies @@ -13,7 +14,7 @@ from .helper import format_prompt, get_cookies class ChatgptFree(AsyncProvider): url = "https://chatgptfree.ai" supports_gpt_35_turbo = True - working = False + working = True _post_id = None _nonce = None @@ -23,40 +24,50 @@ class ChatgptFree(AsyncProvider): model: str, messages: Messages, proxy: str = None, + cookies: dict = None, **kwargs ) -> str: - cookies = get_cookies('chatgptfree.ai') + if not cookies: + cookies = get_cookies('chatgptfree.ai') + if not cookies: + raise RuntimeError(f"g4f.provider.{cls.__name__} requires cookies [refresh https://chatgptfree.ai on chrome]") + headers = { - "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/118.0", - "Accept": "*/*", - "Accept-Language": "de,en-US;q=0.7,en;q=0.3", - "Accept-Encoding": "gzip, deflate, br", - "Origin": cls.url, - "Alt-Used": "chatgptfree.ai", - "Connection": "keep-alive", - "Referer": f"{cls.url}/", - "Sec-Fetch-Dest": "empty", - "Sec-Fetch-Mode": "cors", - "Sec-Fetch-Site": "same-origin", - "Pragma": "no-cache", - "Cache-Control": "no-cache", - "TE": "trailers" + 'authority': 'chatgptfree.ai', + 'accept': '*/*', + 'accept-language': 'en,fr-FR;q=0.9,fr;q=0.8,es-ES;q=0.7,es;q=0.6,en-US;q=0.5,am;q=0.4,de;q=0.3', + 'origin': 'https://chatgptfree.ai', + 'referer': 'https://chatgptfree.ai/chat/', + 'sec-ch-ua': '"Chromium";v="118", "Google Chrome";v="118", "Not=A?Brand";v="99"', + 'sec-ch-ua-mobile': '?0', + 'sec-ch-ua-platform': '"macOS"', + 'sec-fetch-dest': 'empty', + 'sec-fetch-mode': 'cors', + 'sec-fetch-site': 'same-origin', + 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36', } - async with ClientSession(headers=headers) as session: + + async with StreamSession(headers=headers, + impersonate="chrome107", proxies={"https": proxy}, timeout=10) as session: + if not cls._nonce: - async with session.get(f"{cls.url}/", - proxy=proxy, cookies=cookies) as response: + async with session.get(f"{cls.url}/", cookies=cookies) as response: + response.raise_for_status() response = await response.text() + result = re.search(r'data-post-id="([0-9]+)"', response) if not result: raise RuntimeError("No post id found") cls._post_id = result.group(1) + result = re.search(r'data-nonce="(.*?)"', response) if not result: raise RuntimeError("No nonce found") + cls._nonce = result.group(1) + prompt = format_prompt(messages) data = { "_wpnonce": cls._nonce, @@ -66,6 +77,8 @@ class ChatgptFree(AsyncProvider): "message": prompt, "bot_id": "0" } - async with session.post(cls.url + "/wp-admin/admin-ajax.php", data=data, proxy=proxy) as response: + async with session.post(cls.url + "/wp-admin/admin-ajax.php", + data=data, cookies=cookies) as response: + response.raise_for_status() return (await response.json())["data"]
\ No newline at end of file |