summaryrefslogtreecommitdiffstats
path: root/g4f
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--g4f/Provider/Aivvm.py59
-rw-r--r--g4f/Provider/DeepAi.py5
2 files changed, 36 insertions, 28 deletions
diff --git a/g4f/Provider/Aivvm.py b/g4f/Provider/Aivvm.py
index 3e4bbaeb..ac15ac16 100644
--- a/g4f/Provider/Aivvm.py
+++ b/g4f/Provider/Aivvm.py
@@ -1,8 +1,9 @@
from __future__ import annotations
+import requests
-from ..requests import StreamSession
-from .base_provider import AsyncGeneratorProvider
-from ..typing import AsyncResult, Messages
+from .base_provider import BaseProvider
+from ..typing import CreateResult
+from json import dumps
# to recreate this easily, send a post request to https://chat.aivvm.com/api/models
models = {
@@ -16,22 +17,20 @@ models = {
'gpt-4-32k-0613': {'id': 'gpt-4-32k-0613', 'name': 'GPT-4-32K-0613'},
}
-class Aivvm(AsyncGeneratorProvider):
+class Aivvm(BaseProvider):
url = 'https://chat.aivvm.com'
+ supports_stream = True
+ working = True
supports_gpt_35_turbo = True
supports_gpt_4 = True
- working = True
@classmethod
- async def create_async_generator(
- cls,
+ def create_completion(cls,
model: str,
- messages: Messages,
+ messages: list[dict[str, str]],
stream: bool,
- proxy: str = None,
- timeout: int = 120,
**kwargs
- ) -> AsyncResult:
+ ) -> CreateResult:
if not model:
model = "gpt-3.5-turbo"
elif model not in models:
@@ -44,24 +43,30 @@ class Aivvm(AsyncGeneratorProvider):
"prompt" : kwargs.get("system_message", "You are ChatGPT, a large language model trained by OpenAI. Follow the user's instructions carefully. Respond using markdown."),
"temperature" : kwargs.get("temperature", 0.7)
}
+
headers = {
- "Accept": "text/event-stream",
- "Origin": cls.url,
- "Referer": f"{cls.url}/",
+ "accept" : "text/event-stream",
+ "accept-language" : "en-US,en;q=0.9",
+ "content-type" : "application/json",
+ "content-length" : str(len(dumps(json_data))),
+ "sec-ch-ua" : "\"Chrome\";v=\"117\", \"Not;A=Brand\";v=\"8\", \"Chromium\";v=\"117\"",
+ "sec-ch-ua-mobile" : "?0",
+ "sec-ch-ua-platform": "\"Windows\"",
+ "sec-fetch-dest" : "empty",
+ "sec-fetch-mode" : "cors",
+ "sec-fetch-site" : "same-origin",
+ "sec-gpc" : "1",
+ "referrer" : "https://chat.aivvm.com/"
}
- async with StreamSession(
- impersonate="chrome117",
- headers=headers,
- proxies={"https": proxy},
- timeout=timeout
- ) as session:
- async with session.post(f"{cls.url}/api/chat", json=json_data) as response:
- response.raise_for_status()
- async for chunk in response.iter_content():
- if b'Access denied | chat.aivvm.com used Cloudflare' in chunk:
- raise ValueError("Rate Limit | use another provider")
-
- yield chunk.decode()
+
+ response = requests.post("https://chat.aivvm.com/api/chat", headers=headers, json=json_data, stream=True)
+ response.raise_for_status()
+
+ for chunk in response.iter_content():
+ try:
+ yield chunk.decode("utf-8")
+ except UnicodeDecodeError:
+ yield chunk.decode("unicode-escape")
@classmethod
@property
diff --git a/g4f/Provider/DeepAi.py b/g4f/Provider/DeepAi.py
index e1ee4446..abc2644a 100644
--- a/g4f/Provider/DeepAi.py
+++ b/g4f/Provider/DeepAi.py
@@ -65,7 +65,10 @@ f = function () {
response.raise_for_status()
async for stream in response.content.iter_any():
if stream:
- yield stream.decode()
+ try:
+ yield stream.decode("utf-8")
+ except UnicodeDecodeError:
+ yield stream.decode("unicode-escape")
def get_api_key(user_agent: str):