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

XFEstudio/gpt4free

fix: update stop_browser calls to be asynchronous across multiple provider files

0943d16e
hlohaus <983577+hlohaus@users.noreply.github.com>
提交于

代码差异

9 个文件 +24 -24
Modified g4f/Provider/Copilot.py +2 -2
@@ -385,10 +385,10 @@ async def get_access_token_and_cookies(url: str, proxy: str = None, needs_auth:
385 385 break
386 386 elif needs_auth and next(filter(lambda x: "auth0" in x, cookies), None):
387 387 break
388 stop_browser()
388 await stop_browser()
389 389 return access_token, useridentitytype, cookies
390 390 finally:
391 stop_browser()
391 await stop_browser()
392 392
393 393 def readHAR(url: str):
394 394 api_key = None
Modified g4f/Provider/needs_auth/Gemini.py +1 -1
@@ -120,7 +120,7 @@ class Gemini(AsyncGeneratorProvider, ProviderModelMixin):
120 120 await page.close()
121 121 cls._cookies = cookies
122 122 finally:
123 stop_browser()
123 await stop_browser()
124 124
125 125 @classmethod
126 126 async def start_auto_refresh(cls, proxy: str = None) -> None:
Modified g4f/Provider/needs_auth/Grok.py +1 -1
@@ -118,7 +118,7 @@ class Grok(AsyncAuthedProvider, ProviderModelMixin):
118 118 auth_result.cookies[c.name] = c.value
119 119 await page.close()
120 120 finally:
121 stop_browser()
121 await stop_browser()
122 122 yield auth_result
123 123
124 124 @classmethod
Modified g4f/Provider/needs_auth/MicrosoftDesigner.py +1 -1
@@ -168,4 +168,4 @@ async def get_access_token_and_user_agent(url: str, proxy: str = None):
168 168 await page.close()
169 169 return access_token, user_agent
170 170 finally:
171 stop_browser()
171 await stop_browser()
Modified g4f/Provider/needs_auth/Video.py +7 -7
@@ -120,7 +120,7 @@ class Video(AsyncGeneratorProvider, ProviderModelMixin):
120 120 yield ContinueResponse("Timeout waiting for Video URL")
121 121 page = await browser.get(cls.urls[model].format(quote(prompt)))
122 122 except Exception as e:
123 stop_browser()
123 await stop_browser()
124 124 debug.error(f"Error opening page:", e)
125 125 if prompt not in RequestConfig.urls:
126 126 RequestConfig.urls[prompt] = []
@@ -141,7 +141,7 @@ class Video(AsyncGeneratorProvider, ProviderModelMixin):
141 141 if button:
142 142 break
143 143 if idx == 299:
144 stop_browser()
144 await stop_browser()
145 145 raise RuntimeError("Failed to wait for user menu.")
146 146 if model == "search" and page is not None:
147 147 await page.send(nodriver.cdp.network.enable())
@@ -151,7 +151,7 @@ class Video(AsyncGeneratorProvider, ProviderModelMixin):
151 151 await asyncio.sleep(1)
152 152 response = await RequestConfig.get_response(prompt, True)
153 153 if response:
154 stop_browser()
154 await stop_browser()
155 155 yield Reasoning(label="Found", status="")
156 156 yield response
157 157 return
@@ -229,7 +229,7 @@ class Video(AsyncGeneratorProvider, ProviderModelMixin):
229 229 if idx == 59:
230 230 debug.error(e)
231 231 if idx == 59:
232 stop_browser()
232 await stop_browser()
233 233 raise RuntimeError("Failed to click 'New Video' button")
234 234 await asyncio.sleep(3)
235 235 if model != "search" and page is not None:
@@ -242,12 +242,12 @@ class Video(AsyncGeneratorProvider, ProviderModelMixin):
242 242 await asyncio.sleep(2)
243 243 response = await RequestConfig.get_response(prompt, model=="search")
244 244 if response:
245 stop_browser()
245 await stop_browser()
246 246 yield Reasoning(label="Finished", status="")
247 247 yield response
248 248 return
249 249 if idx == 299:
250 stop_browser()
250 await stop_browser()
251 251 raise RuntimeError("Failed to get Video URL")
252 252 finally:
253 stop_browser()
253 await stop_browser()
Modified g4f/Provider/needs_auth/You.py +1 -1
@@ -94,7 +94,7 @@ class You(AsyncGeneratorProvider, ProviderModelMixin):
94 94 cookies[c.name] = c.value
95 95 await page.close()
96 96 finally:
97 stop_browser()
97 await stop_browser()
98 98 async with StreamSession(
99 99 proxy=proxy,
100 100 impersonate="chrome",
Modified g4f/api/__init__.py +1 -1
@@ -103,7 +103,7 @@ async def lifespan(app: FastAPI):
103 103 if has_nodriver:
104 104 for browser in util.get_registered_instances():
105 105 if browser.connection:
106 browser.stop()
106 await browser.stop()
107 107 lock_file = os.path.join(get_cookies_dir(), ".nodriver_is_open")
108 108 if os.path.exists(lock_file):
109 109 try:
Modified g4f/cookies.py +1 -1
@@ -53,7 +53,7 @@ class BrowserConfig:
53 53 impersonate: str = "chrome"
54 54
55 55 @staticmethod
56 def stop_browser():
56 async def stop_browser():
57 57 return None
58 58
59 59 browser_executable_path: str = None
Modified g4f/requests/__init__.py +9 -9
@@ -82,7 +82,7 @@ async def get_args_from_webview(url: str) -> dict:
82 82
83 83
84 84 def get_cookie_params_from_dict(cookies: Cookies, url: str = None, domain: str = None) -> list[CookieParam]:
85 [CookieParam.from_json({
85 return [CookieParam.from_json({
86 86 "name": key,
87 87 "value": value,
88 88 "url": url,
@@ -104,7 +104,7 @@ async def get_args_from_nodriver(
104 104 if browser is None:
105 105 browser, stop_browser = await get_nodriver(proxy=proxy, timeout=timeout, user_data_dir=user_data_dir, browser_args=browser_args)
106 106 else:
107 def stop_browser():
107 async def stop_browser():
108 108 pass
109 109 try:
110 110 debug.log(f"Open nodriver with url: {url}")
@@ -115,7 +115,7 @@ async def get_args_from_nodriver(
115 115 await browser.cookies.set_all(get_cookie_params_from_dict(cookies, url=url, domain=domain))
116 116 page = await browser.get(url)
117 117 user_agent = await page.evaluate("window.navigator.userAgent", return_by_value=True)
118 while not await page.evaluate("document.querySelector('body:not(.no-js)')"):
118 while not await page.evaluate("!!document.querySelector('body:not(.no-js)')"):
119 119 await asyncio.sleep(1)
120 120 if wait_for is not None:
121 121 await page.wait_for(wait_for, timeout=timeout)
@@ -123,7 +123,7 @@ async def get_args_from_nodriver(
123 123 await callback(page)
124 124 for c in await page.send(nodriver.cdp.network.get_cookies([url])):
125 125 cookies[c.name] = c.value
126 stop_browser()
126 await stop_browser()
127 127 return {
128 128 "impersonate": "chrome",
129 129 "cookies": cookies,
@@ -135,7 +135,7 @@ async def get_args_from_nodriver(
135 135 "proxy": proxy,
136 136 }
137 137 except:
138 stop_browser()
138 await stop_browser()
139 139 raise
140 140
141 141
@@ -201,7 +201,7 @@ async def get_nodriver(
201 201 raise TimeoutError("Nodriver is already in use, please try again later.")
202 202 else:
203 203 debug.log(f"Nodriver: Browser was opened {time_open} secs ago, closing it.")
204 BrowserConfig.stop_browser()
204 await BrowserConfig.stop_browser()
205 205 lock_file.unlink(missing_ok=True)
206 206 lock_file.write_text(str(time.time()))
207 207 debug.log(f"Open nodriver with user_dir: {user_data_dir}")
@@ -227,10 +227,10 @@ async def get_nodriver(
227 227 else:
228 228 raise
229 229
230 def on_stop():
230 async def on_stop():
231 231 try:
232 232 if BrowserConfig.port is None and browser.connection:
233 browser.stop()
233 await browser.stop()
234 234 except:
235 235 pass
236 236 finally:
@@ -245,7 +245,7 @@ async def get_nodriver(
245 245 async def get_nodriver_session(**kwargs):
246 246 browser, stop_browser = await get_nodriver(**kwargs)
247 247 yield browser
248 stop_browser()
248 await stop_browser()
249 249
250 250
251 251 async def sse_stream(iter_lines: AsyncIterator[bytes]) -> AsyncIterator[dict]: