summaryrefslogtreecommitdiffstats
path: root/g4f/Provider/AItianhu.py
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--g4f/Provider/AItianhu.py76
1 files changed, 48 insertions, 28 deletions
diff --git a/g4f/Provider/AItianhu.py b/g4f/Provider/AItianhu.py
index 0982d3c6..2e129896 100644
--- a/g4f/Provider/AItianhu.py
+++ b/g4f/Provider/AItianhu.py
@@ -1,43 +1,62 @@
from __future__ import annotations
import json
+from aiohttp import ClientSession, http
-import requests
+from ..typing import AsyncGenerator
+from .base_provider import AsyncGeneratorProvider, format_prompt
-from ..typing import Any, CreateResult
-from .base_provider import BaseProvider
-
-class AItianhu(BaseProvider):
- url = "https://www.aitianhu.com/"
- working = False
+class AItianhu(AsyncGeneratorProvider):
+ url = "https://www.aitianhu.com"
+ working = True
supports_gpt_35_turbo = True
- @staticmethod
- def create_completion(
+ @classmethod
+ async def create_async_generator(
+ cls,
model: str,
messages: list[dict[str, str]],
- stream: bool, **kwargs: Any) -> CreateResult:
-
- base = "\n".join(f"{message['role']}: {message['content']}" for message in messages)
- base += "\nassistant: "
-
+ proxy: str = None,
+ **kwargs
+ ) -> AsyncGenerator:
headers = {
- "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
+ "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/116.0",
+ "Accept": "application/json, text/plain, */*",
+ "Accept-Language": "de,en-US;q=0.7,en;q=0.3",
+ "Content-Type": "application/json",
+ "Origin": cls.url,
+ "Connection": "keep-alive",
+ "Referer": cls.url + "/",
+ "Sec-Fetch-Dest": "empty",
+ "Sec-Fetch-Mode": "cors",
+ "Sec-Fetch-Site": "same-origin",
}
- data: dict[str, Any] = {
- "prompt": base,
- "options": {},
- "systemMessage": "You are ChatGPT, a large language model trained by OpenAI. Follow the user's instructions carefully. Respond using markdown.",
- "temperature": kwargs.get("temperature", 0.8),
- "top_p": kwargs.get("top_p", 1),
- }
- url = "https://www.aitianhu.com/api/chat-process"
- response = requests.post(url, headers=headers, json=data)
- response.raise_for_status()
- lines = response.text.strip().split("\n")
- res = json.loads(lines[-1])
- yield res["text"]
+ async with ClientSession(
+ headers=headers,
+ version=http.HttpVersion10
+ ) 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
+ }
+ async with session.post(
+ cls.url + "/api/chat-process",
+ proxy=proxy,
+ json=data,
+ ssl=False,
+ ) as response:
+ response.raise_for_status()
+ async for line in response.content:
+ line = json.loads(line.decode('utf-8'))
+ token = line["detail"]["choices"][0]["delta"].get("content")
+ if token:
+ yield token
+
@classmethod
@property
@@ -46,6 +65,7 @@ class AItianhu(BaseProvider):
("model", "str"),
("messages", "list[dict[str, str]]"),
("stream", "bool"),
+ ("proxy", "str"),
("temperature", "float"),
("top_p", "int"),
]