ka1kuk commited on
Commit
f5845e5
1 Parent(s): 6ea6f74

Update g4f/Provider/Providers/DeepAi.py

Browse files
Files changed (1) hide show
  1. g4f/Provider/Providers/DeepAi.py +80 -60
g4f/Provider/Providers/DeepAi.py CHANGED
@@ -1,75 +1,95 @@
1
  import os
2
- import requests
3
  import json
 
4
  import random
5
- import time
6
- import string
 
7
  from ...typing import sha256, Dict, get_type_hints
 
8
 
9
- url = "https://wewordle.org/gptapi/v1/android/turbo"
10
- model = ['gpt-3.5-turbo']
11
- supports_stream = False
12
  needs_auth = False
 
 
 
 
 
 
 
 
13
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
 
15
- def _create_completion(model: str, messages: list, stream: bool, **kwargs):
16
- base = ''
17
- for message in messages:
18
- base += '%s: %s\n' % (message['role'], message['content'])
19
- base += 'assistant:'
20
- # randomize user id and app id
21
- _user_id = ''.join(random.choices(
22
- f'{string.ascii_lowercase}{string.digits}', k=16))
23
- _app_id = ''.join(random.choices(
24
- f'{string.ascii_lowercase}{string.digits}', k=31))
25
- # make current date with format utc
26
- _request_date = time.strftime("%Y-%m-%dT%H:%M:%S.000Z", time.gmtime())
27
  headers = {
 
28
  'accept': '*/*',
29
- 'pragma': 'no-cache',
30
- 'Content-Type': 'application/json',
31
- 'Connection': 'keep-alive'
 
 
 
 
 
 
 
 
 
 
 
32
  }
33
- data = {
34
- "user": _user_id,
35
- "messages": [
36
- {"role": "user", "content": base}
37
- ],
38
- "subscriber": {
39
- "originalPurchaseDate": None,
40
- "originalApplicationVersion": None,
41
- "allPurchaseDatesMillis": {},
42
- "entitlements": {
43
- "active": {},
44
- "all": {}
45
- },
46
- "allPurchaseDates": {},
47
- "allExpirationDatesMillis": {},
48
- "allExpirationDates": {},
49
- "originalAppUserId": f"$RCAnonymousID:{_app_id}",
50
- "latestExpirationDate": None,
51
- "requestDate": _request_date,
52
- "latestExpirationDateMillis": None,
53
- "nonSubscriptionTransactions": [],
54
- "originalPurchaseDateMillis": None,
55
- "managementURL": None,
56
- "allPurchasedProductIdentifiers": [],
57
- "firstSeen": _request_date,
58
- "activeSubscriptions": []
59
- }
60
  }
61
- response = requests.post(url, headers=headers, data=json.dumps(data))
62
- if response.status_code == 200:
63
- _json = response.json()
64
- if 'message' in _json:
65
- message_content = _json['message']['content']
66
- message_content = message_content.replace('**assistant:** ', '')
67
- yield message_content
68
- else:
69
- print(f"Error Occurred::{response.status_code}")
70
- return None
71
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
72
 
73
  params = f'g4f.Providers.{os.path.basename(__file__)[:-3]} supports: ' + \
74
- '(%s)' % ', '.join(
75
- [f"{name}: {get_type_hints(_create_completion)[name].__name__}" for name in _create_completion.__code__.co_varnames[:_create_completion.__code__.co_argcount]])
 
1
  import os
2
+ import time
3
  import json
4
+ import uuid
5
  import random
6
+ import hashlib
7
+ import requests
8
+
9
  from ...typing import sha256, Dict, get_type_hints
10
+ from datetime import datetime
11
 
12
+ url: str = 'https://ai.ls'
13
+ model: str = 'gpt-3.5-turbo'
14
+ supports_stream = True
15
  needs_auth = False
