summaryrefslogtreecommitdiffstats
path: root/g4f/Provider
diff options
context:
space:
mode:
authorTekky <98614666+xtekky@users.noreply.github.com>2023-10-10 16:29:51 +0200
committerGitHub <noreply@github.com>2023-10-10 16:29:51 +0200
commit26cd71c7f48f7d8417d1f0348d2d1f89636e54d6 (patch)
tree891c9e1aaf8fec34bac0b4031cfeb1ca8354e402 /g4f/Provider
parent ~ | g4f `v-0.1.5.7` (diff)
parentfix html (diff)
downloadgpt4free-26cd71c7f48f7d8417d1f0348d2d1f89636e54d6.tar
gpt4free-26cd71c7f48f7d8417d1f0348d2d1f89636e54d6.tar.gz
gpt4free-26cd71c7f48f7d8417d1f0348d2d1f89636e54d6.tar.bz2
gpt4free-26cd71c7f48f7d8417d1f0348d2d1f89636e54d6.tar.lz
gpt4free-26cd71c7f48f7d8417d1f0348d2d1f89636e54d6.tar.xz
gpt4free-26cd71c7f48f7d8417d1f0348d2d1f89636e54d6.tar.zst
gpt4free-26cd71c7f48f7d8417d1f0348d2d1f89636e54d6.zip
Diffstat (limited to 'g4f/Provider')
-rw-r--r--g4f/Provider/Aivvm.py64
-rw-r--r--g4f/Provider/Bing.py1
-rw-r--r--g4f/Provider/DeepAi.py45
3 files changed, 60 insertions, 50 deletions
diff --git a/g4f/Provider/Aivvm.py b/g4f/Provider/Aivvm.py
index 83495a22..05f12320 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,33 @@ 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)
}
+
+ data = dumps(json_data)
+
headers = {
- "Accept": "*/*",
- "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(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/",
+ "user-agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36"
}
- async with StreamSession(
- impersonate="chrome107",
- 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, data=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
@@ -73,4 +81,4 @@ class Aivvm(AsyncGeneratorProvider):
('temperature', 'float'),
]
param = ', '.join([': '.join(p) for p in params])
- return f'g4f.provider.{cls.__name__} supports: ({param})' \ No newline at end of file
+ return f'g4f.provider.{cls.__name__} supports: ({param})'
diff --git a/g4f/Provider/Bing.py b/g4f/Provider/Bing.py
index f8c6a87a..f1b50f7c 100644
--- a/g4f/Provider/Bing.py
+++ b/g4f/Provider/Bing.py
@@ -1,7 +1,6 @@
from __future__ import annotations
import random
-import uuid
import json
import os
import uuid
diff --git a/g4f/Provider/DeepAi.py b/g4f/Provider/DeepAi.py
index e1ee4446..2f7f15c4 100644
--- a/g4f/Provider/DeepAi.py
+++ b/g4f/Provider/DeepAi.py
@@ -22,29 +22,29 @@ class DeepAi(AsyncGeneratorProvider):
proxy: str = None,
**kwargs
) -> AsyncResult:
+ agent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36"
token_js = """
-var agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36'
+var agent = '""" + agent + """'
var a, b, c, d, e, h, f, l, g, k, m, n, r, x, C, E, N, F, T, O, P, w, D, G, Q, R, W, I, aa, fa, na, oa, ha, ba, X, ia, ja, ka, J, la, K, L, ca, S, U, M, ma, B, da, V, Y;
h = Math.round(1E11 * Math.random()) + "";
-f = function () {
- for (var p = [], q = 0; 64 > q;) p[q] = 0 | 4294967296 * Math.sin(++q % Math.PI);
-
- return function (t) {
- var v, y, H, ea = [v = 1732584193, y = 4023233417, ~v, ~y],
- Z = [],
- A = unescape(encodeURI(t)) + "\u0080",
- z = A.length;
- t = --z / 4 + 2 | 15;
- for (Z[--t] = 8 * z; ~z;) Z[z >> 2] |= A.charCodeAt(z) << 8 * z--;
- for (q = A = 0; q < t; q += 16) {
- for (z = ea; 64 > A; z = [H = z[3], v + ((H = z[0] + [v & y | ~v & H, H & v | ~H & y, v ^ y ^ H, y ^ (v | ~H)][z = A >> 4] + p[A] + ~~Z[q | [A, 5 * A + 1, 3 * A + 5, 7 * A][z] & 15]) << (z = [7, 12, 17, 22, 5, 9, 14, 20, 4, 11, 16, 23, 6, 10, 15, 21][4 * z + A++ % 4]) | H >>> -z), v, y]) v = z[1] | 0, y = z[2];
- for (A = 4; A;) ea[--A] += z[A]
- }
- for (t = ""; 32 > A;) t += (ea[A >> 3] >> 4 * (1 ^ A++) & 15).toString(16);
- return t.split("").reverse().join("")
- }
-}();
+f = function() {
+ for (var p = [], r = 0; 64 > r;) p[r] = 0 | 4294967296 * Math.sin(++r % Math.PI);
+ return function(z) {
+ var B, G, H, ca = [B = 1732584193, G = 4023233417, ~B, ~G],
+ X = [],
+ x = unescape(encodeURI(z)) + "\u0080",
+ v = x.length;
+ z = --v / 4 + 2 | 15;
+ for (X[--z] = 8 * v; ~v;) X[v >> 2] |= x.charCodeAt(v) << 8 * v--;
+ for (r = x = 0; r < z; r += 16) {
+ for (v = ca; 64 > x; v = [H = v[3], B + ((H = v[0] + [B & G | ~B & H, H & B | ~H & G, B ^ G ^ H, G ^ (B | ~H)][v = x >> 4] + p[x] + ~~X[r | [x, 5 * x + 1, 3 * x + 5, 7 * x][v] & 15]) << (v = [7, 12, 17, 22, 5, 9, 14, 20, 4, 11, 16, 23, 6, 10, 15, 21][4 * v + x++ % 4]) | H >>> -v), B, G]) B = v[1] | 0, G = v[2];
+ for (x = 4; x;) ca[--x] += v[x]
+ }
+ for (z = ""; 32 > x;) z += (ca[x >> 3] >> 4 * (1 ^ x++) & 15).toString(16);
+ return z.split("").reverse().join("")
+ }
+ }();
"tryit-" + h + "-" + f(agent + f(agent + f(agent + h + "x")));
"""
@@ -53,7 +53,7 @@ f = function () {
api_key = js2py.eval_js(token_js)
headers = {
"api-key": api_key,
- "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36",
+ "User-Agent": agent,
**kwargs.get("headers", {})
}
async with ClientSession(
@@ -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):