summaryrefslogblamecommitdiffstats
path: root/g4f/Provider/Nexra.py
blob: 33e794f6517903acc3b91bba13789c47790a4696 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
                                  
 
                                 

                                                                     







                                                  
 

                                                        


                                
                          

                                   
                                   






















                                                                       
    























                                                  
        





                                   
                            
                             
     

 

                                          
                               



                                           
                                    

                







                                                                      





                                     
                     
                                    








                                                                                                          
from __future__ import annotations

from aiohttp import ClientSession
from .base_provider import AsyncGeneratorProvider, ProviderModelMixin
from .helper import format_prompt
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

class Nexra(AsyncGeneratorProvider, ProviderModelMixin):
    url = "https://nexra.aryahcr.cc"
    working = True
    supports_gpt_35_turbo = True
    supports_gpt_4 = True
    supports_stream = True
    supports_system_message = True
    supports_message_history = True
    default_model = 'gpt-3.5-turbo'
    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},
    }
    
    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",
        
        "gpt-4": "gptweb",
        
        "gpt-4": "Bing (Balanced)",
        "gpt-4": "Bing (Creative)",
        "gpt-4": "Bing (Precise)",
        
        "dalle-2": "dalle2",
        "sdxl": "sdxl-turbo",
    }


    @classmethod
    def get_model(cls, model: str) -> str:
        if model in cls.models:
            return model
        elif model in cls.model_aliases:
            return cls.model_aliases[model]
        else:
            return cls.default_model

    @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.")

    @classmethod
    async def create_async_generator(
        cls,
        model: str,
        messages: Messages,
        proxy: str = None,
        **kwargs
    ) -> AsyncResult:
        model = cls.get_model(model)
        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.")