NexraChatGptWeb.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. from __future__ import annotations
  2. from aiohttp import ClientSession, ContentTypeError
  3. import json
  4. from ...typing import AsyncResult, Messages
  5. from ..base_provider import AsyncGeneratorProvider, ProviderModelMixin
  6. from ..helper import format_prompt
  7. class NexraChatGptWeb(AsyncGeneratorProvider, ProviderModelMixin):
  8. label = "Nexra ChatGPT Web"
  9. url = "https://nexra.aryahcr.cc/documentation/chatgpt/en"
  10. api_endpoint = "https://nexra.aryahcr.cc/api/chat/{}"
  11. working = True
  12. supports_gpt_35_turbo = True
  13. supports_gpt_4 = True
  14. supports_stream = True
  15. default_model = 'gptweb'
  16. models = [default_model]
  17. model_aliases = {
  18. "gpt-4": "gptweb",
  19. }
  20. @classmethod
  21. def get_model(cls, model: str) -> str:
  22. if model in cls.models:
  23. return model
  24. elif model in cls.model_aliases:
  25. return cls.model_aliases[model]
  26. else:
  27. return cls.default_model
  28. @classmethod
  29. async def create_async_generator(
  30. cls,
  31. model: str,
  32. messages: Messages,
  33. proxy: str = None,
  34. markdown: bool = False,
  35. **kwargs
  36. ) -> AsyncResult:
  37. headers = {
  38. "Content-Type": "application/json"
  39. }
  40. async with ClientSession(headers=headers) as session:
  41. prompt = format_prompt(messages)
  42. data = {
  43. "prompt": prompt,
  44. "markdown": markdown
  45. }
  46. model = cls.get_model(model)
  47. endpoint = cls.api_endpoint.format(model)
  48. async with session.post(endpoint, json=data, proxy=proxy) as response:
  49. response.raise_for_status()
  50. response_text = await response.text()
  51. # Remove leading underscore if present
  52. if response_text.startswith('_'):
  53. response_text = response_text[1:]
  54. try:
  55. response_data = json.loads(response_text)
  56. yield response_data.get('gpt', response_text)
  57. except json.JSONDecodeError:
  58. yield response_text