返回提交历史
Modified
g4f/Provider/nexra/NexraChatGptWeb.py
+36
-41
XFEstudio/gpt4free
Restored providers (g4f/Provider/nexra/NexraChatGptWeb.py)
752cae2b
代码差异
1 个文件
+36
-41
@@ -1,27 +1,21 @@
1
1
from __future__ import annotations
2
2
3
from aiohttp import ClientSession, ContentTypeError
4
3
import json
4
import requests
5
5
6
from ...typing import AsyncResult, Messages
7
from ..base_provider import AsyncGeneratorProvider, ProviderModelMixin
6
from ...typing import CreateResult, Messages
7
from ..base_provider import ProviderModelMixin, AbstractProvider
8
8
from ..helper import format_prompt
9
9
10
11
class NexraChatGptWeb(AsyncGeneratorProvider, ProviderModelMixin):
10
class NexraChatGptWeb(AbstractProvider, ProviderModelMixin):
12
11
label = "Nexra ChatGPT Web"
13
12
url = "https://nexra.aryahcr.cc/documentation/chatgpt/en"
14
api_endpoint = "https://nexra.aryahcr.cc/api/chat/{}"
15
working = False
16
supports_stream = True
13
working = True
17
14
18
default_model = 'gptweb'
15
default_model = "gptweb"
19
16
models = [default_model]
20
21
model_aliases = {
22
"gpt-4": "gptweb",
23
}
24
17
model_aliases = {"gpt-4": "gptweb"}
18
api_endpoints = {"gptweb": "https://nexra.aryahcr.cc/api/chat/gptweb"}
25
19
26
20
@classmethod
27
21
def get_model(cls, model: str) -> str:
@@ -31,37 +25,38 @@ class NexraChatGptWeb(AsyncGeneratorProvider, ProviderModelMixin):
31
25
return cls.model_aliases[model]
32
26
else:
33
27
return cls.default_model
34
28
35
29
@classmethod
36
async def create_async_generator(
30
def create_completion(
37
31
cls,
38
32
model: str,
39
33
messages: Messages,
40
proxy: str = None,
41
markdown: bool = False,
42
34
**kwargs
43
) -> AsyncResult:
35
) -> CreateResult:
36
model = cls.get_model(model)
37
api_endpoint = cls.api_endpoints.get(model, cls.api_endpoints[cls.default_model])
38
44
39
headers = {
45
"Content-Type": "application/json"
40
'Content-Type': 'application/json'
46
41
}
47
async with ClientSession(headers=headers) as session:
48
prompt = format_prompt(messages)
49
data = {
50
"prompt": prompt,
51
"markdown": markdown
52
}
53
model = cls.get_model(model)
54
endpoint = cls.api_endpoint.format(model)
55
async with session.post(endpoint, json=data, proxy=proxy) as response:
56
response.raise_for_status()
57
response_text = await response.text()
58
59
# Remove leading underscore if present
60
if response_text.startswith('_'):
61
response_text = response_text[1:]
62
63
try:
64
response_data = json.loads(response_text)
65
yield response_data.get('gpt', response_text)
66
except json.JSONDecodeError:
67
yield response_text
42
43
data = {
44
"prompt": format_prompt(messages),
45
"markdown": False
46
}
47
48
response = requests.post(api_endpoint, headers=headers, json=data)
49
50
return cls.process_response(response)
51
52
@classmethod
53
def process_response(cls, response):
54
if response.status_code == 200:
55
try:
56
content = response.text.lstrip('_')
57
json_response = json.loads(content)
58
return json_response.get('gpt', '')
59
except json.JSONDecodeError:
60
return "Error: Unable to decode JSON response"
61
else:
62
return f"Error: {response.status_code}"