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

XFEstudio/gpt4free

Add get_connector helper

69ef224f
Heiner Lohaus <hlohaus@users.noreply.github.com>
提交于

代码差异

8 个文件 +29 -41
Modified g4f/Provider/Bing.py +2 -8
@@ -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 """
Modified g4f/Provider/HuggingChat.py +2 -8
@@ -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"]
Modified g4f/Provider/Liaobots.py +2 -7
@@ -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:
Modified g4f/Provider/PerplexityLabs.py +2 -7
@@ -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}",
Modified g4f/Provider/bing/create_images.py +2 -8
@@ -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 """
Modified g4f/Provider/helper.py +13 -2
@@ -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
Modified g4f/errors.py +3 -0
@@ -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
Modified g4f/typing.py +3 -1
@@ -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',