2024-09-04 02:09:29 +03:00
|
|
|
from __future__ import annotations
|
|
|
|
|
2024-09-29 23:38:25 +03:00
|
|
|
from aiohttp import ClientSession
|
2024-09-04 02:09:29 +03:00
|
|
|
from .base_provider import AsyncGeneratorProvider, ProviderModelMixin
|
|
|
|
from .helper import format_prompt
|
2024-09-29 23:38:25 +03:00
|
|
|
from .nexra.NexraBing import NexraBing
|
|
|
|
from .nexra.NexraChatGPT import NexraChatGPT
|
|
|
|
from .nexra.NexraChatGPT4o import NexraChatGPT4o
|
|
|
|
from .nexra.NexraChatGPTWeb import NexraChatGPTWeb
|
|
|
|
from .nexra.NexraGeminiPro import NexraGeminiPro
|
|
|
|
from .nexra.NexraImageURL import NexraImageURL
|
|
|
|
from .nexra.NexraLlama import NexraLlama
|
|
|
|
from .nexra.NexraQwen import NexraQwen
|
2024-09-04 02:09:29 +03:00
|
|
|
|
|
|
|
class Nexra(AsyncGeneratorProvider, ProviderModelMixin):
|
|
|
|
url = "https://nexra.aryahcr.cc"
|
|
|
|
working = True
|
|
|
|
supports_gpt_35_turbo = True
|
|
|
|
supports_gpt_4 = True
|
2024-09-29 23:38:25 +03:00
|
|
|
supports_stream = True
|
2024-09-04 02:09:29 +03:00
|
|
|
supports_system_message = True
|
|
|
|
supports_message_history = True
|
|
|
|
default_model = 'gpt-3.5-turbo'
|
2024-09-29 23:38:25 +03:00
|
|
|
image_model = 'sdxl-turbo'
|
|
|
|
|
|
|
|
models = (
|
|
|
|
*NexraBing.models,
|
|
|
|
*NexraChatGPT.models,
|
|
|
|
*NexraChatGPT4o.models,
|
|
|
|
*NexraChatGPTWeb.models,
|
|
|
|
*NexraGeminiPro.models,
|
|
|
|
*NexraImageURL.models,
|
|
|
|
*NexraLlama.models,
|
|
|
|
*NexraQwen.models,
|
|
|
|
)
|
|
|
|
|
|
|
|
model_to_provider = {
|
|
|
|
**{model: NexraChatGPT for model in NexraChatGPT.models},
|
|
|
|
**{model: NexraChatGPT4o for model in NexraChatGPT4o.models},
|
|
|
|
**{model: NexraChatGPTWeb for model in NexraChatGPTWeb.models},
|
|
|
|
**{model: NexraGeminiPro for model in NexraGeminiPro.models},
|
|
|
|
**{model: NexraImageURL for model in NexraImageURL.models},
|
|
|
|
**{model: NexraLlama for model in NexraLlama.models},
|
|
|
|
**{model: NexraQwen for model in NexraQwen.models},
|
|
|
|
**{model: NexraBing for model in NexraBing.models},
|
|
|
|
}
|
2024-09-04 22:23:17 +03:00
|
|
|
|
2024-09-04 02:09:29 +03:00
|
|
|
model_aliases = {
|
|
|
|
"gpt-4": "gpt-4-0613",
|
|
|
|
"gpt-4": "gpt-4-32k",
|
|
|
|
"gpt-4": "gpt-4-0314",
|
|
|
|
"gpt-4": "gpt-4-32k-0314",
|
|
|
|
|
|
|
|
"gpt-3.5-turbo": "gpt-3.5-turbo-16k",
|
|
|
|
"gpt-3.5-turbo": "gpt-3.5-turbo-0613",
|
|
|
|
"gpt-3.5-turbo": "gpt-3.5-turbo-16k-0613",
|
|
|
|
"gpt-3.5-turbo": "gpt-3.5-turbo-0301",
|
|
|
|
|
|
|
|
"gpt-3": "text-davinci-003",
|
|
|
|
"gpt-3": "text-davinci-002",
|
|
|
|
"gpt-3": "code-davinci-002",
|
|
|
|
"gpt-3": "text-curie-001",
|
|
|
|
"gpt-3": "text-babbage-001",
|
|
|
|
"gpt-3": "text-ada-001",
|
|
|
|
"gpt-3": "text-ada-001",
|
|
|
|
"gpt-3": "davinci",
|
|
|
|
"gpt-3": "curie",
|
|
|
|
"gpt-3": "babbage",
|
|
|
|
"gpt-3": "ada",
|
|
|
|
"gpt-3": "babbage-002",
|
|
|
|
"gpt-3": "davinci-002",
|
2024-09-11 16:16:22 +03:00
|
|
|
|
2024-09-29 23:38:25 +03:00
|
|
|
"gpt-4": "gptweb",
|
|
|
|
|
|
|
|
"gpt-4": "Bing (Balanced)",
|
|
|
|
"gpt-4": "Bing (Creative)",
|
|
|
|
"gpt-4": "Bing (Precise)",
|
|
|
|
|
2024-09-11 16:16:22 +03:00
|
|
|
"dalle-2": "dalle2",
|
2024-09-29 23:38:25 +03:00
|
|
|
"sdxl": "sdxl-turbo",
|
2024-09-04 02:09:29 +03:00
|
|
|
}
|
2024-09-29 23:38:25 +03:00
|
|
|
|
|
|
|
|
2024-09-04 02:09:29 +03:00
|
|
|
@classmethod
|
|
|
|
def get_model(cls, model: str) -> str:
|
2024-09-29 23:38:25 +03:00
|
|
|
if model in cls.models:
|
2024-09-04 02:09:29 +03:00
|
|
|
return model
|
|
|
|
elif model in cls.model_aliases:
|
|
|
|
return cls.model_aliases[model]
|
|
|
|
else:
|
2024-09-14 12:52:21 +03:00
|
|
|
return cls.default_model
|
2024-09-04 02:09:29 +03:00
|
|
|
|
2024-09-29 23:38:25 +03:00
|
|
|
@classmethod
|
|
|
|
def get_api_endpoint(cls, model: str) -> str:
|
|
|
|
provider_class = cls.model_to_provider.get(model)
|
|
|
|
|
|
|
|
if provider_class:
|
|
|
|
return provider_class.api_endpoint
|
|
|
|
raise ValueError(f"API endpoint for model {model} not found.")
|
|
|
|
|
2024-09-04 02:09:29 +03:00
|
|
|
@classmethod
|
|
|
|
async def create_async_generator(
|
|
|
|
cls,
|
|
|
|
model: str,
|
|
|
|
messages: Messages,
|
|
|
|
proxy: str = None,
|
|
|
|
**kwargs
|
2024-09-11 16:16:22 +03:00
|
|
|
) -> AsyncResult:
|
2024-09-04 02:09:29 +03:00
|
|
|
model = cls.get_model(model)
|
2024-09-29 23:38:25 +03:00
|
|
|
api_endpoint = cls.get_api_endpoint(model)
|
|
|
|
|
|
|
|
provider_class = cls.model_to_provider.get(model)
|
|
|
|
|
|
|
|
if provider_class:
|
|
|
|
async for response in provider_class.create_async_generator(model, messages, proxy, **kwargs):
|
|
|
|
yield response
|
|
|
|
else:
|
|
|
|
raise ValueError(f"Provider for model {model} not found.")
|