summaryrefslogtreecommitdiffstats
path: root/g4f/Provider/Nexra.py
diff options
context:
space:
mode:
authorkqlio67 <kqlio67@users.noreply.github.com>2024-10-11 08:33:30 +0200
committerkqlio67 <kqlio67@users.noreply.github.com>2024-10-11 08:33:30 +0200
commita9bc67362f2be529fe9165ebb13347195ba1ddcf (patch)
tree1a91836eaa94f14c18ad5d55f687ff8a2118c357 /g4f/Provider/Nexra.py
parentfeat(g4f/Provider/__init__.py): add new providers and update imports (diff)
downloadgpt4free-a9bc67362f2be529fe9165ebb13347195ba1ddcf.tar
gpt4free-a9bc67362f2be529fe9165ebb13347195ba1ddcf.tar.gz
gpt4free-a9bc67362f2be529fe9165ebb13347195ba1ddcf.tar.bz2
gpt4free-a9bc67362f2be529fe9165ebb13347195ba1ddcf.tar.lz
gpt4free-a9bc67362f2be529fe9165ebb13347195ba1ddcf.tar.xz
gpt4free-a9bc67362f2be529fe9165ebb13347195ba1ddcf.tar.zst
gpt4free-a9bc67362f2be529fe9165ebb13347195ba1ddcf.zip
Diffstat (limited to 'g4f/Provider/Nexra.py')
-rw-r--r--g4f/Provider/Nexra.py138
1 files changed, 43 insertions, 95 deletions
diff --git a/g4f/Provider/Nexra.py b/g4f/Provider/Nexra.py
index 33e794f6..5fcdd242 100644
--- a/g4f/Provider/Nexra.py
+++ b/g4f/Provider/Nexra.py
@@ -1,102 +1,25 @@
from __future__ import annotations
from aiohttp import ClientSession
+import json
+
+from ..typing import AsyncResult, Messages
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
+from ..image import ImageResponse
+
class Nexra(AsyncGeneratorProvider, ProviderModelMixin):
- url = "https://nexra.aryahcr.cc"
+ label = "Nexra Animagine XL"
+ url = "https://nexra.aryahcr.cc/documentation/midjourney/en"
+ api_endpoint = "https://nexra.aryahcr.cc/api/image/complements"
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",
- }
+ default_model = 'animagine-xl'
+ models = [default_model]
@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.")
+ return cls.default_model
@classmethod
async def create_async_generator(
@@ -104,15 +27,40 @@ class Nexra(AsyncGeneratorProvider, ProviderModelMixin):
model: str,
messages: Messages,
proxy: str = None,
+ response: str = "url", # base64 or url
**kwargs
) -> AsyncResult:
+ # Retrieve the correct model to use
model = cls.get_model(model)
- api_endpoint = cls.get_api_endpoint(model)
- provider_class = cls.model_to_provider.get(model)
+ # Format the prompt from the messages
+ prompt = messages[0]['content']
+
+ headers = {
+ "Content-Type": "application/json"
+ }
+ payload = {
+ "prompt": prompt,
+ "model": model,
+ "response": response
+ }
+
+ async with ClientSession(headers=headers) as session:
+ async with session.post(cls.api_endpoint, json=payload, proxy=proxy) as response:
+ response.raise_for_status()
+ text_data = await response.text()
- 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.")
+ try:
+ # Parse the JSON response
+ json_start = text_data.find('{')
+ json_data = text_data[json_start:]
+ data = json.loads(json_data)
+
+ # Check if the response contains images
+ if 'images' in data and len(data['images']) > 0:
+ image_url = data['images'][0]
+ yield ImageResponse(image_url, prompt)
+ else:
+ yield ImageResponse("No images found in the response.", prompt)
+ except json.JSONDecodeError:
+ yield ImageResponse("Failed to parse JSON. Response might not be in JSON format.", prompt)