Your task is to review pull requests. Instructions:
- Provide the response in following JSON format: {"reviews": [{"line": <line_number>, "body": "<review comment>"}]}
- Do not give positive comments or compliments.
- Provide comments and suggestions ONLY if there is something to improve, otherwise "reviews" should be an empty array.
- Write the comment in GitHub Markdown format.
- Use the given description only for the overall context and only comment the code.
- IMPORTANT: NEVER suggest adding comments to the code.

Review the following code diff in the file "g4f/Provider/airforce/AirforceImage.py" and take the pull request title and description into account when writing the response.
  
Pull request title: [pull] main from xtekky:main
Pull request description:
---
See Commits and Changes for more details.

-----
Created by [<img src="https://prod.download/pull-18h-svg" valign="bottom"/> **pull[bot]**](https://github.com/wei/pull)

_Can you help keep this open source service alive? **[💖 Please sponsor : )](https://prod.download/pull-pr-sponsor)**_
---

Each line is prefixed by its number. Code to review:
```
1:+from __future__ import annotations
2:+
3:+from aiohttp import ClientSession
4:+from urllib.parse import urlencode
5:+import random
6:+import requests
7:+
8:+from ...typing import AsyncResult, Messages
9:+from ...image import ImageResponse
10:+from ..base_provider import AsyncGeneratorProvider, ProviderModelMixin
11:+
12:+
13:+class AirforceImage(AsyncGeneratorProvider, ProviderModelMixin):
14:+    label = "Airforce Image"
15:+    #url = "https://api.airforce"
16:+    api_endpoint = "https://api.airforce/imagine2"
17:+    #working = True
18:+    
19:+    default_model = 'flux'
20:+    
21:+    response = requests.get('https://api.airforce/imagine/models')
22:+    data = response.json()
23:+
24:+    image_models = data
25:+
26:+    models = [*image_models, "stable-diffusion-xl-base", "stable-diffusion-xl-lightning", "Flux-1.1-Pro"]
27:+    
28:+    model_aliases = {
29:+        "sdxl": "stable-diffusion-xl-base",
30:+        "sdxl": "stable-diffusion-xl-lightning", 
31:+        "flux-pro": "Flux-1.1-Pro",
32:+    }
33:+    
34:+    @classmethod
35:+    def get_model(cls, model: str) -> str:
36:+        if model in cls.models:
37:+            return model
38:+        else:
39:+            return cls.default_model
40:+
41:+    @classmethod
42:+    async def create_async_generator(
43:+        cls,
44:+        model: str,
45:+        messages: Messages,
46:+        size: str = '1:1', # "1:1", "16:9", "9:16", "21:9", "9:21", "1:2", "2:1"
47:+        proxy: str = None,
48:+        **kwargs
49:+    ) -> AsyncResult:
50:+        model = cls.get_model(model)
51:+        
52:+        headers = {
53:+            'accept': 'image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8',
54:+            'accept-language': 'en-US,en;q=0.9',
55:+            'cache-control': 'no-cache',
56:+            'dnt': '1',
57:+            'pragma': 'no-cache',
58:+            'priority': 'u=1, i',
59:+            'referer': 'https://llmplayground.net/',
60:+            'sec-ch-ua': '"Not?A_Brand";v="99", "Chromium";v="130"',
61:+            'sec-ch-ua-mobile': '?0',
62:+            'sec-ch-ua-platform': '"Linux"',
63:+            'sec-fetch-dest': 'image',
64:+            'sec-fetch-mode': 'no-cors', 
65:+            'sec-fetch-site': 'cross-site',
66:+            'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36'
67:+        }
68:+
69:+        async with ClientSession(headers=headers) as session:
70:+            seed = random.randint(0, 58463)
71:+            params = {
72:+                'model': model,
73:+                'prompt': messages[-1]["content"],
74:+                'size': size,
75:+                'seed': seed
76:+            }
77:+            full_url = f"{cls.api_endpoint}?{urlencode(params)}"
78:+
79:+            async with session.get(full_url, headers=headers, proxy=proxy) as response:
80:+                if response.status == 200 and response.headers.get('content-type', '').startswith('image'):
81:+                    yield ImageResponse(images=[full_url], alt="Generated Image")
82:+                else:
83:+                    raise Exception(f"Error: status {response.status}, content type {response.headers.get('content-type')}")
```