返回提交历史
Modified
README.md
+15
-0
Modified
g4f/Provider/needs_auth/OpenaiChat.py
+18
-7
Modified
setup.py
+1
-1
XFEstudio/gpt4free
Fix OpenaiChat provider, Fix issue with curl_cffi
23e002f5
代码差异
3 个文件
+34
-8
@@ -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
@@ -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:
@@ -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