16
+ working = True
17
+
18
+
19
+ class Utils:
20
+ def hash(json_data: Dict[str, str]) -> sha256:
21
+
22
+ secretKey: bytearray = bytearray([79, 86, 98, 105, 91, 84, 80, 78, 123, 83,
23
+ 35, 41, 99, 123, 51, 54, 37, 57, 63, 103, 59, 117, 115, 108, 41, 67, 76])
24
 
25
+ base_string: str = '%s:%s:%s:%s' % (
26
+ json_data['t'],
27
+ json_data['m'],
28
+ 'WI,2rU#_r:r~aF4aJ36[.Z(/8Rv93Rf',
29
+ len(json_data['m'])
30
+ )
31
+
32
+ return hashlib.sha256(base_string.encode()).hexdigest()
33
+
34
+ def format_timestamp(timestamp: int) -> str:
35
+
36
+ e = timestamp
37
+ n = e % 10
38
+ r = n + 1 if n % 2 == 0 else n
39
+ return str(e - n + r)
40
+ def getV():
41
+ crossref = requests.get("https://ai.ls"+ requests.get("https://ai.ls/?chat=1").text.split('crossorigin href="')[1].split('"')[0]).text.split('G4="')[1].split('"')[0]
42
+ return crossref
43
+
44
+ def _create_completion(model: str, messages: list, stream: bool = False, temperature: float = 0.6, **kwargs):
45
 
 
 
 
 
 
 
 
 
 
 
 
 
46
  headers = {
47
+ 'authority': 'api.caipacity.com',
48
  'accept': '*/*',
49
+ 'accept-language': 'en,fr-FR;q=0.9,fr;q=0.8,es-ES;q=0.7,es;q=0.6,en-US;q=0.5,am;q=0.4,de;q=0.3',
50
+ 'authorization': 'Bearer free',
51
+ 'client-id': str(uuid.uuid4()),
52
+ 'client-v': Utils.getV(),
53
+ 'content-type': 'application/json',
54
+ 'origin': 'https://ai.ls',
55
+ 'referer': 'https://ai.ls/',
56
+ 'sec-ch-ua': '"Not.A/Brand";v="8", "Chromium";v="114", "Google Chrome";v="114"',
57
+ 'sec-ch-ua-mobile': '?0',
58
+ 'sec-ch-ua-platform': '"Windows"',
59
+ 'sec-fetch-dest': 'empty',
60
+ 'sec-fetch-mode': 'cors',
61
+ 'sec-fetch-site': 'cross-site',
62
+ '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',
63
  }
64
+
65
+ params = {
66
+ 'full': 'false',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
67
  }
 
 
 
 
 
 
 
 
 
 
68
 
69
+ timestamp = Utils.format_timestamp(int(time.time() * 1000))
70
+
71
+ sig = {
72
+ 'd': datetime.now().strftime('%Y-%m-%d'),
73
+ 't': timestamp,
74
+ 's': Utils.hash({
75
+ 't': timestamp,
76
+ 'm': messages[-1]['content']})}
77
+
78
+ json_data = json.dumps(separators=(',', ':'), obj={
79
+ 'model': 'gpt-3.5-turbo',
80
+ 'temperature': temperature,
81
+ 'stream': True,
82
+ 'messages': messages} | sig)
83
+
84
+ response = requests.post('https://api.caipacity.com/v1/chat/completions',
85
+ headers=headers, data=json_data, stream=True)
86
+
87
+ for token in response.iter_lines():
88
+ if b'content' in token:
89
+ completion_chunk = json.loads(token.decode().replace('data: ', ''))
90
+ token = completion_chunk['choices'][0]['delta'].get('content')
91
+ if token != None:
92
+ yield token
93
 
94
  params = f'g4f.Providers.{os.path.basename(__file__)[:-3]} supports: ' + \
95
+ '(%s)' % ', '.join([f"{name}: {get_type_hints(_create_completion)[name].__name__}" for name in _create_completion.__code__.co_varnames[:_create_completion.__code__.co_argcount]])