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

XFEstudio/gpt4free

Updated (g4f/models.py)

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

代码差异

2 个文件 +46 -38
Modified g4f/Provider/nexra/NexraMidjourney.py +34 -38
@@ -1,66 +1,62 @@
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 NexraMidjourney(AsyncGeneratorProvider, ProviderModelMixin):
9 class NexraMidjourney(AbstractProvider, ProviderModelMixin):
12 10 label = "Nexra Midjourney"
13 11 url = "https://nexra.aryahcr.cc/documentation/midjourney/en"
14 12 api_endpoint = "https://nexra.aryahcr.cc/api/image/complements"
15 working = False
16
17 default_model = 'midjourney'
13 working = True
14
15 default_model = "midjourney"
18 16 models = [default_model]
19 17
20 18 @classmethod
21 19 def get_model(cls, model: str) -> str:
22 20 return cls.default_model
23
21
24 22 @classmethod
25 async def create_async_generator(
23 def create_completion(
26 24 cls,
27 25 model: str,
28 26 messages: Messages,
29 proxy: str = None,
30 27 response: str = "url", # base64 or url
31 28 **kwargs
32 ) -> AsyncResult:
33 # Retrieve the correct model to use
29 ) -> CreateResult:
34 30 model = cls.get_model(model)
35 31
36 # Format the prompt from the messages
37 prompt = messages[0]['content']
38
39 32 headers = {
40 "Content-Type": "application/json"
33 'Content-Type': 'application/json'
41 34 }
42 payload = {
43 "prompt": prompt,
35
36 data = {
37 "prompt": messages[-1]["content"],
44 38 "model": model,
45 39 "response": response
46 40 }
41
42 response = requests.post(cls.api_endpoint, headers=headers, json=data)
47 43
48 async with ClientSession(headers=headers) as session:
49 async with session.post(cls.api_endpoint, json=payload, proxy=proxy) as response:
50 response.raise_for_status()
51 text_data = await response.text()
44 result = cls.process_response(response)
45 yield result
52 46
53 try:
54 # Parse the JSON response
55 json_start = text_data.find('{')
56 json_data = text_data[json_start:]
57 data = json.loads(json_data)
58
59 # Check if the response contains images
60 if 'images' in data and len(data['images']) > 0:
61 image_url = data['images'][0]
62 yield ImageResponse(image_url, prompt)
63 else:
64 yield ImageResponse("No images found in the response.", prompt)
65 except json.JSONDecodeError:
66 yield ImageResponse("Failed to parse JSON. Response might not be in JSON format.", prompt)
47 @classmethod
48 def process_response(cls, response):
49 if response.status_code == 200:
50 try:
51 content = response.text.strip()
52 content = content.lstrip('_')
53 data = json.loads(content)
54 if data.get('status') and data.get('images'):
55 image_url = data['images'][0]
56 return ImageResponse(images=[image_url], alt="Generated Image")
57 else:
58 return "Error: No image URL found in the response"
59 except json.JSONDecodeError as e:
60 return f"Error: Unable to decode JSON response. Details: {str(e)}"
61 else:
62 return f"Error: {response.status_code}, Response: {response.text}"
Modified g4f/models.py +12 -0
@@ -50,6 +50,7 @@ from .Provider import (
50 50 NexraEmi,
51 51 NexraFluxPro,
52 52 NexraGeminiPro,
53 NexraMidjourney,
53 54 NexraQwen,
54 55 OpenaiChat,
55 56 PerplexityLabs,
@@ -835,6 +836,14 @@ dalle = Model(
835 836
836 837 )
837 838
839 ### Midjourney ###
840 midjourney = Model(
841 name = 'midjourney',
842 base_provider = 'Midjourney',
843 best_provider = NexraMidjourney
844
845 )
846
838 847 ### Other ###
839 848 emi = Model(
840 849 name = 'emi',
@@ -1109,6 +1118,9 @@ class ModelUtils:
1109 1118 'dalle': dalle,
1110 1119 'dalle-2': dalle_2,
1111 1120
1121 ### Midjourney ###
1122 'midjourney': midjourney,
1123
1112 1124
1113 1125 ### Other ###
1114 1126 'emi': emi,