返回提交历史
Modified
g4f/Provider/nexra/NexraFluxPro.py
+33
-38
XFEstudio/gpt4free
Restored provider (g4f/Provider/nexra/NexraFluxPro.py)
e9d6ac56
代码差异
1 个文件
+33
-38
@@ -1,19 +1,16 @@
1
1
from __future__ import annotations
2
2
3
from aiohttp import ClientSession
4
3
import json
5
6
from ...typing import AsyncResult, Messages
7
from ..base_provider import AsyncGeneratorProvider, ProviderModelMixin
4
import requests
5
from ...typing import CreateResult, Messages
6
from ..base_provider import ProviderModelMixin, AbstractProvider
8
7
from ...image import ImageResponse
9
8
10
11
class NexraFluxPro(AsyncGeneratorProvider, ProviderModelMixin):
12
label = "Nexra Flux PRO"
9
class NexraFluxPro(AbstractProvider, ProviderModelMixin):
13
10
url = "https://nexra.aryahcr.cc/documentation/flux-pro/en"
14
11
api_endpoint = "https://nexra.aryahcr.cc/api/image/complements"
15
working = False
16
12
working = True
13
17
14
default_model = 'flux'
18
15
models = [default_model]
19
16
model_aliases = {
@@ -28,47 +25,45 @@ class NexraFluxPro(AsyncGeneratorProvider, ProviderModelMixin):
28
25
return cls.model_aliases[model]
29
26
else:
30
27
return cls.default_model
31
28
32
29
@classmethod
33
async def create_async_generator(
30
def create_completion(
34
31
cls,
35
32
model: str,
36
33
messages: Messages,
37
proxy: str = None,
38
34
response: str = "url", # base64 or url
39
35
**kwargs
40
) -> AsyncResult:
41
# Retrieve the correct model to use
36
) -> CreateResult:
42
37
model = cls.get_model(model)
43
38
44
# Format the prompt from the messages
45
prompt = messages[0]['content']
46
47
39
headers = {
48
"Content-Type": "application/json"
40
'Content-Type': 'application/json'
49
41
}
50
payload = {
51
"prompt": prompt,
42
43
data = {
44
"prompt": messages[-1]["content"],
52
45
"model": model,
53
46
"response": response
54
47
}
48
49
response = requests.post(cls.api_endpoint, headers=headers, json=data)
55
50
56
async with ClientSession(headers=headers) as session:
57
async with session.post(cls.api_endpoint, json=payload, proxy=proxy) as response:
58
response.raise_for_status()
59
text_data = await response.text()
51
result = cls.process_response(response)
52
yield result
60
53
61
try:
62
# Parse the JSON response
63
json_start = text_data.find('{')
64
json_data = text_data[json_start:]
65
data = json.loads(json_data)
66
67
# Check if the response contains images
68
if 'images' in data and len(data['images']) > 0:
69
image_url = data['images'][0]
70
yield ImageResponse(image_url, prompt)
71
else:
72
yield ImageResponse("No images found in the response.", prompt)
73
except json.JSONDecodeError:
74
yield ImageResponse("Failed to parse JSON. Response might not be in JSON format.", prompt)
54
@classmethod
55
def process_response(cls, response):
56
if response.status_code == 200:
57
try:
58
content = response.text.strip()
59
content = content.lstrip('_')
60
data = json.loads(content)
61
if data.get('status') and data.get('images'):
62
image_url = data['images'][0]
63
return ImageResponse(images=[image_url], alt="Generated Image")
64
else:
65
return "Error: No image URL found in the response"
66
except json.JSONDecodeError as e:
67
return f"Error: Unable to decode JSON response. Details: {str(e)}"
68
else:
69
return f"Error: {response.status_code}, Response: {response.text}"