diff options
Diffstat (limited to 'g4f/Provider/Feedough.py')
-rw-r--r-- | g4f/Provider/Feedough.py | 82 |
1 files changed, 54 insertions, 28 deletions
diff --git a/g4f/Provider/Feedough.py b/g4f/Provider/Feedough.py index 2ce4561e..d35e30ee 100644 --- a/g4f/Provider/Feedough.py +++ b/g4f/Provider/Feedough.py @@ -1,17 +1,20 @@ from __future__ import annotations import json -from aiohttp import ClientSession +import asyncio +from aiohttp import ClientSession, TCPConnector +from urllib.parse import urlencode from ..typing import AsyncResult, Messages -from .base_provider import AsyncGeneratorProvider +from .base_provider import AsyncGeneratorProvider, ProviderModelMixin from .helper import format_prompt -class Feedough(AsyncGeneratorProvider): +class Feedough(AsyncGeneratorProvider, ProviderModelMixin): url = "https://www.feedough.com" + api_endpoint = "/wp-admin/admin-ajax.php" working = True - supports_gpt_35_turbo = True + default_model = '' @classmethod async def create_async_generator( @@ -22,31 +25,54 @@ class Feedough(AsyncGeneratorProvider): **kwargs ) -> AsyncResult: headers = { - "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36", - "Accept": "*/*", - "Accept-Language": "en-US,en;q=0.5", - "Accept-Encoding": "gzip, deflate, br", - "Referer": "https://www.feedough.com/ai-prompt-generator/", - "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8", - "Origin": "https://www.feedough.com", - "DNT": "1", - "Sec-GPC": "1", - "Connection": "keep-alive", - "Sec-Fetch-Dest": "empty", - "Sec-Fetch-Mode": "cors", - "Sec-Fetch-Site": "same-origin", - "TE": "trailers", + "accept": "*/*", + "accept-language": "en-US,en;q=0.9", + "content-type": "application/x-www-form-urlencoded;charset=UTF-8", + "dnt": "1", + "origin": cls.url, + "referer": f"{cls.url}/ai-prompt-generator/", + "sec-ch-ua": '"Not/A)Brand";v="8", "Chromium";v="126"', + "sec-ch-ua-mobile": "?0", + "sec-ch-ua-platform": '"Linux"', + "sec-fetch-dest": "empty", + "sec-fetch-mode": "cors", + "sec-fetch-site": "same-origin", + "user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36" } - async with ClientSession(headers=headers) as session: - prompt = format_prompt(messages) + + connector = TCPConnector(ssl=False) + + async with ClientSession(headers=headers, connector=connector) as session: data = { "action": "aixg_generate", - "prompt": prompt, + "prompt": format_prompt(messages), + "aixg_generate_nonce": "110c021031" } - async with session.post(f"{cls.url}/wp-admin/admin-ajax.php", data=data, proxy=proxy) as response: - response.raise_for_status() - response_text = await response.text() - response_json = json.loads(response_text) - if response_json["success"]: - message = response_json["data"]["message"] - yield message + + try: + async with session.post( + f"{cls.url}{cls.api_endpoint}", + data=urlencode(data), + proxy=proxy + ) as response: + response.raise_for_status() + response_text = await response.text() + try: + response_json = json.loads(response_text) + if response_json.get("success") and "data" in response_json: + message = response_json["data"].get("message", "") + yield message + except json.JSONDecodeError: + yield response_text + except Exception as e: + print(f"An error occurred: {e}") + + @classmethod + async def run(cls, *args, **kwargs): + async for item in cls.create_async_generator(*args, **kwargs): + yield item + + tasks = asyncio.all_tasks() + for task in tasks: + if not task.done(): + await task |