返回提交历史
Modified
docs/providers-and-models.md
+1
-1
Modified
g4f/Provider/Nexra.py
+60
-58
Added
g4f/Provider/nexra/NexraBing.py
+82
-0
Added
g4f/Provider/nexra/NexraChatGPT.py
+66
-0
Added
g4f/Provider/nexra/NexraChatGPT4o.py
+52
-0
Added
g4f/Provider/nexra/NexraChatGPTWeb.py
+53
-0
Added
g4f/Provider/nexra/NexraGeminiPro.py
+52
-0
Added
g4f/Provider/nexra/NexraImageURL.py
+46
-0
Added
g4f/Provider/nexra/NexraLlama.py
+52
-0
Added
g4f/Provider/nexra/NexraQwen.py
+52
-0
Added
g4f/Provider/nexra/__init__.py
+1
-0
Modified
g4f/models.py
+16
-16
XFEstudio/gpt4free
feat(g4f/Provider/Nexra.py): enhance model handling and add new providers
58db9e03
代码差异
12 个文件
+533
-75
@@ -51,7 +51,7 @@
51
51
|[magickpen.com](https://magickpen.com)|`g4f.Provider.MagickPen`|`gpt-4o-mini`|❌|❌|✔||❌|
52
52
|[meta.ai](https://www.meta.ai)|`g4f.Provider.MetaAI`|✔|✔|?|?||✔|
53
53
|[app.myshell.ai/chat](https://app.myshell.ai/chat)|`g4f.Provider.MyShell`|✔|❌|?|?||❌|
54
|[aryahcr.cc](https://nexra.aryahcr.cc)|`g4f.Provider.Nexra`|`gpt-3, gpt-3.5-turbo, gpt-4`|`dalle, dalle-2, dalle-mini, emi`|❌|✔||❌|
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`|❌|✔||❌|
55
55
|[openrouter.ai](https://openrouter.ai)|`g4f.Provider.OpenRouter`|✔|❌|?|?||❌|
56
56
|[platform.openai.com](https://platform.openai.com/)|`g4f.Provider.Openai`|✔|❌|✔|||✔|
57
57
|[chatgpt.com](https://chatgpt.com/)|`g4f.Provider.OpenaiChat`|`gpt-4o, gpt-4o-mini, gpt-4`|❌|✔|||✔|
@@ -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.")
@@ -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()
@@ -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
@@ -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
@@ -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()
@@ -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
@@ -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."
@@ -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
@@ -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
@@ -0,0 +1 @@
1
@@ -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())