NeuroGPT / g4f /Provider /NeuroGPT.py
CostalCry's picture
Upload folder using huggingface_hub
412be29 verified
from __future__ import annotations
import re
import os
import openai
import json
import openai.error
from aiohttp import ClientSession
from ..typing import AsyncGenerator
from .base_provider import AsyncGeneratorProvider, format_prompt
openai.api_base = 'https://neuroapi.host/v1'
openai.api_key = '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'
class NeuroGPT(AsyncGeneratorProvider):
url = "https://neuroapi.host"
working = True
supports_gpt_35_turbo = True
supports_stream = True
@classmethod
async def create_async_generator(
cls,
model: str,
messages: list[dict[str, str]],
stream: bool = True,
proxy: str = None,
**kwargs
) -> AsyncGenerator:
try:
response = openai.ChatCompletion.create(
model=model,
messages=messages,
stream=stream
)
if stream:
for chunk in response:
yield chunk.choices[0].delta.get("content", "")
else:
yield response.choices[0]['message'].get("content", "")
except openai.error.APIError as e:
if e.http_status == 429:
detail_pattern = re.compile(r'{"detail":"(.*?)"}')
match = detail_pattern.search(e.user_message)
if match:
error_message = match.group(1)
yield error_message
else:
yield e.user_message
else:
raise
@classmethod
@property
def params(cls):
params = [
("model", "str"),
("messages", "list[dict[str, str]]"),
("stream", "bool"),
("temperature", "float"),
]
param = ", ".join([": ".join(p) for p in params])
return f"g4f.provider.{cls.__name__} supports: ({param})"