Skip to content

Commit

Permalink
Merge pull request #2043 from Zedai00/geminiprochat-fix
Browse files Browse the repository at this point in the history
Update URL For GeminiProChat
  • Loading branch information
xtekky committed Jun 9, 2024
2 parents 52a37e0 + 451c760 commit c91fef3
Showing 1 changed file with 26 additions and 15 deletions.
41 changes: 26 additions & 15 deletions g4f/Provider/GeminiProChat.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,18 @@

import time
from hashlib import sha256
from aiohttp import ClientSession, BaseConnector

from ..typing import AsyncResult, Messages
from .base_provider import AsyncGeneratorProvider
from aiohttp import BaseConnector, ClientSession

from ..errors import RateLimitError
from ..requests import raise_for_status
from ..requests.aiohttp import get_connector
from ..typing import AsyncResult, Messages
from .base_provider import AsyncGeneratorProvider


class GeminiProChat(AsyncGeneratorProvider):
url = "https://gemini-chatbot-sigma.vercel.app"
url = "https://www.chatgemini.net/"
working = True
supports_message_history = True

Expand All @@ -22,7 +24,7 @@ async def create_async_generator(
messages: Messages,
proxy: str = None,
connector: BaseConnector = None,
**kwargs
**kwargs,
) -> AsyncResult:
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:122.0) Gecko/20100101 Firefox/122.0",
Expand All @@ -38,26 +40,35 @@ async def create_async_generator(
"Connection": "keep-alive",
"TE": "trailers",
}
async with ClientSession(connector=get_connector(connector, proxy), headers=headers) as session:
async with ClientSession(
connector=get_connector(connector, proxy), headers=headers
) as session:
timestamp = int(time.time() * 1e3)
data = {
"messages":[{
"role": "model" if message["role"] == "assistant" else "user",
"parts": [{"text": message["content"]}]
} for message in messages],
"messages": [
{
"role": "model" if message["role"] == "assistant" else "user",
"parts": [{"text": message["content"]}],
}
for message in messages
],
"time": timestamp,
"pass": None,
"sign": generate_signature(timestamp, messages[-1]["content"]),
}
async with session.post(f"{cls.url}/api/generate", json=data, proxy=proxy) as response:
async with session.post(
f"{cls.url}/api/generate", json=data, proxy=proxy
) as response:
if response.status == 500:
if "Quota exceeded" in await response.text():
raise RateLimitError(f"Response {response.status}: Rate limit reached")
raise RateLimitError(
f"Response {response.status}: Rate limit reached"
)
await raise_for_status(response)
async for chunk in response.content.iter_any():
yield chunk.decode(errors="ignore")



def generate_signature(time: int, text: str, secret: str = ""):
message = f'{time}:{text}:{secret}';
message = f"{time}:{text}:{secret}"
return sha256(message.encode()).hexdigest()

0 comments on commit c91fef3

Please sign in to comment.