From 98895e5b09ea5e3f19b2263ddca028c7b296abb2 Mon Sep 17 00:00:00 2001 From: Heiner Lohaus Date: Sun, 1 Oct 2023 06:38:11 +0200 Subject: Update HuggingChat to new api Impersonate Aivvm Provider Add ChatForAi and FreeGpt Provider Update AItianhuSpace Provider Improve StreamRequest Support Update get_event_loop Helper --- g4f/Provider/ChatForAi.py | 62 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 g4f/Provider/ChatForAi.py (limited to 'g4f/Provider/ChatForAi.py') diff --git a/g4f/Provider/ChatForAi.py b/g4f/Provider/ChatForAi.py new file mode 100644 index 00000000..efb5478e --- /dev/null +++ b/g4f/Provider/ChatForAi.py @@ -0,0 +1,62 @@ +from __future__ import annotations + +import time, hashlib + +from ..typing import AsyncGenerator +from g4f.requests import AsyncSession +from .base_provider import AsyncGeneratorProvider + + +class ChatForAi(AsyncGeneratorProvider): + url = "https://chatforai.com" + supports_gpt_35_turbo = True + working = True + + @classmethod + async def create_async_generator( + cls, + model: str, + messages: list[dict[str, str]], + **kwargs + ) -> AsyncGenerator: + async with AsyncSession(impersonate="chrome107") as session: + conversation_id = f"id_{int(time.time())}" + prompt = messages[-1]["content"] + timestamp = int(time.time()) + data = { + "conversationId": conversation_id, + "conversationType": "chat_continuous", + "botId": "chat_continuous", + "globalSettings":{ + "baseUrl": "https://api.openai.com", + "model": model if model else "gpt-3.5-turbo", + "messageHistorySize": 5, + "temperature": 0.7, + "top_p": 1, + **kwargs + }, + "botSettings": {}, + "prompt": prompt, + "messages": messages, + "sign": generate_signature(timestamp, conversation_id, prompt), + "timestamp": timestamp + } + async with session.post(f"{cls.url}/api/handle/provider-openai", json=data) as response: + response.raise_for_status() + async for chunk in response.content.iter_any(): + yield chunk.decode() + + @classmethod + @property + def params(cls): + params = [ + ("model", "str"), + ("messages", "list[dict[str, str]]"), + ("stream", "bool"), + ] + param = ", ".join([": ".join(p) for p in params]) + return f"g4f.provider.{cls.__name__} supports: ({param})" + +def generate_signature(timestamp, id, prompt): + data = f"{timestamp}:{id}:{prompt}:6B46K4pt" + return hashlib.sha256(data.encode()).hexdigest() -- cgit v1.2.3 From eb0e2c6a93c3f21937457d13220ce2b7fca1f04a Mon Sep 17 00:00:00 2001 From: Heiner Lohaus Date: Mon, 2 Oct 2023 02:04:22 +0200 Subject: +Curl +Async +Stream Requests Update Model List --- g4f/Provider/ChatForAi.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'g4f/Provider/ChatForAi.py') diff --git a/g4f/Provider/ChatForAi.py b/g4f/Provider/ChatForAi.py index efb5478e..779799cf 100644 --- a/g4f/Provider/ChatForAi.py +++ b/g4f/Provider/ChatForAi.py @@ -3,7 +3,7 @@ from __future__ import annotations import time, hashlib from ..typing import AsyncGenerator -from g4f.requests import AsyncSession +from ..requests import StreamSession from .base_provider import AsyncGeneratorProvider @@ -19,7 +19,7 @@ class ChatForAi(AsyncGeneratorProvider): messages: list[dict[str, str]], **kwargs ) -> AsyncGenerator: - async with AsyncSession(impersonate="chrome107") as session: + async with StreamSession(impersonate="chrome107") as session: conversation_id = f"id_{int(time.time())}" prompt = messages[-1]["content"] timestamp = int(time.time()) @@ -43,7 +43,7 @@ class ChatForAi(AsyncGeneratorProvider): } async with session.post(f"{cls.url}/api/handle/provider-openai", json=data) as response: response.raise_for_status() - async for chunk in response.content.iter_any(): + async for chunk in response.iter_content(): yield chunk.decode() @classmethod -- cgit v1.2.3 From 88d2cbff099df00944ed6dfb6c73b1b5e8dfc7f9 Mon Sep 17 00:00:00 2001 From: Heiner Lohaus Date: Thu, 5 Oct 2023 05:13:37 +0200 Subject: Add AiAsk, Chatgpt4Online, ChatgptDemo and ChatgptX Provider Fix Bing, Liaobots and ChatgptAi Provider Add "gpt_35_long" model and custom timeout --- g4f/Provider/ChatForAi.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'g4f/Provider/ChatForAi.py') diff --git a/g4f/Provider/ChatForAi.py b/g4f/Provider/ChatForAi.py index 779799cf..47ac46f0 100644 --- a/g4f/Provider/ChatForAi.py +++ b/g4f/Provider/ChatForAi.py @@ -17,9 +17,10 @@ class ChatForAi(AsyncGeneratorProvider): cls, model: str, messages: list[dict[str, str]], + timeout: int = 30, **kwargs ) -> AsyncGenerator: - async with StreamSession(impersonate="chrome107") as session: + async with StreamSession(impersonate="chrome107", timeout=timeout) as session: conversation_id = f"id_{int(time.time())}" prompt = messages[-1]["content"] timestamp = int(time.time()) -- cgit v1.2.3 From af9ed889c11f2ca5f1df96c40f072012a68b5713 Mon Sep 17 00:00:00 2001 From: Heiner Lohaus Date: Fri, 6 Oct 2023 18:21:56 +0200 Subject: Fix timeout in create_async --- g4f/Provider/ChatForAi.py | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) (limited to 'g4f/Provider/ChatForAi.py') diff --git a/g4f/Provider/ChatForAi.py b/g4f/Provider/ChatForAi.py index 47ac46f0..86b29639 100644 --- a/g4f/Provider/ChatForAi.py +++ b/g4f/Provider/ChatForAi.py @@ -1,7 +1,5 @@ from __future__ import annotations -import time, hashlib - from ..typing import AsyncGenerator from ..requests import StreamSession from .base_provider import AsyncGeneratorProvider @@ -21,11 +19,9 @@ class ChatForAi(AsyncGeneratorProvider): **kwargs ) -> AsyncGenerator: async with StreamSession(impersonate="chrome107", timeout=timeout) as session: - conversation_id = f"id_{int(time.time())}" prompt = messages[-1]["content"] - timestamp = int(time.time()) data = { - "conversationId": conversation_id, + "conversationId": "temp", "conversationType": "chat_continuous", "botId": "chat_continuous", "globalSettings":{ @@ -39,8 +35,6 @@ class ChatForAi(AsyncGeneratorProvider): "botSettings": {}, "prompt": prompt, "messages": messages, - "sign": generate_signature(timestamp, conversation_id, prompt), - "timestamp": timestamp } async with session.post(f"{cls.url}/api/handle/provider-openai", json=data) as response: response.raise_for_status() @@ -56,8 +50,4 @@ class ChatForAi(AsyncGeneratorProvider): ("stream", "bool"), ] param = ", ".join([": ".join(p) for p in params]) - return f"g4f.provider.{cls.__name__} supports: ({param})" - -def generate_signature(timestamp, id, prompt): - data = f"{timestamp}:{id}:{prompt}:6B46K4pt" - return hashlib.sha256(data.encode()).hexdigest() + return f"g4f.provider.{cls.__name__} supports: ({param})" \ No newline at end of file -- cgit v1.2.3