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

XFEstudio/gpt4free

feat(g4f/Provider/Nexra.py): enhance model handling and add new providers

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

代码差异

12 个文件 +533 -75
Modified docs/providers-and-models.md +1 -1
@@ -51,7 +51,7 @@
51 51 |[magickpen.com](https://magickpen.com)|`g4f.Provider.MagickPen`|`gpt-4o-mini`|❌|❌|✔|![Active](https://img.shields.io/badge/Active-brightgreen)|❌|
52 52 |[meta.ai](https://www.meta.ai)|`g4f.Provider.MetaAI`|✔|✔|?|?|![Active](https://img.shields.io/badge/Active-brightgreen)|✔|
53 53 |[app.myshell.ai/chat](https://app.myshell.ai/chat)|`g4f.Provider.MyShell`|✔|❌|?|?|![Disabled](https://img.shields.io/badge/Disabled-red)|❌|
54 |[aryahcr.cc](https://nexra.aryahcr.cc)|`g4f.Provider.Nexra`|`gpt-3, gpt-3.5-turbo, gpt-4`|`dalle, dalle-2, dalle-mini, emi`|❌|✔|![Active](https://img.shields.io/badge/Active-brightgreen)|❌|
54 |[aryahcr.cc](https://nexra.aryahcr.cc)|`g4f.Provider.Nexra`|`gpt-3, gpt-3.5-turbo, gpt-4, gpt-4o, gemini-pro, llama-3.1, qwen`|`dalle, dalle-2, dalle-mini, emi, sdxl-turbo, prodia`|❌|✔|![Active](https://img.shields.io/badge/Active-brightgreen)|❌|
55 55 |[openrouter.ai](https://openrouter.ai)|`g4f.Provider.OpenRouter`|✔|❌|?|?|![Disabled](https://img.shields.io/badge/Disabled-red)|❌|
56 56 |[platform.openai.com](https://platform.openai.com/)|`g4f.Provider.Openai`|✔|❌|✔||![Unknown](https://img.shields.io/badge/Unknown-grey)|✔|
57 57 |[chatgpt.com](https://chatgpt.com/)|`g4f.Provider.OpenaiChat`|`gpt-4o, gpt-4o-mini, gpt-4`|❌|✔||![Unknown](https://img.shields.io/badge/Unknown-grey)|✔|
Modified g4f/Provider/Nexra.py +60 -58
@@ -1,32 +1,49 @@
1 1 from __future__ import annotations
2 import json
3 from aiohttp import ClientSession
4 2
5 from ..typing import AsyncResult, Messages
3 from aiohttp import ClientSession
6 4 from .base_provider import AsyncGeneratorProvider, ProviderModelMixin
7 5 from .helper import format_prompt
8 from ..image import ImageResponse
6 from .nexra.NexraBing import NexraBing
7 from .nexra.NexraChatGPT import NexraChatGPT
8 from .nexra.NexraChatGPT4o import NexraChatGPT4o
9 from .nexra.NexraChatGPTWeb import NexraChatGPTWeb
10 from .nexra.NexraGeminiPro import NexraGeminiPro
11 from .nexra.NexraImageURL import NexraImageURL
12 from .nexra.NexraLlama import NexraLlama
13 from .nexra.NexraQwen import NexraQwen
9 14
10 15 class Nexra(AsyncGeneratorProvider, ProviderModelMixin):
11 16 url = "https://nexra.aryahcr.cc"
12 chat_api_endpoint = "https://nexra.aryahcr.cc/api/chat/gpt"
13 image_api_endpoint = "https://nexra.aryahcr.cc/api/image/complements"
14 17 working = True
15 18 supports_gpt_35_turbo = True
16 19 supports_gpt_4 = True
20 supports_stream = True
17 21 supports_system_message = True
18 22 supports_message_history = True
19
20 23 default_model = 'gpt-3.5-turbo'
21 text_models = [
22 'gpt-4', 'gpt-4-0613', 'gpt-4-32k', 'gpt-4-0314', 'gpt-4-32k-0314',
23 'gpt-3.5-turbo', 'gpt-3.5-turbo-16k', 'gpt-3.5-turbo-0613', 'gpt-3.5-turbo-16k-0613', 'gpt-3.5-turbo-0301',
24 'gpt-3', 'text-davinci-003', 'text-davinci-002', 'code-davinci-002',
25 'text-curie-001', 'text-babbage-001', 'text-ada-001',
26 'davinci', 'curie', 'babbage', 'ada', 'babbage-002', 'davinci-002',
27 ]
28 image_models = ['dalle', 'dalle2', 'dalle-mini', 'emi']
29 models = [*text_models, *image_models]
24 image_model = 'sdxl-turbo'
25
26 models = (
27 *NexraBing.models,
28 *NexraChatGPT.models,
29 *NexraChatGPT4o.models,
30 *NexraChatGPTWeb.models,
31 *NexraGeminiPro.models,
32 *NexraImageURL.models,
33 *NexraLlama.models,
34 *NexraQwen.models,
35 )
36
37 model_to_provider = {
38 **{model: NexraChatGPT for model in NexraChatGPT.models},
39 **{model: NexraChatGPT4o for model in NexraChatGPT4o.models},
40 **{model: NexraChatGPTWeb for model in NexraChatGPTWeb.models},
41 **{model: NexraGeminiPro for model in NexraGeminiPro.models},
42 **{model: NexraImageURL for model in NexraImageURL.models},
43 **{model: NexraLlama for model in NexraLlama.models},
44 **{model: NexraQwen for model in NexraQwen.models},
45 **{model: NexraBing for model in NexraBing.models},
46 }
30 47
31 48 model_aliases = {
32 49 "gpt-4": "gpt-4-0613",
@@ -53,18 +70,34 @@ class Nexra(AsyncGeneratorProvider, ProviderModelMixin):
53 70 "gpt-3": "babbage-002",
54 71 "gpt-3": "davinci-002",
55 72
73 "gpt-4": "gptweb",
74
75 "gpt-4": "Bing (Balanced)",
76 "gpt-4": "Bing (Creative)",
77 "gpt-4": "Bing (Precise)",
78
56 79 "dalle-2": "dalle2",
80 "sdxl": "sdxl-turbo",
57 81 }
58
82
83
59 84 @classmethod
60 85 def get_model(cls, model: str) -> str:
61 if model in cls.text_models or model in cls.image_models:
86 if model in cls.models:
62 87 return model
63 88 elif model in cls.model_aliases:
64 89 return cls.model_aliases[model]
65 90 else:
66 91 return cls.default_model
67 92
93 @classmethod
94 def get_api_endpoint(cls, model: str) -> str:
95 provider_class = cls.model_to_provider.get(model)
96
97 if provider_class:
98 return provider_class.api_endpoint
99 raise ValueError(f"API endpoint for model {model} not found.")
100
68 101 @classmethod
69 102 async def create_async_generator(
70 103 cls,
@@ -74,43 +107,12 @@ class Nexra(AsyncGeneratorProvider, ProviderModelMixin):
74 107 **kwargs
75 108 ) -> AsyncResult:
76 109 model = cls.get_model(model)
77
78 headers = {
79 "Content-Type": "application/json",
80 }
81
82 async with ClientSession(headers=headers) as session:
83 if model in cls.image_models:
84 # Image generation
85 prompt = messages[-1]['content'] if messages else ""
86 data = {
87 "prompt": prompt,
88 "model": model,
89 "response": "url"
90 }
91 async with session.post(cls.image_api_endpoint, json=data, proxy=proxy) as response:
92 response.raise_for_status()
93 result = await response.text()
94 result_json = json.loads(result.strip('_'))
95 image_url = result_json['images'][0] if result_json['images'] else None
96
97 if image_url:
98 yield ImageResponse(images=image_url, alt=prompt)
99 else:
100 # Text completion
101 data = {
102 "messages": messages,
103 "prompt": format_prompt(messages),
104 "model": model,
105 "markdown": False
106 }
107 async with session.post(cls.chat_api_endpoint, json=data, proxy=proxy) as response:
108 response.raise_for_status()
109 result = await response.text()
110
111 try:
112 json_response = json.loads(result)
113 gpt_response = json_response.get('gpt', '')
114 yield gpt_response
115 except json.JSONDecodeError:
116 yield result
110 api_endpoint = cls.get_api_endpoint(model)
111
112 provider_class = cls.model_to_provider.get(model)
113
114 if provider_class:
115 async for response in provider_class.create_async_generator(model, messages, proxy, **kwargs):
116 yield response
117 else:
118 raise ValueError(f"Provider for model {model} not found.")
Added g4f/Provider/nexra/NexraBing.py +82 -0
@@ -0,0 +1,82 @@
1 from __future__ import annotations
2 from aiohttp import ClientSession
3 from ...typing import AsyncResult, Messages
4 from ..base_provider import AsyncGeneratorProvider, ProviderModelMixin
5 from ..helper import format_prompt
6 import json
7
8 class NexraBing(AsyncGeneratorProvider, ProviderModelMixin):
9 label = "Nexra Bing"
10 api_endpoint = "https://nexra.aryahcr.cc/api/chat/complements"
11
12 bing_models = {
13 'Bing (Balanced)': 'Balanced',
14 'Bing (Creative)': 'Creative',
15 'Bing (Precise)': 'Precise'
16 }
17
18 models = [*bing_models.keys()]
19
20 @classmethod
21 async def create_async_generator(
22 cls,
23 model: str,
24 messages: Messages,
25 proxy: str = None,
26 **kwargs
27 ) -> AsyncResult:
28 headers = {
29 "Content-Type": "application/json",
30 "Accept": "application/json",
31 "Origin": cls.url or "https://default-url.com",
32 "Referer": f"{cls.url}/chat" if cls.url else "https://default-url.com/chat",
33 }
34
35 async with ClientSession(headers=headers) as session:
36 prompt = format_prompt(messages)
37 if prompt is None:
38 raise ValueError("Prompt cannot be None")
39
40 data = {
41 "messages": [
42 {
43 "role": "user",
44 "content": prompt
45 }
46 ],
47 "conversation_style": cls.bing_models.get(model, 'Balanced'),
48 "markdown": False,
49 "stream": True,
50 "model": "Bing"
51 }
52
53 full_response = ""
54 last_message = ""
55
56 async with session.post(cls.api_endpoint, json=data, proxy=proxy) as response:
57 response.raise_for_status()
58
59 async for line in response.content:
60 if line:
61 raw_data = line.decode('utf-8').strip()
62
63 parts = raw_data.split('')
64 for part in parts:
65 if part:
66 try:
67 json_data = json.loads(part)
68 except json.JSONDecodeError:
69 continue
70
71 if json_data.get("error"):
72 raise Exception("Error in API response")
73
74 if json_data.get("finish"):
75 break
76
77 if message := json_data.get("message"):
78 if message != last_message:
79 full_response = message
80 last_message = message
81
82 yield full_response.strip()
Added g4f/Provider/nexra/NexraChatGPT.py +66 -0
@@ -0,0 +1,66 @@
1 from __future__ import annotations
2 from aiohttp import ClientSession
3 from ...typing import AsyncResult, Messages
4 from ..base_provider import AsyncGeneratorProvider, ProviderModelMixin
5 from ..helper import format_prompt
6 import json
7
8 class NexraChatGPT(AsyncGeneratorProvider, ProviderModelMixin):
9 label = "Nexra ChatGPT"
10 api_endpoint = "https://nexra.aryahcr.cc/api/chat/gpt"
11
12 models = [
13 'gpt-4', 'gpt-4-0613', 'gpt-4-32k', 'gpt-4-0314', 'gpt-4-32k-0314',
14 'gpt-3.5-turbo', 'gpt-3.5-turbo-16k', 'gpt-3.5-turbo-0613',
15 'gpt-3.5-turbo-16k-0613', 'gpt-3.5-turbo-0301',
16 'gpt-3', 'text-davinci-003', 'text-davinci-002', 'code-davinci-002',
17 'text-curie-001', 'text-babbage-001', 'text-ada-001',
18 'davinci', 'curie', 'babbage', 'ada', 'babbage-002', 'davinci-002',
19 ]
20
21 @classmethod
22 async def create_async_generator(
23 cls,
24 model: str,
25 messages: Messages,
26 proxy: str = None,
27 **kwargs
28 ) -> AsyncResult:
29 headers = {
30 "Accept": "application/json",
31 "Content-Type": "application/json",
32 "Referer": f"{cls.url}/chat",
33 }
34
35 async with ClientSession(headers=headers) as session:
36 prompt = format_prompt(messages)
37 data = {
38 "prompt": prompt,
39 "model": model,
40 "markdown": False,
41 "messages": messages or [],
42 }
43
44 async with session.post(cls.api_endpoint, json=data, proxy=proxy) as response:
45 response.raise_for_status()
46
47 content_type = response.headers.get('Content-Type', '')
48 if 'application/json' in content_type:
49 result = await response.json()
50 if result.get("status"):
51 yield result.get("gpt", "")
52 else:
53 raise Exception(f"Error in response: {result.get('message', 'Unknown error')}")
54 elif 'text/plain' in content_type:
55 text = await response.text()
56 try:
57 result = json.loads(text)
58 if result.get("status"):
59 yield result.get("gpt", "")
60 else:
61 raise Exception(f"Error in response: {result.get('message', 'Unknown error')}")
62 except json.JSONDecodeError:
63 yield text # If not JSON, return text
64 else:
65 raise Exception(f"Unexpected response type: {content_type}. Response text: {await response.text()}")
66
Added g4f/Provider/nexra/NexraChatGPT4o.py +52 -0
@@ -0,0 +1,52 @@
1 from __future__ import annotations
2
3 import json
4 from aiohttp import ClientSession
5
6 from ...typing import AsyncResult, Messages
7 from ..base_provider import AsyncGeneratorProvider, ProviderModelMixin
8 from ..helper import format_prompt
9
10
11 class NexraChatGPT4o(AsyncGeneratorProvider, ProviderModelMixin):
12 label = "Nexra GPT-4o"
13 api_endpoint = "https://nexra.aryahcr.cc/api/chat/complements"
14 models = ['gpt-4o']
15
16 @classmethod
17 async def create_async_generator(
18 cls,
19 model: str,
20 messages: Messages,
21 proxy: str = None,
22 **kwargs
23 ) -> AsyncResult:
24 headers = {
25 "Content-Type": "application/json"
26 }
27 async with ClientSession(headers=headers) as session:
28 data = {
29 "messages": [
30 {'role': 'assistant', 'content': ''},
31 {'role': 'user', 'content': format_prompt(messages)}
32 ],
33 "markdown": False,
34 "stream": True,
35 "model": model
36 }
37 async with session.post(cls.api_endpoint, json=data, proxy=proxy) as response:
38 response.raise_for_status()
39 full_response = ''
40 async for line in response.content:
41 if line:
42 messages = line.decode('utf-8').split('\x1e')
43 for message_str in messages:
44 try:
45 message = json.loads(message_str)
46 if message.get('message'):
47 full_response = message['message']
48 if message.get('finish'):
49 yield full_response.strip()
50 return
51 except json.JSONDecodeError:
52 pass
Added g4f/Provider/nexra/NexraChatGPTWeb.py +53 -0
@@ -0,0 +1,53 @@
1 from __future__ import annotations
2 from aiohttp import ClientSession
3 from ...typing import AsyncResult, Messages
4 from ..base_provider import AsyncGeneratorProvider, ProviderModelMixin
5 from ..helper import format_prompt
6 import json
7
8 class NexraChatGPTWeb(AsyncGeneratorProvider, ProviderModelMixin):
9 label = "Nexra ChatGPT Web"
10 api_endpoint = "https://nexra.aryahcr.cc/api/chat/gptweb"
11 models = ['gptweb']
12
13 @classmethod
14 async def create_async_generator(
15 cls,
16 model: str,
17 messages: Messages,
18 proxy: str = None,
19 **kwargs
20 ) -> AsyncResult:
21 headers = {
22 "Content-Type": "application/json",
23 }
24
25 async with ClientSession(headers=headers) as session:
26 prompt = format_prompt(messages)
27 if prompt is None:
28 raise ValueError("Prompt cannot be None")
29
30 data = {
31 "prompt": prompt,
32 "markdown": False
33 }
34
35 async with session.post(cls.api_endpoint, json=data, proxy=proxy) as response:
36 response.raise_for_status()
37
38 full_response = ""
39 async for chunk in response.content:
40 if chunk:
41 result = chunk.decode("utf-8").strip()
42
43 try:
44 json_data = json.loads(result)
45
46 if json_data.get("status"):
47 full_response = json_data.get("gpt", "")
48 else:
49 full_response = f"Error: {json_data.get('message', 'Unknown error')}"
50 except json.JSONDecodeError:
51 full_response = "Error: Invalid JSON response."
52
53 yield full_response.strip()
Added g4f/Provider/nexra/NexraGeminiPro.py +52 -0
@@ -0,0 +1,52 @@
1 from __future__ import annotations
2
3 import json
4 from aiohttp import ClientSession
5
6 from ...typing import AsyncResult, Messages
7 from ..base_provider import AsyncGeneratorProvider, ProviderModelMixin
8 from ..helper import format_prompt
9
10
11 class NexraGeminiPro(AsyncGeneratorProvider, ProviderModelMixin):
12 label = "Nexra Gemini PRO"
13 api_endpoint = "https://nexra.aryahcr.cc/api/chat/complements"
14 models = ['gemini-pro']
15
16 @classmethod
17 async def create_async_generator(
18 cls,
19 model: str,
20 messages: Messages,
21 proxy: str = None,
22 **kwargs
23 ) -> AsyncResult:
24 headers = {
25 "Content-Type": "application/json"
26 }
27 async with ClientSession(headers=headers) as session:
28 data = {
29 "messages": [
30 {'role': 'assistant', 'content': ''},
31 {'role': 'user', 'content': format_prompt(messages)}
32 ],
33 "markdown": False,
34 "stream": True,
35 "model": model
36 }
37 async with session.post(cls.api_endpoint, json=data, proxy=proxy) as response:
38 response.raise_for_status()
39 full_response = ''
40 async for line in response.content:
41 if line:
42 messages = line.decode('utf-8').split('\x1e')
43 for message_str in messages:
44 try:
45 message = json.loads(message_str)
46 if message.get('message'):
47 full_response = message['message']
48 if message.get('finish'):
49 yield full_response.strip()
50 return
51 except json.JSONDecodeError:
52 pass
Added g4f/Provider/nexra/NexraImageURL.py +46 -0
@@ -0,0 +1,46 @@
1 from __future__ import annotations
2 from aiohttp import ClientSession
3 import json
4 from ...typing import AsyncResult, Messages
5 from ..base_provider import AsyncGeneratorProvider, ProviderModelMixin
6 from ..helper import format_prompt
7 from ...image import ImageResponse
8
9 class NexraImageURL(AsyncGeneratorProvider, ProviderModelMixin):
10 label = "Image Generation Provider"
11 api_endpoint = "https://nexra.aryahcr.cc/api/image/complements"
12 models = ['dalle', 'dalle2', 'dalle-mini', 'emi', 'sdxl-turbo', 'prodia']
13
14 @classmethod
15 async def create_async_generator(
16 cls,
17 model: str,
18 messages: Messages,
19 proxy: str = None,
20 **kwargs
21 ) -> AsyncResult:
22 headers = {
23 "Content-Type": "application/json",
24 }
25
26 async with ClientSession(headers=headers) as session:
27 prompt = format_prompt(messages)
28 data = {
29 "prompt": prompt,
30 "model": model,
31 "response": "url"
32 }
33
34 async with session.post(cls.api_endpoint, json=data, proxy=proxy) as response:
35 response.raise_for_status()
36 response_text = await response.text()
37
38 cleaned_response = response_text.lstrip('_')
39 response_json = json.loads(cleaned_response)
40
41 images = response_json.get("images")
42 if images and len(images) > 0:
43 image_response = ImageResponse(images[0], alt="Generated Image")
44 yield image_response
45 else:
46 yield "No image URL found."
Added g4f/Provider/nexra/NexraLlama.py +52 -0
@@ -0,0 +1,52 @@
1 from __future__ import annotations
2
3 import json
4 from aiohttp import ClientSession
5
6 from ...typing import AsyncResult, Messages
7 from ..base_provider import AsyncGeneratorProvider, ProviderModelMixin
8 from ..helper import format_prompt
9
10
11 class NexraLlama(AsyncGeneratorProvider, ProviderModelMixin):
12 label = "Nexra LLaMA 3.1"
13 api_endpoint = "https://nexra.aryahcr.cc/api/chat/complements"
14 models = ['llama-3.1']
15
16 @classmethod
17 async def create_async_generator(
18 cls,
19 model: str,
20 messages: Messages,
21 proxy: str = None,
22 **kwargs
23 ) -> AsyncResult:
24 headers = {
25 "Content-Type": "application/json"
26 }
27 async with ClientSession(headers=headers) as session:
28 data = {
29 "messages": [
30 {'role': 'assistant', 'content': ''},
31 {'role': 'user', 'content': format_prompt(messages)}
32 ],
33 "markdown": False,
34 "stream": True,
35 "model": model
36 }
37 async with session.post(cls.api_endpoint, json=data, proxy=proxy) as response:
38 response.raise_for_status()
39 full_response = ''
40 async for line in response.content:
41 if line:
42 messages = line.decode('utf-8').split('\x1e')
43 for message_str in messages:
44 try:
45 message = json.loads(message_str)
46 if message.get('message'):
47 full_response = message['message']
48 if message.get('finish'):
49 yield full_response.strip()
50 return
51 except json.JSONDecodeError:
52 pass
Added g4f/Provider/nexra/NexraQwen.py +52 -0
@@ -0,0 +1,52 @@
1 from __future__ import annotations
2
3 import json
4 from aiohttp import ClientSession
5
6 from ...typing import AsyncResult, Messages
7 from ..base_provider import AsyncGeneratorProvider, ProviderModelMixin
8 from ..helper import format_prompt
9
10
11 class NexraQwen(AsyncGeneratorProvider, ProviderModelMixin):
12 label = "Nexra Qwen"
13 api_endpoint = "https://nexra.aryahcr.cc/api/chat/complements"
14 models = ['qwen']
15
16 @classmethod
17 async def create_async_generator(
18 cls,
19 model: str,
20 messages: Messages,
21 proxy: str = None,
22 **kwargs
23 ) -> AsyncResult:
24 headers = {
25 "Content-Type": "application/json"
26 }
27 async with ClientSession(headers=headers) as session:
28 data = {
29 "messages": [
30 {'role': 'assistant', 'content': ''},
31 {'role': 'user', 'content': format_prompt(messages)}
32 ],
33 "markdown": False,
34 "stream": True,
35 "model": model
36 }
37 async with session.post(cls.api_endpoint, json=data, proxy=proxy) as response:
38 response.raise_for_status()
39 full_response = ''
40 async for line in response.content:
41 if line:
42 messages = line.decode('utf-8').split('\x1e')
43 for message_str in messages:
44 try:
45 message = json.loads(message_str)
46 if message.get('message'):
47 full_response = message['message']
48 if message.get('finish'):
49 yield full_response.strip()
50 return
51 except json.JSONDecodeError:
52 pass
Added g4f/Provider/nexra/__init__.py +1 -0
@@ -0,0 +1 @@
1
Modified g4f/models.py +16 -16
@@ -115,7 +115,7 @@ gpt_4o = Model(
115 115 name = 'gpt-4o',
116 116 base_provider = 'OpenAI',
117 117 best_provider = IterListProvider([
118 Liaobots, Airforce, Chatgpt4o, ChatGptEs,
118 Liaobots, Nexra, Airforce, Chatgpt4o, ChatGptEs,
119 119 OpenaiChat
120 120 ])
121 121 )
@@ -211,7 +211,7 @@ llama_3_1_405b = Model(
211 211 llama_3_1 = Model(
212 212 name = "llama-3.1",
213 213 base_provider = "Meta Llama",
214 best_provider = IterListProvider([llama_3_1_8b.best_provider, llama_3_1_70b.best_provider, llama_3_1_405b.best_provider,])
214 best_provider = IterListProvider([Nexra, llama_3_1_8b.best_provider, llama_3_1_70b.best_provider, llama_3_1_405b.best_provider,])
215 215 )
216 216
217 217
@@ -273,7 +273,7 @@ phi_3_5_mini = Model(
273 273 gemini_pro = Model(
274 274 name = 'gemini-pro',
275 275 base_provider = 'Google DeepMind',
276 best_provider = IterListProvider([GeminiPro, LiteIcoding, Blackbox, AIChatFree, GPROChat, Liaobots, Airforce])
276 best_provider = IterListProvider([GeminiPro, LiteIcoding, Blackbox, AIChatFree, GPROChat, Nexra, Liaobots, Airforce])
277 277 )
278 278
279 279 gemini_flash = Model(
@@ -285,10 +285,7 @@ gemini_flash = Model(
285 285 gemini = Model(
286 286 name = 'gemini',
287 287 base_provider = 'Google DeepMind',
288 best_provider = IterListProvider([
289 Gemini,
290 gemini_flash.best_provider, gemini_pro.best_provider
291 ])
288 best_provider = IterListProvider([Gemini, gemini_flash.best_provider, gemini_pro.best_provider])
292 289 )
293 290
294 291 # gemma
@@ -458,9 +455,7 @@ qwen_turbo = Model(
458 455 qwen = Model(
459 456 name = 'qwen',
460 457 base_provider = 'Qwen',
461 best_provider = IterListProvider([
462 qwen_1_5_14b.best_provider, qwen_1_5_72b.best_provider, qwen_1_5_110b.best_provider, qwen_2_72b.best_provider, qwen_turbo.best_provider
463 ])
458 best_provider = IterListProvider([Nexra, qwen_1_5_14b.best_provider, qwen_1_5_72b.best_provider, qwen_1_5_110b.best_provider, qwen_2_72b.best_provider, qwen_turbo.best_provider])
464 459 )
465 460
466 461
@@ -639,7 +634,7 @@ sonar_chat = Model(
639 634 sdxl = Model(
640 635 name = 'sdxl',
641 636 base_provider = 'Stability AI',
642 best_provider = IterListProvider([ReplicateHome, DeepInfraImage])
637 best_provider = IterListProvider([ReplicateHome, Nexra, DeepInfraImage])
643 638
644 639 )
645 640
@@ -734,10 +729,7 @@ dalle_3 = Model(
734 729 dalle = Model(
735 730 name = 'dalle',
736 731 base_provider = '',
737 best_provider = IterListProvider([
738 Nexra,
739 dalle_2.best_provider, dalle_3.best_provider,
740 ])
732 best_provider = IterListProvider([Nexra, dalle_2.best_provider, dalle_3.best_provider])
741 733
742 734 )
743 735
@@ -748,7 +740,7 @@ dalle_mini = Model(
748 740
749 741 )
750 742
751 ### ###
743 ### Other ###
752 744 emi = Model(
753 745 name = 'emi',
754 746 base_provider = '',
@@ -763,6 +755,13 @@ any_dark = Model(
763 755
764 756 )
765 757
758 prodia = Model(
759 name = 'prodia',
760 base_provider = '',
761 best_provider = IterListProvider([Nexra])
762
763 )
764
766 765 class ModelUtils:
767 766 """
768 767 Utility class for mapping string identifiers to Model instances.
@@ -985,6 +984,7 @@ class ModelUtils:
985 984 'dalle-mini': dalle_mini,
986 985 'emi': emi,
987 986 'any-dark': any_dark,
987 'prodia': prodia,
988 988 }
989 989
990 990 _all_models = list(ModelUtils.convert.keys())