XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet
公开
关注 0 Fork 0 Star 1
返回提交历史

XFEstudio/gpt4free

Fix OpenaiChat provider, Fix issue with curl_cffi

23e002f5
Heiner Lohaus <hlohaus@users.noreply.github.com>
提交于

代码差异

3 个文件 +34 -8
Modified README.md +15 -0
@@ -358,6 +358,21 @@ response = g4f.ChatCompletion.create(
358 358
359 359 # Displaying the response
360 360 print(response)
361
362 from g4f.image import ImageResponse
363
364 # Get image links from response
365 for chunk in g4f.ChatCompletion.create(
366 model=g4f.models.default, # Using the default model
367 provider=g4f.Provider.OpenaiChat, # Specifying the provider as OpenaiChat
368 messages=[{"role": "user", "content": "Create images with dogs"}],
369 access_token="...", # Need a access token from a plus user
370 stream=True,
371 ignore_stream=True
372 ):
373 if isinstance(chunk, ImageResponse):
374 print(chunk.images) # Print generated image links
375 print(chunk.alt) # Print used prompt for image generation
361 376 ```
362 377
363 378 ##### Using Browser
Modified g4f/Provider/needs_auth/OpenaiChat.py +18 -7
@@ -342,26 +342,30 @@ class OpenaiChat(AsyncGeneratorProvider, ProviderModelMixin):
342 342 raise MissingAuthError(f'Missing "access_token"')
343 343 cls._cookies = cookies
344 344
345 headers = {"Authorization": f"Bearer {access_token}"}
345 auth_headers = {"Authorization": f"Bearer {access_token}"}
346 346 async with StreamSession(
347 347 proxies={"https": proxy},
348 348 impersonate="chrome110",
349 349 timeout=timeout,
350 cookies=dict([(name, value) for name, value in cookies.items() if name == "_puid"])
350 headers={"Cookie": "; ".join(f"{k}={v}" for k, v in cookies.items())}
351 351 ) as session:
352 352 try:
353 353 image_response = None
354 354 if image:
355 image_response = await cls.upload_image(session, headers, image, kwargs.get("image_name"))
355 image_response = await cls.upload_image(session, auth_headers, image, kwargs.get("image_name"))
356 356 except Exception as e:
357 357 yield e
358 358 end_turn = EndTurn()
359 model = cls.get_model(model or await cls.get_default_model(session, headers))
359 model = cls.get_model(model or await cls.get_default_model(session, auth_headers))
360 360 model = "text-davinci-002-render-sha" if model == "gpt-3.5-turbo" else model
361 361 while not end_turn.is_end:
362 arkose_token = await cls.get_arkose_token(session)
362 363 data = {
363 364 "action": action,
364 "arkose_token": await cls.get_arkose_token(session),
365 "arkose_token": arkose_token,
366 "conversation_mode": {"kind": "primary_assistant"},
367 "force_paragen": False,
368 "force_rate_limit": False,
365 369 "conversation_id": conversation_id,
366 370 "parent_message_id": parent_id,
367 371 "model": model,
@@ -373,7 +377,11 @@ class OpenaiChat(AsyncGeneratorProvider, ProviderModelMixin):
373 377 async with session.post(
374 378 f"{cls.url}/backend-api/conversation",
375 379 json=data,
376 headers={"Accept": "text/event-stream", **headers}
380 headers={
381 "Accept": "text/event-stream",
382 "OpenAI-Sentinel-Arkose-Token": arkose_token,
383 **auth_headers
384 }
377 385 ) as response:
378 386 if not response.ok:
379 387 raise RuntimeError(f"Response {response.status_code}: {await response.text()}")
@@ -439,7 +447,8 @@ class OpenaiChat(AsyncGeneratorProvider, ProviderModelMixin):
439 447 Returns:
440 448 tuple[str, dict]: A tuple containing the access token and cookies.
441 449 """
442 with get_browser(proxy=proxy) as driver:
450 driver = get_browser(proxy=proxy)
451 try:
443 452 driver.get(f"{cls.url}/")
444 453 WebDriverWait(driver, timeout).until(EC.presence_of_element_located((By.ID, "prompt-textarea")))
445 454 access_token = driver.execute_script(
@@ -451,6 +460,8 @@ class OpenaiChat(AsyncGeneratorProvider, ProviderModelMixin):
451 460 "return accessToken;"
452 461 )
453 462 return access_token, get_driver_cookies(driver)
463 finally:
464 driver.close()
454 465
455 466 @classmethod
456 467 async def get_arkose_token(cls, session: StreamSession) -> str:
Modified setup.py +1 -1
@@ -15,7 +15,7 @@ INSTALL_REQUIRE = [
15 15
16 16 EXTRA_REQUIRE = {
17 17 'all': [
18 "curl_cffi>=0.5.10",
18 "curl_cffi>=0.6.0b9",
19 19 "certifi",
20 20 "async-property", # openai
21 21 "py-arkose-generator", # openai