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/GizAI.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](/LHONG1008/gpt4free/pull/129/commits) and [Changes](/LHONG1008/gpt4free/pull/129/files) 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:+
5:+from ..typing import AsyncResult, Messages
6:+from .base_provider import AsyncGeneratorProvider, ProviderModelMixin
7:+from .helper import format_prompt
8:+
9:+
10:+class GizAI(AsyncGeneratorProvider, ProviderModelMixin):
11:+    url = "https://app.giz.ai/assistant"
12:+    api_endpoint = "https://app.giz.ai/api/data/users/inferenceServer.infer"
13:+    working = True
14:+    supports_stream = False
15:+    supports_system_message = True
16:+    supports_message_history = True
17:+    
18:+    default_model = 'chat-gemini-flash'
19:+    models = [default_model]
20:+    
21:+    model_aliases = {"gemini-flash": "chat-gemini-flash",}
22:+
23:+    @classmethod
24:+    def get_model(cls, model: str) -> str:
25:+        if model in cls.models:
26:+            return model
27:+        elif model in cls.model_aliases:
28:+            return cls.model_aliases[model]
29:+        else:
30:+            return cls.default_model
31:+
32:+    @classmethod
33:+    async def create_async_generator(
34:+        cls,
35:+        model: str,
36:+        messages: Messages,
37:+        proxy: str = None,
38:+        **kwargs
39:+    ) -> AsyncResult:
40:+        model = cls.get_model(model)
41:+        
42:+        headers = {
43:+            'Accept': 'application/json, text/plain, */*',
44:+            'Accept-Language': 'en-US,en;q=0.9',
45:+            'Cache-Control': 'no-cache',
46:+            'Connection': 'keep-alive',
47:+            'Content-Type': 'application/json',
48:+            'DNT': '1',
49:+            'Origin': 'https://app.giz.ai',
50:+            'Pragma': 'no-cache',
51:+            'Sec-Fetch-Dest': 'empty',
52:+            'Sec-Fetch-Mode': 'cors',
53:+            'Sec-Fetch-Site': 'same-origin',
54:+            'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36',
55:+            'sec-ch-ua': '"Not?A_Brand";v="99", "Chromium";v="130"',
56:+            'sec-ch-ua-mobile': '?0',
57:+            'sec-ch-ua-platform': '"Linux"'
58:+        }
59:+        
60:+        prompt = format_prompt(messages)
61:+        
62:+        async with ClientSession(headers=headers) as session:
63:+            data = {
64:+                "model": model,
65:+                "input": {
66:+                    "messages": [{"type": "human", "content": prompt}],
67:+                    "mode": "plan"
68:+                },
69:+                "noStream": True
70:+            }
71:+            async with session.post(cls.api_endpoint, json=data, proxy=proxy) as response:
72:+                if response.status == 201:
73:+                    result = await response.json()
74:+                    yield result['output'].strip()
75:+                else:
76:+                    raise Exception(f"Unexpected response status: {response.status}")
```