NexraFluxPro.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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 ...image import ImageResponse
  7. class NexraFluxPro(AbstractProvider, ProviderModelMixin):
  8. url = "https://nexra.aryahcr.cc/documentation/flux-pro/en"
  9. api_endpoint = "https://nexra.aryahcr.cc/api/image/complements"
  10. working = True
  11. default_model = 'flux'
  12. models = [default_model]
  13. model_aliases = {
  14. "flux-pro": "flux",
  15. }
  16. @classmethod
  17. def get_model(cls, model: str) -> str:
  18. if model in cls.models:
  19. return model
  20. elif model in cls.model_aliases:
  21. return cls.model_aliases[model]
  22. else:
  23. return cls.default_model
  24. @classmethod
  25. def create_completion(
  26. cls,
  27. model: str,
  28. messages: Messages,
  29. proxy: str = None,
  30. response: str = "url", # base64 or url
  31. **kwargs
  32. ) -> CreateResult:
  33. model = cls.get_model(model)
  34. headers = {
  35. 'Content-Type': 'application/json'
  36. }
  37. data = {
  38. "prompt": messages[-1]["content"],
  39. "model": model,
  40. "response": response
  41. }
  42. response = requests.post(cls.api_endpoint, headers=headers, json=data)
  43. result = cls.process_response(response)
  44. yield result
  45. @classmethod
  46. def process_response(cls, response):
  47. if response.status_code == 200:
  48. try:
  49. content = response.text.strip()
  50. content = content.lstrip('_')
  51. data = json.loads(content)
  52. if data.get('status') and data.get('images'):
  53. image_url = data['images'][0]
  54. return ImageResponse(images=[image_url], alt="Generated Image")
  55. else:
  56. return "Error: No image URL found in the response"
  57. except json.JSONDecodeError as e:
  58. return f"Error: Unable to decode JSON response. Details: {str(e)}"
  59. else:
  60. return f"Error: {response.status_code}, Response: {response.text}"