返回提交历史
Modified
g4f/Provider/Bing.py
+2
-8
Modified
g4f/Provider/HuggingChat.py
+2
-8
Modified
g4f/Provider/Liaobots.py
+2
-7
Modified
g4f/Provider/PerplexityLabs.py
+2
-7
Modified
g4f/Provider/bing/create_images.py
+2
-8
Modified
g4f/Provider/helper.py
+13
-2
Modified
g4f/errors.py
+3
-0
Modified
g4f/typing.py
+3
-1
XFEstudio/gpt4free
Add get_connector helper
69ef224f
代码差异
8 个文件
+29
-41
@@ -11,6 +11,7 @@ from aiohttp import ClientSession, ClientTimeout, BaseConnector
11
11
from ..typing import AsyncResult, Messages, ImageType
12
12
from ..image import ImageResponse
13
13
from .base_provider import AsyncGeneratorProvider
14
from .helper import get_connector
14
15
from .bing.upload_image import upload_image
15
16
from .bing.create_images import create_images
16
17
from .bing.conversation import Conversation, create_conversation, delete_conversation
@@ -68,15 +69,8 @@ class Bing(AsyncGeneratorProvider):
68
69
cookies = {**Defaults.cookies, **cookies} if cookies else Defaults.cookies
69
70
70
71
gpt4_turbo = True if model.startswith("gpt-4-turbo") else False
71
72
if proxy and not connector:
73
try:
74
from aiohttp_socks import ProxyConnector
75
connector = ProxyConnector.from_url(proxy)
76
except ImportError:
77
raise RuntimeError('Install "aiohttp_socks" package for proxy support')
78
72
79
return stream_generate(prompt, tone, image, context, cookies, connector, web_search, gpt4_turbo, timeout)
73
return stream_generate(prompt, tone, image, context, cookies, get_connector(connector, proxy), web_search, gpt4_turbo, timeout)
80
74
81
75
def create_context(messages: Messages) -> str:
82
76
"""
@@ -6,7 +6,7 @@ from aiohttp import ClientSession, BaseConnector
6
6
7
7
from ..typing import AsyncResult, Messages
8
8
from .base_provider import AsyncGeneratorProvider, ProviderModelMixin
9
from .helper import format_prompt, get_cookies
9
from .helper import format_prompt, get_cookies, get_connector
10
10
11
11
12
12
class HuggingChat(AsyncGeneratorProvider, ProviderModelMixin):
@@ -44,16 +44,10 @@ class HuggingChat(AsyncGeneratorProvider, ProviderModelMixin):
44
44
headers = {
45
45
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36',
46
46
}
47
if proxy and not connector:
48
try:
49
from aiohttp_socks import ProxyConnector
50
connector = ProxyConnector.from_url(proxy)
51
except ImportError:
52
raise RuntimeError('Install "aiohttp_socks" package for proxy support')
53
47
async with ClientSession(
54
48
cookies=cookies,
55
49
headers=headers,
56
connector=connector
50
connector=get_connector(connector, proxy)
57
51
) as session:
58
52
async with session.post(f"{cls.url}/conversation", json={"model": cls.get_model(model)}, proxy=proxy) as response:
59
53
conversation_id = (await response.json())["conversationId"]
@@ -6,6 +6,7 @@ from aiohttp import ClientSession, BaseConnector
6
6
7
7
from ..typing import AsyncResult, Messages
8
8
from .base_provider import AsyncGeneratorProvider, ProviderModelMixin
9
from .helper import get_connector
9
10
10
11
models = {
11
12
"gpt-4": {
@@ -101,16 +102,10 @@ class Liaobots(AsyncGeneratorProvider, ProviderModelMixin):
101
102
"referer": f"{cls.url}/",
102
103
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36",
103
104
}
104
if proxy and not connector:
105
try:
106
from aiohttp_socks import ProxyConnector
107
connector = ProxyConnector.from_url(proxy)
108
except ImportError:
109
raise RuntimeError('Install "aiohttp_socks" package for proxy support')
110
105
async with ClientSession(
111
106
headers=headers,
112
107
cookie_jar=cls._cookie_jar,
113
connector=connector
108
connector=get_connector(connector, proxy)
114
109
) as session:
115
110
cls._auth_code = auth if isinstance(auth, str) else cls._auth_code
116
111
if not cls._auth_code:
@@ -6,6 +6,7 @@ from aiohttp import ClientSession, BaseConnector
6
6
7
7
from ..typing import AsyncResult, Messages
8
8
from .base_provider import AsyncGeneratorProvider, ProviderModelMixin
9
from .helper import get_connector
9
10
10
11
API_URL = "https://labs-api.perplexity.ai/socket.io/"
11
12
WS_URL = "wss://labs-api.perplexity.ai/socket.io/"
@@ -48,13 +49,7 @@ class PerplexityLabs(AsyncGeneratorProvider, ProviderModelMixin):
48
49
"Sec-Fetch-Site": "same-site",
49
50
"TE": "trailers",
50
51
}
51
if proxy and not connector:
52
try:
53
from aiohttp_socks import ProxyConnector
54
connector = ProxyConnector.from_url(proxy)
55
except ImportError:
56
raise RuntimeError('Install "aiohttp_socks" package for proxy support')
57
async with ClientSession(headers=headers, connector=connector) as session:
52
async with ClientSession(headers=headers, connector=get_connector(connector, proxy)) as session:
58
53
t = format(random.getrandbits(32), '08x')
59
54
async with session.get(
60
55
f"{API_URL}?EIO=4&transport=polling&t={t}",
@@ -13,7 +13,7 @@ from urllib.parse import quote
13
13
from typing import Generator, List, Dict
14
14
15
15
from ..create_images import CreateImagesProvider
16
from ..helper import get_cookies
16
from ..helper import get_cookies, get_connector
17
17
from ...webdriver import WebDriver, get_driver_cookies, get_browser
18
18
from ...base_provider import ProviderType
19
19
from ...image import ImageResponse
@@ -79,13 +79,7 @@ def create_session(cookies: Dict[str, str], proxy: str = None, connector: BaseCo
79
79
}
80
80
if cookies:
81
81
headers["Cookie"] = "; ".join(f"{k}={v}" for k, v in cookies.items())
82
if proxy and not connector:
83
try:
84
from aiohttp_socks import ProxyConnector
85
connector = ProxyConnector.from_url(proxy)
86
except ImportError:
87
raise RuntimeError('Install "aiohttp_socks" package for proxy support')
88
return ClientSession(headers=headers, connector=connector)
82
return ClientSession(headers=headers, connector=get_connector(connector, proxy))
89
83
90
84
async def create_images(session: ClientSession, prompt: str, proxy: str = None, timeout: int = TIMEOUT_IMAGE_CREATION) -> List[str]:
91
85
"""
@@ -6,13 +6,15 @@ import random
6
6
import secrets
7
7
import string
8
8
from asyncio import AbstractEventLoop, BaseEventLoop
9
from aiohttp import BaseConnector
9
10
from platformdirs import user_config_dir
10
11
from browser_cookie3 import (
11
12
chrome, chromium, opera, opera_gx,
12
13
brave, edge, vivaldi, firefox,
13
14
_LinuxPasswordManager, BrowserCookieError
14
15
)
15
from ..typing import Dict, Messages
16
from ..typing import Dict, Messages, Optional
17
from ..errors import AiohttpSocksError
16
18
from .. import debug
17
19
18
20
# Global variable to store cookies
@@ -147,4 +149,13 @@ def get_random_hex() -> str:
147
149
Returns:
148
150
str: A random hexadecimal string of 32 characters (16 bytes).
149
151
"""
150
return secrets.token_hex(16).zfill(32)
152
return secrets.token_hex(16).zfill(32)
153
154
def get_connector(connector: BaseConnector = None, proxy: str = None) -> Optional[BaseConnector]:
155
if proxy and not connector:
156
try:
157
from aiohttp_socks import ProxyConnector
158
connector = ProxyConnector.from_url(proxy)
159
except ImportError:
160
raise AiohttpSocksError('Install "aiohttp_socks" package for proxy support')
161
return connector
@@ -29,4 +29,7 @@ class NestAsyncioError(Exception):
29
29
pass
30
30
31
31
class ModelNotSupportedError(Exception):
32
pass
33
34
class AiohttpSocksError(Exception):
32
35
pass
@@ -1,5 +1,5 @@
1
1
import sys
2
from typing import Any, AsyncGenerator, Generator, NewType, Tuple, Union, List, Dict, Type, IO
2
from typing import Any, AsyncGenerator, Generator, NewType, Tuple, Union, List, Dict, Type, IO, Optional
3
3
from PIL.Image import Image
4
4
5
5
if sys.version_info >= (3, 8):
@@ -22,6 +22,8 @@ __all__ = [
22
22
'List',
23
23
'Dict',
24
24
'Type',
25
'IO',
26
'Optional',
25
27
'TypedDict',
26
28
'SHA256',
27
29
'CreateResult',