NexraChatGptWeb.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. from __future__ import annotations
  2. import json
  3. import requests
  4. from ...typing import CreateResult, Messages
  5. from ..base_provider import ProviderModelMixin, AbstractProvider
  6. from ..helper import format_prompt
  7. class NexraChatGptWeb(AbstractProvider, ProviderModelMixin):
  8. label = "Nexra ChatGPT Web"
  9. url = "https://nexra.aryahcr.cc/documentation/chatgpt/en"
  10. working = True
  11. default_model = "gptweb"
  12. models = [default_model]
  13. model_aliases = {"gpt-4": "gptweb"}
  14. api_endpoints = {"gptweb": "https://nexra.aryahcr.cc/api/chat/gptweb"}
  15. @classmethod
  16. def get_model(cls, model: str) -> str:
  17. if model in cls.models:
  18. return model
  19. elif model in cls.model_aliases:
  20. return cls.model_aliases[model]
  21. else:
  22. return cls.default_model
  23. @classmethod
  24. def create_completion(
  25. cls,
  26. model: str,
  27. messages: Messages,
  28. proxy: str = None,
  29. markdown: bool = False,
  30. **kwargs
  31. ) -> CreateResult:
  32. model = cls.get_model(model)
  33. api_endpoint = cls.api_endpoints.get(model, cls.api_endpoints[cls.default_model])
  34. headers = {
  35. 'Content-Type': 'application/json'
  36. }
  37. data = {
  38. "prompt": format_prompt(messages),
  39. "markdown": markdown
  40. }
  41. response = requests.post(api_endpoint, headers=headers, json=data)
  42. return cls.process_response(response)
  43. @classmethod
  44. def process_response(cls, response):
  45. if response.status_code == 200:
  46. try:
  47. content = response.text.lstrip('_')
  48. json_response = json.loads(content)
  49. return json_response.get('gpt', '')
  50. except json.JSONDecodeError:
  51. return "Error: Unable to decode JSON response"
  52. else:
  53. return f"Error: {response.status_code}"