From d116f043227f789d6582bc12f69ea4ee7a9330ea Mon Sep 17 00:00:00 2001 From: Heiner Lohaus Date: Mon, 2 Oct 2023 06:47:07 +0200 Subject: Fix: There is no current event loop in thread --- g4f/Provider/AItianhu.py | 36 +++++++++++++++++++++++++----------- g4f/Provider/AItianhuSpace.py | 3 ++- g4f/Provider/Aibn.py | 4 ++-- g4f/Provider/helper.py | 6 +++++- 4 files changed, 34 insertions(+), 15 deletions(-) (limited to 'g4f/Provider') diff --git a/g4f/Provider/AItianhu.py b/g4f/Provider/AItianhu.py index 0f01e536..42631d7e 100644 --- a/g4f/Provider/AItianhu.py +++ b/g4f/Provider/AItianhu.py @@ -1,24 +1,25 @@ from __future__ import annotations import json -from curl_cffi.requests import AsyncSession -from .base_provider import AsyncProvider, format_prompt +from ..typing import AsyncGenerator +from ..requests import StreamSession +from .base_provider import AsyncGeneratorProvider, format_prompt -class AItianhu(AsyncProvider): +class AItianhu(AsyncGeneratorProvider): url = "https://www.aitianhu.com" working = True supports_gpt_35_turbo = True @classmethod - async def create_async( + async def create_async_generator( cls, model: str, messages: list[dict[str, str]], proxy: str = None, **kwargs - ) -> str: + ) -> AsyncGenerator: data = { "prompt": format_prompt(messages), "options": {}, @@ -27,12 +28,25 @@ class AItianhu(AsyncProvider): "top_p": 1, **kwargs } - async with AsyncSession(proxies={"https": proxy}, impersonate="chrome107", verify=False) as session: - response = await session.post(cls.url + "/api/chat-process", json=data) - response.raise_for_status() - line = response.text.splitlines()[-1] - line = json.loads(line) - return line["text"] + headers = { + "Authority": cls.url, + "Accept": "application/json, text/plain, */*", + "Origin": cls.url, + "Referer": f"{cls.url}/" + } + async with StreamSession(headers=headers, proxies={"https": proxy}, impersonate="chrome107", verify=False) as session: + async with session.post(f"{cls.url}/api/chat-process", json=data) as response: + response.raise_for_status() + async for line in response.iter_lines(): + if b"platform's risk control" in line: + raise RuntimeError("Platform's Risk Control") + line = json.loads(line) + if "detail" in line: + content = line["detail"]["choices"][0]["delta"].get("content") + if content: + yield content + else: + raise RuntimeError(f"Response: {line}") @classmethod diff --git a/g4f/Provider/AItianhuSpace.py b/g4f/Provider/AItianhuSpace.py index 8805b1c0..a6bf9a58 100644 --- a/g4f/Provider/AItianhuSpace.py +++ b/g4f/Provider/AItianhuSpace.py @@ -2,6 +2,7 @@ from __future__ import annotations import random, json +from ..typing import AsyncGenerator from ..requests import StreamSession from .base_provider import AsyncGeneratorProvider, format_prompt @@ -22,7 +23,7 @@ class AItianhuSpace(AsyncGeneratorProvider): messages: list[dict[str, str]], stream: bool = True, **kwargs - ) -> str: + ) -> AsyncGenerator: if not model: model = "gpt-3.5-turbo" elif not model in domains: diff --git a/g4f/Provider/Aibn.py b/g4f/Provider/Aibn.py index fe278f84..df56189b 100644 --- a/g4f/Provider/Aibn.py +++ b/g4f/Provider/Aibn.py @@ -4,7 +4,7 @@ import time import hashlib from ..typing import AsyncGenerator -from ..requests import StreamRequest +from ..requests import StreamSession from .base_provider import AsyncGeneratorProvider @@ -20,7 +20,7 @@ class Aibn(AsyncGeneratorProvider): messages: list[dict[str, str]], **kwargs ) -> AsyncGenerator: - async with StreamRequest(impersonate="chrome107") as session: + async with StreamSession(impersonate="chrome107") as session: timestamp = int(time.time()) data = { "messages": messages, diff --git a/g4f/Provider/helper.py b/g4f/Provider/helper.py index 544c5a76..234cdaa1 100644 --- a/g4f/Provider/helper.py +++ b/g4f/Provider/helper.py @@ -21,7 +21,11 @@ def get_event_loop() -> AbstractEventLoop: try: asyncio.get_running_loop() except RuntimeError: - return asyncio.get_event_loop() + try: + return asyncio.get_event_loop() + except RuntimeError: + asyncio.set_event_loop(asyncio.new_event_loop()) + return asyncio.get_event_loop() try: event_loop = asyncio.get_event_loop() if not hasattr(event_loop.__class__, "_nest_patched"): -- cgit v1.2.3