diff options
author | Heiner Lohaus <heiner@lohaus.eu> | 2023-10-02 17:01:15 +0200 |
---|---|---|
committer | Heiner Lohaus <heiner@lohaus.eu> | 2023-10-02 17:01:15 +0200 |
commit | ff4d9ae584cd3e9eefee6642c2a5290b63351b0a (patch) | |
tree | 59b9e30e081b2e1c46b672bc95c5610186516885 /g4f/Provider/Phind.py | |
parent | ~ | g4f v-0.1.4.4 (diff) | |
download | gpt4free-ff4d9ae584cd3e9eefee6642c2a5290b63351b0a.tar gpt4free-ff4d9ae584cd3e9eefee6642c2a5290b63351b0a.tar.gz gpt4free-ff4d9ae584cd3e9eefee6642c2a5290b63351b0a.tar.bz2 gpt4free-ff4d9ae584cd3e9eefee6642c2a5290b63351b0a.tar.lz gpt4free-ff4d9ae584cd3e9eefee6642c2a5290b63351b0a.tar.xz gpt4free-ff4d9ae584cd3e9eefee6642c2a5290b63351b0a.tar.zst gpt4free-ff4d9ae584cd3e9eefee6642c2a5290b63351b0a.zip |
Diffstat (limited to 'g4f/Provider/Phind.py')
-rw-r--r-- | g4f/Provider/Phind.py | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/g4f/Provider/Phind.py b/g4f/Provider/Phind.py new file mode 100644 index 00000000..0db4e3c2 --- /dev/null +++ b/g4f/Provider/Phind.py @@ -0,0 +1,76 @@ +from __future__ import annotations + +import random +from datetime import datetime + +from ..typing import AsyncGenerator +from ..requests import StreamSession +from .base_provider import AsyncGeneratorProvider, format_prompt + + +class Phind(AsyncGeneratorProvider): + url = "https://www.phind.com" + working = True + supports_gpt_4 = True + + @classmethod + async def create_async_generator( + cls, + model: str, + messages: list[dict[str, str]], + proxy: str = None, + **kwargs + ) -> AsyncGenerator: + chars = 'abcdefghijklmnopqrstuvwxyz0123456789' + user_id = ''.join(random.choice(chars) for _ in range(24)) + data = { + "question": format_prompt(messages), + "webResults": [], + "options": { + "date": datetime.now().strftime("%d.%m.%Y"), + "language": "en", + "detailed": True, + "anonUserId": user_id, + "answerModel": "GPT-4", + "creativeMode": False, + "customLinks": [] + }, + "context":"" + } + headers = { + "Authority": cls.url, + "Accept": "application/json, text/plain, */*", + "Origin": cls.url, + "Referer": f"{cls.url}/" + } + async with StreamSession(headers=headers, timeout=(5, 180), proxies={"https": proxy}, impersonate="chrome107") as session: + async with session.post(f"{cls.url}/api/infer/answer", json=data) as response: + response.raise_for_status() + new_lines = 0 + async for line in response.iter_lines(): + if not line: + continue + if line.startswith(b"data: "): + line = line[6:] + if line.startswith(b"<PHIND_METADATA>"): + continue + if line: + if new_lines: + yield "".join(["\n" for _ in range(int(new_lines / 2))]) + new_lines = 0 + yield line.decode() + else: + new_lines += 1 + + + @classmethod + @property + def params(cls): + params = [ + ("model", "str"), + ("messages", "list[dict[str, str]]"), + ("stream", "bool"), + ("proxy", "str"), + ] + param = ", ".join([": ".join(p) for p in params]) + return f"g4f.provider.{cls.__name__} supports: ({param})" |