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

XFEstudio/gpt4free

Update (g4f/models.py g4f/Provider/ docs/providers-and-models.md)

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

代码差异

18 个文件 +5 -1470
Modified docs/providers-and-models.md +0 -14
@@ -49,20 +49,6 @@ This document provides an overview of various AI providers and models, including
49 49 |[liaobots.work](https://liaobots.work)|`g4f.Provider.Liaobots`|`gpt-3.5-turbo, gpt-4o-mini, gpt-4o, gpt-4-turbo, grok-2, grok-2-mini, claude-3-opus, claude-3-sonnet, claude-3-5-sonnet, claude-3-haiku, claude-2.1, gemini-flash, gemini-pro`|❌|❌|✔|![Active](https://img.shields.io/badge/Active-brightgreen)|❌|
50 50 |[magickpen.com](https://magickpen.com)|`g4f.Provider.MagickPen`|`gpt-4o-mini`|❌|❌|✔|![Active](https://img.shields.io/badge/Active-brightgreen)|❌|
51 51 |[meta.ai](https://www.meta.ai)|`g4f.Provider.MetaAI`|✔|✔|?|?|![Active](https://img.shields.io/badge/Active-brightgreen)|✔|
52 |[nexra.aryahcr.cc/bing](https://nexra.aryahcr.cc/documentation/bing/en)|`g4f.Provider.NexraBing`|✔|❌|❌|✔|![Disabled](https://img.shields.io/badge/Disabled-red)|❌|
53 |[nexra.aryahcr.cc/blackbox](https://nexra.aryahcr.cc/documentation/blackbox/en)|`g4f.Provider.NexraBlackbox`|`blackboxai` |❌|❌|✔|![Active](https://img.shields.io/badge/Active-brightgreen)|❌|
54 |[nexra.aryahcr.cc/chatgpt](https://nexra.aryahcr.cc/documentation/chatgpt/en)|`g4f.Provider.NexraChatGPT`|`gpt-4, gpt-3.5-turbo, gpt-3, gpt-4o` |❌|❌|✔|![Active](https://img.shields.io/badge/Active-brightgreen)|❌|
55 |[nexra.aryahcr.cc/dall-e](https://nexra.aryahcr.cc/documentation/dall-e/en)|`g4f.Provider.NexraDallE`|❌|`dalle`|❌|❌|![Active](https://img.shields.io/badge/Active-brightgreen)|❌|
56 |[nexra.aryahcr.cc/dall-e](https://nexra.aryahcr.cc/documentation/dall-e/en)|`g4f.Provider.NexraDallE2`|❌|`dalle-2`|❌|❌|![Active](https://img.shields.io/badge/Active-brightgreen)|❌|
57 |[nexra.aryahcr.cc/emi](https://nexra.aryahcr.cc/documentation/emi/en)|`g4f.Provider.NexraEmi`|❌|`emi`|❌|❌|![Active](https://img.shields.io/badge/Active-brightgreen)|❌|
58 |[nexra.aryahcr.cc/flux-pro](https://nexra.aryahcr.cc/documentation/flux-pro/en)|`g4f.Provider.NexraFluxPro`|❌|`flux-pro`|❌|❌|![Active](https://img.shields.io/badge/Active-brightgreen)|❌|
59 |[nexra.aryahcr.cc/gemini-pro](https://nexra.aryahcr.cc/documentation/gemini-pro/en)|`g4f.Provider.NexraGeminiPro`|`gemini-pro`|❌|❌|❌|![Active](https://img.shields.io/badge/Active-brightgreen)|❌|
60 |[nexra.aryahcr.cc/midjourney](https://nexra.aryahcr.cc/documentation/midjourney/en)|`g4f.Provider.NexraMidjourney`|❌|`midjourney`|❌|❌|![Active](https://img.shields.io/badge/Active-brightgreen)|❌|
61 |[nexra.aryahcr.cc/prodia](https://nexra.aryahcr.cc/documentation/prodia/en)|`g4f.Provider.NexraProdiaAI`|❌|✔|❌|❌|![Active](https://img.shields.io/badge/Active-brightgreen)|❌|
62 |[nexra.aryahcr.cc/qwen](https://nexra.aryahcr.cc/documentation/qwen/en)|`g4f.Provider.NexraQwen`|`qwen`|❌|❌|✔|![Active](https://img.shields.io/badge/Active-brightgreen)|❌|
63 |[nexra.aryahcr.cc/stable-diffusion](https://nexra.aryahcr.cc/documentation/stable-diffusion/en)|`g4f.Provider.NexraSD15`|❌|`sd-1.5`|❌|❌|![Active](https://img.shields.io/badge/Active-brightgreen)|❌
64 |[nexra.aryahcr.cc/stable-diffusion](https://nexra.aryahcr.cc/documentation/stable-diffusion/en)|`g4f.Provider.NexraSDLora`|❌|`sdxl-lora`|❌|❌|![Active](https://img.shields.io/badge/Active-brightgreen)|❌
65 |[nexra.aryahcr.cc/stable-diffusion](https://nexra.aryahcr.cc/documentation/stable-diffusion/en)|`g4f.Provider.NexraSDTurbo`|❌|`sdxl-turbo`|❌|❌|![Active](https://img.shields.io/badge/Active-brightgreen)|❌
66 52 |[platform.openai.com](https://platform.openai.com/)|`g4f.Provider.Openai`|✔|❌|✔||![Unknown](https://img.shields.io/badge/Unknown-grey)|✔|
67 53 |[chatgpt.com](https://chatgpt.com/)|`g4f.Provider.OpenaiChat`|`gpt-4o, gpt-4o-mini, gpt-4`|❌|✔||![Unknown](https://img.shields.io/badge/Unknown-grey)|✔|
68 54 |[www.perplexity.ai)](https://www.perplexity.ai)|`g4f.Provider.PerplexityAi`|✔|❌|❌|?|![Disabled](https://img.shields.io/badge/Disabled-red)|❌|
Modified g4f/Provider/__init__.py +0 -2
@@ -11,8 +11,6 @@ from .needs_auth import *
11 11 from .not_working import *
12 12 from .local import *
13 13
14 from .nexra import *
15
16 14 from .AI365VIP import AI365VIP
17 15 from .AIChatFree import AIChatFree
18 16 from .AIUncensored import AIUncensored
Deleted g4f/Provider/nexra/NexraBing.py +0 -93
@@ -1,93 +0,0 @@
1 from __future__ import annotations
2
3 import json
4 import requests
5
6 from ...typing import CreateResult, Messages
7 from ..base_provider import ProviderModelMixin, AbstractProvider
8 from ..helper import format_prompt
9
10 class NexraBing(AbstractProvider, ProviderModelMixin):
11 label = "Nexra Bing"
12 url = "https://nexra.aryahcr.cc/documentation/bing/en"
13 api_endpoint = "https://nexra.aryahcr.cc/api/chat/complements"
14 working = True
15 supports_stream = True
16
17 default_model = 'Balanced'
18 models = [default_model, 'Creative', 'Precise']
19
20 model_aliases = {
21 "gpt-4": "Balanced",
22 "gpt-4": "Creative",
23 "gpt-4": "Precise",
24 }
25
26 @classmethod
27 def get_model(cls, model: str) -> str:
28 if model in cls.models:
29 return model
30 elif model in cls.model_aliases:
31 return cls.model_aliases[model]
32 else:
33 return cls.default_model
34
35 @classmethod
36 def create_completion(
37 cls,
38 model: str,
39 messages: Messages,
40 stream: bool = False,
41 proxy: str = None,
42 markdown: bool = False,
43 **kwargs
44 ) -> CreateResult:
45 model = cls.get_model(model)
46
47 headers = {
48 'Content-Type': 'application/json'
49 }
50
51 data = {
52 "messages": [
53 {
54 "role": "user",
55 "content": format_prompt(messages)
56 }
57 ],
58 "conversation_style": model,
59 "markdown": markdown,
60 "stream": stream,
61 "model": "Bing"
62 }
63
64 response = requests.post(cls.api_endpoint, headers=headers, json=data, stream=True)
65
66 return cls.process_response(response)
67
68 @classmethod
69 def process_response(cls, response):
70 if response.status_code != 200:
71 yield f"Error: {response.status_code}"
72 return
73
74 full_message = ""
75 for chunk in response.iter_content(chunk_size=None):
76 if chunk:
77 messages = chunk.decode('utf-8').split('\x1e')
78 for message in messages:
79 try:
80 json_data = json.loads(message)
81 if json_data.get('finish', False):
82 return
83 current_message = json_data.get('message', '')
84 if current_message:
85 new_content = current_message[len(full_message):]
86 if new_content:
87 yield new_content
88 full_message = current_message
89 except json.JSONDecodeError:
90 continue
91
92 if not full_message:
93 yield "No message received"
Deleted g4f/Provider/nexra/NexraBlackbox.py +0 -100
@@ -1,100 +0,0 @@
1 from __future__ import annotations
2
3 import json
4 import requests
5
6 from ...typing import CreateResult, Messages
7 from ..base_provider import ProviderModelMixin, AbstractProvider
8 from ..helper import format_prompt
9
10 class NexraBlackbox(AbstractProvider, ProviderModelMixin):
11 label = "Nexra Blackbox"
12 url = "https://nexra.aryahcr.cc/documentation/blackbox/en"
13 api_endpoint = "https://nexra.aryahcr.cc/api/chat/complements"
14 working = True
15 supports_stream = True
16
17 default_model = "blackbox"
18 models = [default_model]
19 model_aliases = {"blackboxai": "blackbox",}
20
21 @classmethod
22 def get_model(cls, model: str) -> str:
23 if model in cls.models:
24 return model
25 elif model in cls.model_aliases:
26 return cls.model_aliases[model]
27 else:
28 return cls.default_model
29
30 @classmethod
31 def create_completion(
32 cls,
33 model: str,
34 messages: Messages,
35 stream: bool,
36 proxy: str = None,
37 markdown: bool = False,
38 websearch: bool = False,
39 **kwargs
40 ) -> CreateResult:
41 model = cls.get_model(model)
42
43 headers = {
44 'Content-Type': 'application/json'
45 }
46
47 data = {
48 "messages": [
49 {
50 "role": "user",
51 "content": format_prompt(messages)
52 }
53 ],
54 "websearch": websearch,
55 "stream": stream,
56 "markdown": markdown,
57 "model": model
58 }
59
60 response = requests.post(cls.api_endpoint, headers=headers, json=data, stream=stream)
61
62 if stream:
63 return cls.process_streaming_response(response)
64 else:
65 return cls.process_non_streaming_response(response)
66
67 @classmethod
68 def process_non_streaming_response(cls, response):
69 if response.status_code == 200:
70 try:
71 full_response = ""
72 for line in response.iter_lines(decode_unicode=True):
73 if line:
74 data = json.loads(line)
75 if data.get('finish'):
76 break
77 message = data.get('message', '')
78 if message:
79 full_response = message
80 return full_response
81 except json.JSONDecodeError:
82 return "Error: Unable to decode JSON response"
83 else:
84 return f"Error: {response.status_code}"
85
86 @classmethod
87 def process_streaming_response(cls, response):
88 previous_message = ""
89 for line in response.iter_lines(decode_unicode=True):
90 if line:
91 try:
92 data = json.loads(line)
93 if data.get('finish'):
94 break
95 message = data.get('message', '')
96 if message and message != previous_message:
97 yield message[len(previous_message):]
98 previous_message = message
99 except json.JSONDecodeError:
100 pass
Deleted g4f/Provider/nexra/NexraChatGPT.py +0 -285
@@ -1,285 +0,0 @@
1 from __future__ import annotations
2
3 import asyncio
4 import json
5 import requests
6 from typing import Any, Dict
7
8 from ...typing import AsyncResult, Messages
9 from ..base_provider import AsyncGeneratorProvider, ProviderModelMixin
10 from ..helper import format_prompt
11
12
13 class NexraChatGPT(AsyncGeneratorProvider, ProviderModelMixin):
14 label = "Nexra ChatGPT"
15 url = "https://nexra.aryahcr.cc/documentation/chatgpt/en"
16 api_endpoint_nexra_chatgpt = "https://nexra.aryahcr.cc/api/chat/gpt"
17 api_endpoint_nexra_chatgpt4o = "https://nexra.aryahcr.cc/api/chat/complements"
18 api_endpoint_nexra_chatgpt_v2 = "https://nexra.aryahcr.cc/api/chat/complements"
19 api_endpoint_nexra_gptweb = "https://nexra.aryahcr.cc/api/chat/gptweb"
20 working = True
21 supports_system_message = True
22 supports_message_history = True
23 supports_stream = True
24
25 default_model = 'gpt-3.5-turbo'
26 nexra_chatgpt = [
27 'gpt-4', 'gpt-4-0613', 'gpt-4-0314', 'gpt-4-32k-0314',
28 default_model, 'gpt-3.5-turbo-16k', 'gpt-3.5-turbo-0613', 'gpt-3.5-turbo-16k-0613', 'gpt-3.5-turbo-0301',
29 'text-davinci-003', 'text-davinci-002', 'code-davinci-002', 'gpt-3', 'text-curie-001', 'text-babbage-001', 'text-ada-001', 'davinci', 'curie', 'babbage', 'ada', 'babbage-002', 'davinci-002'
30 ]
31 nexra_chatgpt4o = ['gpt-4o']
32 nexra_chatgptv2 = ['chatgpt']
33 nexra_gptweb = ['gptweb']
34 models = nexra_chatgpt + nexra_chatgpt4o + nexra_chatgptv2 + nexra_gptweb
35
36 model_aliases = {
37 "gpt-4": "gpt-4-0613",
38 "gpt-4-32k": "gpt-4-32k-0314",
39 "gpt-3.5-turbo": "gpt-3.5-turbo-16k",
40 "gpt-3.5-turbo-0613": "gpt-3.5-turbo-16k-0613",
41 "gpt-3": "text-davinci-003",
42 "text-davinci-002": "code-davinci-002",
43 "text-curie-001": "text-babbage-001",
44 "text-ada-001": "davinci",
45 "curie": "babbage",
46 "ada": "babbage-002",
47 "davinci-002": "davinci-002",
48 "chatgpt": "chatgpt",
49 "gptweb": "gptweb"
50 }
51
52 @classmethod
53 def get_model(cls, model: str) -> str:
54 if model in cls.models:
55 return model
56 elif model in cls.model_aliases:
57 return cls.model_aliases[model]
58 else:
59 return cls.default_model
60
61 @classmethod
62 async def create_async_generator(
63 cls,
64 model: str,
65 messages: Messages,
66 stream: bool = False,
67 proxy: str = None,
68 markdown: bool = False,
69 **kwargs
70 ) -> AsyncResult:
71 if model in cls.nexra_chatgpt:
72 async for chunk in cls._create_async_generator_nexra_chatgpt(model, messages, proxy, **kwargs):
73 yield chunk
74 elif model in cls.nexra_chatgpt4o:
75 async for chunk in cls._create_async_generator_nexra_chatgpt4o(model, messages, stream, proxy, markdown, **kwargs):
76 yield chunk
77 elif model in cls.nexra_chatgptv2:
78 async for chunk in cls._create_async_generator_nexra_chatgpt_v2(model, messages, stream, proxy, markdown, **kwargs):
79 yield chunk
80 elif model in cls.nexra_gptweb:
81 async for chunk in cls._create_async_generator_nexra_gptweb(model, messages, proxy, **kwargs):
82 yield chunk
83
84 @classmethod
85 async def _create_async_generator_nexra_chatgpt(
86 cls,
87 model: str,
88 messages: Messages,
89 proxy: str = None,
90 markdown: bool = False,
91 **kwargs
92 ) -> AsyncResult:
93 model = cls.get_model(model)
94
95 headers = {
96 "Content-Type": "application/json"
97 }
98
99 prompt = format_prompt(messages)
100 data = {
101 "messages": messages,
102 "prompt": prompt,
103 "model": model,
104 "markdown": markdown
105 }
106
107 loop = asyncio.get_event_loop()
108 try:
109 response = await loop.run_in_executor(None, cls._sync_post_request, cls.api_endpoint_nexra_chatgpt, data, headers, proxy)
110 filtered_response = cls._filter_response(response)
111
112 for chunk in filtered_response:
113 yield chunk
114 except Exception as e:
115 print(f"Error during API request (nexra_chatgpt): {e}")
116
117 @classmethod
118 async def _create_async_generator_nexra_chatgpt4o(
119 cls,
120 model: str,
121 messages: Messages,
122 stream: bool = False,
123 proxy: str = None,
124 markdown: bool = False,
125 **kwargs
126 ) -> AsyncResult:
127 model = cls.get_model(model)
128
129 headers = {
130 "Content-Type": "application/json"
131 }
132
133 prompt = format_prompt(messages)
134 data = {
135 "messages": [
136 {
137 "role": "user",
138 "content": prompt
139 }
140 ],
141 "stream": stream,
142 "markdown": markdown,
143 "model": model
144 }
145
146 loop = asyncio.get_event_loop()
147 try:
148 response = await loop.run_in_executor(None, cls._sync_post_request, cls.api_endpoint_nexra_chatgpt4o, data, headers, proxy, stream)
149
150 if stream:
151 async for chunk in cls._process_streaming_response(response):
152 yield chunk
153 else:
154 for chunk in cls._process_non_streaming_response(response):
155 yield chunk
156 except Exception as e:
157 print(f"Error during API request (nexra_chatgpt4o): {e}")
158
159 @classmethod
160 async def _create_async_generator_nexra_chatgpt_v2(
161 cls,
162 model: str,
163 messages: Messages,
164 stream: bool = False,
165 proxy: str = None,
166 markdown: bool = False,
167 **kwargs
168 ) -> AsyncResult:
169 model = cls.get_model(model)
170
171 headers = {
172 "Content-Type": "application/json"
173 }
174
175 prompt = format_prompt(messages)
176 data = {
177 "messages": [
178 {
179 "role": "user",
180 "content": prompt
181 }
182 ],
183 "stream": stream,
184 "markdown": markdown,
185 "model": model
186 }
187
188 loop = asyncio.get_event_loop()
189 try:
190 response = await loop.run_in_executor(None, cls._sync_post_request, cls.api_endpoint_nexra_chatgpt_v2, data, headers, proxy, stream)
191
192 if stream:
193 async for chunk in cls._process_streaming_response(response):
194 yield chunk
195 else:
196 for chunk in cls._process_non_streaming_response(response):
197 yield chunk
198 except Exception as e:
199 print(f"Error during API request (nexra_chatgpt_v2): {e}")
200
201 @classmethod
202 async def _create_async_generator_nexra_gptweb(
203 cls,
204 model: str,
205 messages: Messages,
206 proxy: str = None,
207 markdown: bool = False,
208 **kwargs
209 ) -> AsyncResult:
210 model = cls.get_model(model)
211
212 headers = {
213 "Content-Type": "application/json"
214 }
215
216 prompt = format_prompt(messages)
217 data = {
218 "prompt": prompt,
219 "markdown": markdown,
220 }
221
222 loop = asyncio.get_event_loop()
223 try:
224 response = await loop.run_in_executor(None, cls._sync_post_request, cls.api_endpoint_nexra_gptweb, data, headers, proxy)
225
226 for chunk in response.iter_content(1024):
227 if chunk:
228 decoded_chunk = chunk.decode().lstrip('_')
229 try:
230 response_json = json.loads(decoded_chunk)
231 if response_json.get("status"):
232 yield response_json.get("gpt", "")
233 except json.JSONDecodeError:
234 continue
235 except Exception as e:
236 print(f"Error during API request (nexra_gptweb): {e}")
237
238 @staticmethod
239 def _sync_post_request(url: str, data: Dict[str, Any], headers: Dict[str, str], proxy: str = None, stream: bool = False) -> requests.Response:
240 proxies = {
241 "http": proxy,
242 "https": proxy,
243 } if proxy else None
244
245 try:
246 response = requests.post(url, json=data, headers=headers, proxies=proxies, stream=stream)
247 response.raise_for_status()
248 return response
249 except requests.RequestException as e:
250 print(f"Request failed: {e}")
251 raise
252
253 @staticmethod
254 def _process_non_streaming_response(response: requests.Response) -> str:
255 if response.status_code == 200:
256 try:
257 content = response.text.lstrip('')
258 data = json.loads(content)
259 return data.get('message', '')
260 except json.JSONDecodeError:
261 return "Error: Unable to decode JSON response"
262 else:
263 return f"Error: {response.status_code}"
264
265 @staticmethod
266 async def _process_streaming_response(response: requests.Response):
267 full_message = ""
268 for line in response.iter_lines(decode_unicode=True):
269 if line:
270 try:
271 line = line.lstrip('')
272 data = json.loads(line)
273 if data.get('finish'):
274 break
275 message = data.get('message', '')
276 if message:
277 yield message[len(full_message):]
278 full_message = message
279 except json.JSONDecodeError:
280 pass
281
282 @staticmethod
283 def _filter_response(response: requests.Response) -> str:
284 response_json = response.json()
285 return response_json.get("gpt", "")
Deleted g4f/Provider/nexra/NexraDallE.py +0 -63
@@ -1,63 +0,0 @@
1 from __future__ import annotations
2
3 import json
4 import requests
5 from ...typing import CreateResult, Messages
6 from ..base_provider import ProviderModelMixin, AbstractProvider
7 from ...image import ImageResponse
8
9 class NexraDallE(AbstractProvider, ProviderModelMixin):
10 label = "Nexra DALL-E"
11 url = "https://nexra.aryahcr.cc/documentation/dall-e/en"
12 api_endpoint = "https://nexra.aryahcr.cc/api/image/complements"
13 working = True
14
15 default_model = "dalle"
16 models = [default_model]
17
18 @classmethod
19 def get_model(cls, model: str) -> str:
20 return cls.default_model
21
22 @classmethod
23 def create_completion(
24 cls,
25 model: str,
26 messages: Messages,
27 proxy: str = None,
28 response: str = "url", # base64 or url
29 **kwargs
30 ) -> CreateResult:
31 model = cls.get_model(model)
32
33 headers = {
34 'Content-Type': 'application/json'
35 }
36
37 data = {
38 "prompt": messages[-1]["content"],
39 "model": model,
40 "response": response
41 }
42
43 response = requests.post(cls.api_endpoint, headers=headers, json=data)
44
45 result = cls.process_response(response)
46 yield result
47
48 @classmethod
49 def process_response(cls, response):
50 if response.status_code == 200:
51 try:
52 content = response.text.strip()
53 content = content.lstrip('_')
54 data = json.loads(content)
55 if data.get('status') and data.get('images'):
56 image_url = data['images'][0]
57 return ImageResponse(images=[image_url], alt="Generated Image")
58 else:
59 return "Error: No image URL found in the response"
60 except json.JSONDecodeError as e:
61 return f"Error: Unable to decode JSON response. Details: {str(e)}"
62 else:
63 return f"Error: {response.status_code}, Response: {response.text}"
Deleted g4f/Provider/nexra/NexraDallE2.py +0 -63
@@ -1,63 +0,0 @@
1 from __future__ import annotations
2
3 import json
4 import requests
5 from ...typing import CreateResult, Messages
6 from ..base_provider import ProviderModelMixin, AbstractProvider
7 from ...image import ImageResponse
8
9 class NexraDallE2(AbstractProvider, ProviderModelMixin):
10 label = "Nexra DALL-E 2"
11 url = "https://nexra.aryahcr.cc/documentation/dall-e/en"
12 api_endpoint = "https://nexra.aryahcr.cc/api/image/complements"
13 working = True
14
15 default_model = "dalle2"
16 models = [default_model]
17
18 @classmethod
19 def get_model(cls, model: str) -> str:
20 return cls.default_model
21
22 @classmethod
23 def create_completion(
24 cls,
25 model: str,
26 messages: Messages,
27 proxy: str = None,
28 response: str = "url", # base64 or url
29 **kwargs
30 ) -> CreateResult:
31 model = cls.get_model(model)
32
33 headers = {
34 'Content-Type': 'application/json'
35 }
36
37 data = {
38 "prompt": messages[-1]["content"],
39 "model": model,
40 "response": response
41 }
42
43 response = requests.post(cls.api_endpoint, headers=headers, json=data)
44
45 result = cls.process_response(response)
46 yield result
47
48 @classmethod
49 def process_response(cls, response):
50 if response.status_code == 200:
51 try:
52 content = response.text.strip()
53 content = content.lstrip('_')
54 data = json.loads(content)
55 if data.get('status') and data.get('images'):
56 image_url = data['images'][0]
57 return ImageResponse(images=[image_url], alt="Generated Image")
58 else:
59 return "Error: No image URL found in the response"
60 except json.JSONDecodeError as e:
61 return f"Error: Unable to decode JSON response. Details: {str(e)}"
62 else:
63 return f"Error: {response.status_code}, Response: {response.text}"
Deleted g4f/Provider/nexra/NexraEmi.py +0 -63
@@ -1,63 +0,0 @@
1 from __future__ import annotations
2
3 import json
4 import requests
5 from ...typing import CreateResult, Messages
6 from ..base_provider import ProviderModelMixin, AbstractProvider
7 from ...image import ImageResponse
8
9 class NexraEmi(AbstractProvider, ProviderModelMixin):
10 label = "Nexra Emi"
11 url = "https://nexra.aryahcr.cc/documentation/emi/en"
12 api_endpoint = "https://nexra.aryahcr.cc/api/image/complements"
13 working = True
14
15 default_model = "emi"
16 models = [default_model]
17
18 @classmethod
19 def get_model(cls, model: str) -> str:
20 return cls.default_model
21
22 @classmethod
23 def create_completion(
24 cls,
25 model: str,
26 messages: Messages,
27 proxy: str = None,
28 response: str = "url", # base64 or url
29 **kwargs
30 ) -> CreateResult:
31 model = cls.get_model(model)
32
33 headers = {
34 'Content-Type': 'application/json'
35 }
36
37 data = {
38 "prompt": messages[-1]["content"],
39 "model": model,
40 "response": response
41 }
42
43 response = requests.post(cls.api_endpoint, headers=headers, json=data)
44
45 result = cls.process_response(response)
46 yield result
47
48 @classmethod
49 def process_response(cls, response):
50 if response.status_code == 200:
51 try:
52 content = response.text.strip()
53 content = content.lstrip('_')
54 data = json.loads(content)
55 if data.get('status') and data.get('images'):
56 image_url = data['images'][0]
57 return ImageResponse(images=[image_url], alt="Generated Image")
58 else:
59 return "Error: No image URL found in the response"
60 except json.JSONDecodeError as e:
61 return f"Error: Unable to decode JSON response. Details: {str(e)}"
62 else:
63 return f"Error: {response.status_code}, Response: {response.text}"
Deleted g4f/Provider/nexra/NexraFluxPro.py +0 -70
@@ -1,70 +0,0 @@
1 from __future__ import annotations
2
3 import json
4 import requests
5 from ...typing import CreateResult, Messages
6 from ..base_provider import ProviderModelMixin, AbstractProvider
7 from ...image import ImageResponse
8
9 class NexraFluxPro(AbstractProvider, ProviderModelMixin):
10 url = "https://nexra.aryahcr.cc/documentation/flux-pro/en"
11 api_endpoint = "https://nexra.aryahcr.cc/api/image/complements"
12 working = True
13
14 default_model = 'flux'
15 models = [default_model]
16 model_aliases = {
17 "flux-pro": "flux",
18 }
19
20 @classmethod
21 def get_model(cls, model: str) -> str:
22 if model in cls.models:
23 return model
24 elif model in cls.model_aliases:
25 return cls.model_aliases[model]
26 else:
27 return cls.default_model
28
29 @classmethod
30 def create_completion(
31 cls,
32 model: str,
33 messages: Messages,
34 proxy: str = None,
35 response: str = "url", # base64 or url
36 **kwargs
37 ) -> CreateResult:
38 model = cls.get_model(model)
39
40 headers = {
41 'Content-Type': 'application/json'
42 }
43
44 data = {
45 "prompt": messages[-1]["content"],
46 "model": model,
47 "response": response
48 }
49
50 response = requests.post(cls.api_endpoint, headers=headers, json=data)
51
52 result = cls.process_response(response)
53 yield result
54
55 @classmethod
56 def process_response(cls, response):
57 if response.status_code == 200:
58 try:
59 content = response.text.strip()
60 content = content.lstrip('_')
61 data = json.loads(content)
62 if data.get('status') and data.get('images'):
63 image_url = data['images'][0]
64 return ImageResponse(images=[image_url], alt="Generated Image")
65 else:
66 return "Error: No image URL found in the response"
67 except json.JSONDecodeError as e:
68 return f"Error: Unable to decode JSON response. Details: {str(e)}"
69 else:
70 return f"Error: {response.status_code}, Response: {response.text}"
Deleted g4f/Provider/nexra/NexraGeminiPro.py +0 -86
@@ -1,86 +0,0 @@
1 from __future__ import annotations
2
3 import json
4 import requests
5
6 from ...typing import CreateResult, Messages
7 from ..base_provider import ProviderModelMixin, AbstractProvider
8 from ..helper import format_prompt
9
10 class NexraGeminiPro(AbstractProvider, ProviderModelMixin):
11 label = "Nexra Gemini PRO"
12 url = "https://nexra.aryahcr.cc/documentation/gemini-pro/en"
13 api_endpoint = "https://nexra.aryahcr.cc/api/chat/complements"
14 working = True
15 supports_stream = True
16
17 default_model = 'gemini-pro'
18 models = [default_model]
19
20 @classmethod
21 def get_model(cls, model: str) -> str:
22 return cls.default_model
23
24 @classmethod
25 def create_completion(
26 cls,
27 model: str,
28 messages: Messages,
29 stream: bool,
30 proxy: str = None,
31 markdown: bool = False,
32 **kwargs
33 ) -> CreateResult:
34 model = cls.get_model(model)
35
36 headers = {
37 'Content-Type': 'application/json'
38 }
39
40 data = {
41 "messages": [
42 {
43 "role": "user",
44 "content": format_prompt(messages)
45 }
46 ],
47 "stream": stream,
48 "markdown": markdown,
49 "model": model
50 }
51
52 response = requests.post(cls.api_endpoint, headers=headers, json=data, stream=stream)
53
54 if stream:
55 return cls.process_streaming_response(response)
56 else:
57 return cls.process_non_streaming_response(response)
58
59 @classmethod
60 def process_non_streaming_response(cls, response):
61 if response.status_code == 200:
62 try:
63 content = response.text.lstrip('')
64 data = json.loads(content)
65 return data.get('message', '')
66 except json.JSONDecodeError:
67 return "Error: Unable to decode JSON response"
68 else:
69 return f"Error: {response.status_code}"
70
71 @classmethod
72 def process_streaming_response(cls, response):
73 full_message = ""
74 for line in response.iter_lines(decode_unicode=True):
75 if line:
76 try:
77 line = line.lstrip('')
78 data = json.loads(line)
79 if data.get('finish'):
80 break
81 message = data.get('message', '')
82 if message:
83 yield message[len(full_message):]
84 full_message = message
85 except json.JSONDecodeError:
86 pass
Deleted g4f/Provider/nexra/NexraMidjourney.py +0 -63
@@ -1,63 +0,0 @@
1 from __future__ import annotations
2
3 import json
4 import requests
5 from ...typing import CreateResult, Messages
6 from ..base_provider import ProviderModelMixin, AbstractProvider
7 from ...image import ImageResponse
8
9 class NexraMidjourney(AbstractProvider, ProviderModelMixin):
10 label = "Nexra Midjourney"
11 url = "https://nexra.aryahcr.cc/documentation/midjourney/en"
12 api_endpoint = "https://nexra.aryahcr.cc/api/image/complements"
13 working = True
14
15 default_model = "midjourney"
16 models = [default_model]
17
18 @classmethod
19 def get_model(cls, model: str) -> str:
20 return cls.default_model
21
22 @classmethod
23 def create_completion(
24 cls,
25 model: str,
26 messages: Messages,
27 proxy: str = None,
28 response: str = "url", # base64 or url
29 **kwargs
30 ) -> CreateResult:
31 model = cls.get_model(model)
32
33 headers = {
34 'Content-Type': 'application/json'
35 }
36
37 data = {
38 "prompt": messages[-1]["content"],
39 "model": model,
40 "response": response
41 }
42
43 response = requests.post(cls.api_endpoint, headers=headers, json=data)
44
45 result = cls.process_response(response)
46 yield result
47
48 @classmethod
49 def process_response(cls, response):
50 if response.status_code == 200:
51 try:
52 content = response.text.strip()
53 content = content.lstrip('_')
54 data = json.loads(content)
55 if data.get('status') and data.get('images'):
56 image_url = data['images'][0]
57 return ImageResponse(images=[image_url], alt="Generated Image")
58 else:
59 return "Error: No image URL found in the response"
60 except json.JSONDecodeError as e:
61 return f"Error: Unable to decode JSON response. Details: {str(e)}"
62 else:
63 return f"Error: {response.status_code}, Response: {response.text}"
Deleted g4f/Provider/nexra/NexraProdiaAI.py +0 -151
Deleted g4f/Provider/nexra/NexraQwen.py +0 -86
@@ -1,86 +0,0 @@
1 from __future__ import annotations
2
3 import json
4 import requests
5
6 from ...typing import CreateResult, Messages
7 from ..base_provider import ProviderModelMixin, AbstractProvider
8 from ..helper import format_prompt
9
10 class NexraQwen(AbstractProvider, ProviderModelMixin):
11 label = "Nexra Qwen"
12 url = "https://nexra.aryahcr.cc/documentation/qwen/en"
13 api_endpoint = "https://nexra.aryahcr.cc/api/chat/complements"
14 working = True
15 supports_stream = True
16
17 default_model = 'qwen'
18 models = [default_model]
19
20 @classmethod
21 def get_model(cls, model: str) -> str:
22 return cls.default_model
23
24 @classmethod
25 def create_completion(
26 cls,
27 model: str,
28 messages: Messages,
29 stream: bool,
30 proxy: str = None,
31 markdown: bool = False,
32 **kwargs
33 ) -> CreateResult:
34 model = cls.get_model(model)
35
36 headers = {
37 'Content-Type': 'application/json'
38 }
39
40 data = {
41 "messages": [
42 {
43 "role": "user",
44 "content": format_prompt(messages)
45 }
46 ],
47 "stream": stream,
48 "markdown": markdown,
49 "model": model
50 }
51
52 response = requests.post(cls.api_endpoint, headers=headers, json=data, stream=stream)
53
54 if stream:
55 return cls.process_streaming_response(response)
56 else:
57 return cls.process_non_streaming_response(response)
58
59 @classmethod
60 def process_non_streaming_response(cls, response):
61 if response.status_code == 200:
62 try:
63 content = response.text.lstrip('')
64 data = json.loads(content)
65 return data.get('message', '')
66 except json.JSONDecodeError:
67 return "Error: Unable to decode JSON response"
68 else:
69 return f"Error: {response.status_code}"
70
71 @classmethod
72 def process_streaming_response(cls, response):
73 full_message = ""
74 for line in response.iter_lines(decode_unicode=True):
75 if line:
76 try:
77 line = line.lstrip('')
78 data = json.loads(line)
79 if data.get('finish'):
80 break
81 message = data.get('message', '')
82 if message is not None and message != full_message:
83 yield message[len(full_message):]
84 full_message = message
85 except json.JSONDecodeError:
86 pass
Deleted g4f/Provider/nexra/NexraSD15.py +0 -72
Deleted g4f/Provider/nexra/NexraSDLora.py +0 -69
Deleted g4f/Provider/nexra/NexraSDTurbo.py +0 -69
Deleted g4f/Provider/nexra/__init__.py +0 -14
Modified g4f/models.py +5 -107