diff --git a/g4f/Provider/AItianhuSpace.py b/g4f/Provider/AItianhuSpace.py index d316fc6f..a9a824cf 100644 --- a/g4f/Provider/AItianhuSpace.py +++ b/g4f/Provider/AItianhuSpace.py @@ -1,95 +1,128 @@ from __future__ import annotations -import random, json +import time +import random + +from ..typing import CreateResult, Messages +from .base_provider import BaseProvider +from .helper import WebDriver, format_prompt, get_browser from .. import debug -from ..typing import AsyncResult, Messages -from ..requests import StreamSession -from .base_provider import AsyncGeneratorProvider, format_prompt, get_cookies -domains = { - "gpt-3.5-turbo": "aitianhu.space", - "gpt-4": "aitianhu.website", -} - -class AItianhuSpace(AsyncGeneratorProvider): +class AItianhuSpace(BaseProvider): url = "https://chat3.aiyunos.top/" working = True supports_gpt_35_turbo = True + _domains = ["aitianhu.com", "aitianhu1.top"] @classmethod - async def create_async_generator(cls, - model: str, - messages: Messages, - proxy: str = None, - domain: str = None, - cookies: dict = None, - timeout: int = 10, **kwargs) -> AsyncResult: - + def create_completion( + cls, + model: str, + messages: Messages, + stream: bool, + domain: str = None, + proxy: str = None, + timeout: int = 120, + browser: WebDriver = None, + hidden_display: bool = True, + **kwargs + ) -> CreateResult: if not model: model = "gpt-3.5-turbo" - - elif model not in domains: - raise ValueError(f"Model are not supported: {model}") - if not domain: chars = 'abcdefghijklmnopqrstuvwxyz0123456789' rand = ''.join(random.choice(chars) for _ in range(6)) - domain = f"{rand}.{domains[model]}" - + domain = random.choice(cls._domains) + domain = f"{rand}.{domain}" if debug.logging: print(f"AItianhuSpace | using domain: {domain}") + url = f"https://{domain}" + prompt = format_prompt(messages) + if browser: + driver = browser + else: + if hidden_display: + driver, display = get_browser("", True, proxy) + else: + driver = get_browser("", False, proxy) - if not cookies: - cookies = get_cookies('.aitianhu.space') - if not cookies: - raise RuntimeError(f"g4f.provider.{cls.__name__} requires cookies [refresh https://{domain} on chrome]") + from selenium.webdriver.common.by import By + from selenium.webdriver.support.ui import WebDriverWait + from selenium.webdriver.support import expected_conditions as EC - url = f'https://{domain}' - async with StreamSession(proxies={"https": proxy}, - cookies=cookies, timeout=timeout, impersonate="chrome110", verify=False) as session: - - data = { - "prompt": format_prompt(messages), - "options": {}, - "systemMessage": "You are ChatGPT, a large language model trained by OpenAI. Follow the user's instructions carefully.", - "temperature": 0.8, - "top_p": 1, - **kwargs - } - headers = { - "Authority": url, - "Accept": "application/json, text/plain, */*", - "Origin": url, - "Referer": f"{url}/" - } - async with session.post(f"{url}/api/chat-process", json=data, headers=headers) as response: - response.raise_for_status() - async for line in response.iter_lines(): - if line == b"