XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet
公开
关注 0 Fork 0 Star 1
返回提交历史

XFEstudio/gpt4free

Restored provider (g4f/Provider/nexra/NexraFluxPro.py)

e9d6ac56
kqlio67 <kqlio67@users.noreply.github.com>
提交于

代码差异

1 个文件 +33 -38
Modified g4f/Provider/nexra/NexraFluxPro.py +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}"