返回提交历史
Modified
g4f/Provider/nexra/NexraSD15.py
+36
-34
Modified
g4f/models.py
+9
-0
XFEstudio/gpt4free
Restored provider (g4f/Provider/nexra/NexraSD15.py)
144c7b49
代码差异
2 个文件
+45
-34
@@ -1,18 +1,16 @@
1
1
from __future__ import annotations
2
2
3
3
import json
4
from aiohttp import ClientSession
4
import requests
5
from ...typing import CreateResult, Messages
6
from ..base_provider import ProviderModelMixin, AbstractProvider
5
7
from ...image import ImageResponse
6
8
7
from ...typing import AsyncResult, Messages
8
from ..base_provider import AsyncGeneratorProvider, ProviderModelMixin
9
10
11
class NexraSD15(AsyncGeneratorProvider, ProviderModelMixin):
9
class NexraSD15(AbstractProvider, ProviderModelMixin):
12
10
label = "Nexra Stable Diffusion 1.5"
13
11
url = "https://nexra.aryahcr.cc/documentation/stable-diffusion/en"
14
12
api_endpoint = "https://nexra.aryahcr.cc/api/image/complements"
15
working = False
13
working = True
16
14
17
15
default_model = 'stablediffusion-1.5'
18
16
models = [default_model]
@@ -29,42 +27,46 @@ class NexraSD15(AsyncGeneratorProvider, ProviderModelMixin):
29
27
return cls.model_aliases[model]
30
28
else:
31
29
return cls.default_model
32
30
33
31
@classmethod
34
async def create_async_generator(
32
def create_completion(
35
33
cls,
36
34
model: str,
37
35
messages: Messages,
38
36
proxy: str = None,
39
37
response: str = "url", # base64 or url
40
38
**kwargs
41
) -> AsyncResult:
39
) -> CreateResult:
42
40
model = cls.get_model(model)
43
41
44
42
headers = {
45
"Content-Type": "application/json",
43
'Content-Type': 'application/json'
46
44
}
47
async with ClientSession(headers=headers) as session:
48
data = {
49
"prompt": messages,
50
"model": model,
51
"response": response
52
}
53
async with session.post(cls.api_endpoint, json=data, proxy=proxy) as response:
54
response.raise_for_status()
55
text_response = await response.text()
56
57
# Clean the response by removing unexpected characters
58
cleaned_response = text_response.strip('__')
45
46
data = {
47
"prompt": messages[-1]["content"],
48
"model": model,
49
"response": response
50
}
51
52
response = requests.post(cls.api_endpoint, headers=headers, json=data)
59
53
60
if not cleaned_response.strip():
61
raise ValueError("Received an empty response from the server.")
54
result = cls.process_response(response)
55
yield result
62
56
63
try:
64
json_response = json.loads(cleaned_response)
65
image_url = json_response.get("images", [])[0]
66
# Create an ImageResponse object
67
image_response = ImageResponse(images=image_url, alt="Generated Image")
68
yield image_response
69
except json.JSONDecodeError:
70
raise ValueError("Unable to decode JSON from the received text response.")
57
@classmethod
58
def process_response(cls, response):
59
if response.status_code == 200:
60
try:
61
content = response.text.strip()
62
content = content.lstrip('_')
63
data = json.loads(content)
64
if data.get('status') and data.get('images'):
65
image_url = data['images'][0]
66
return ImageResponse(images=[image_url], alt="Generated Image")
67
else:
68
return "Error: No image URL found in the response"
69
except json.JSONDecodeError as e:
70
return f"Error: Unable to decode JSON response. Details: {str(e)}"
71
else:
72
return f"Error: {response.status_code}, Response: {response.text}"
@@ -52,6 +52,7 @@ from .Provider import (
52
52
NexraGeminiPro,
53
53
NexraMidjourney,
54
54
NexraQwen,
55
NexraSD15,
55
56
OpenaiChat,
56
57
PerplexityLabs,
57
58
Pi,
@@ -740,6 +741,13 @@ sdxl = Model(
740
741
741
742
)
742
743
744
sd_1_5 = Model(
745
name = 'sd-1.5',
746
base_provider = 'Stability AI',
747
best_provider = NexraSD15
748
749
)
750
743
751
sd_3 = Model(
744
752
name = 'sd-3',
745
753
base_provider = 'Stability AI',
@@ -1095,6 +1103,7 @@ class ModelUtils:
1095
1103
1096
1104
### Stability AI ###
1097
1105
'sdxl': sdxl,
1106
'sd-1.5': sd_1_5,
1098
1107
'sd-3': sd_3,
1099
1108
1100
1109