返回提交历史
Modified
g4f/Provider/needs_auth/Gemini.py
+0
-2
Modified
g4f/Provider/search/GoogleAiMode.py
+3
-5
Modified
g4f/gui/server/website.py
+8
-4
Modified
g4f/requests/cdp.py
+0
-9
XFEstudio/gpt4free
Update providders.html
1f958d87
代码差异
4 个文件
+11
-20
@@ -768,7 +768,6 @@ class Gemini(AsyncGeneratorProvider, ProviderModelMixin):
768
768
response = None
769
769
for attempt in range(max_retries + 1):
770
770
try:
771
print(f"Attempt {attempt + 1} for Gemini request to model {model}")
772
771
response = await session.post(
773
772
f"{cls.url}{prefix}{REQUEST_PATH}",
774
773
data=data,
@@ -838,7 +837,6 @@ class Gemini(AsyncGeneratorProvider, ProviderModelMixin):
838
837
response.content, stream_timeout
839
838
):
840
839
line_text = line_text.strip()
841
print(f"Received line: {line_text}")
842
840
error_buffer = (error_buffer + line_text)[-4096:]
843
841
error_match = BARD_ERROR_PATTERN.search(error_buffer)
844
842
if error_match:
@@ -45,17 +45,15 @@ class GoogleAiMode(GoogleSearch):
45
45
search_results = await cls._read_search_results(session)
46
46
if search_results:
47
47
yield search_results
48
yield "\n\n---\n\n"
48
yield "\n\n---\n\n"
49
49
except Exception as e:
50
50
debug.log(f"Google Search: Error reading search results: {e}")
51
51
await session.close()
52
52
raise e
53
53
54
# Enable AI mode if model is ai-mode
55
54
try:
56
for _ in range(10):
55
for _ in range(5):
57
56
result = await session.evaluate_js("""const b =Array.from(document.querySelectorAll("a, button")).filter(a=>a.textContent.endsWith("KI‑Modus") || a.textContent.endsWith("AI-Mode")).pop(); b ? b.click() : null; !!b""")
58
debug.log(f"Google Search: Attempted #{_+1} to enable AI mode, result: {result}")
59
57
await asyncio.sleep(1)
60
58
if not result:
61
59
continue
@@ -108,7 +106,7 @@ for (let l of lines) {
108
106
// Dekodiere Hex-Escapes wie \x3d (=) am Ende des Base64-Strings
109
107
const base64Data = imgMatch[2].replace(/\\x([0-9a-fA-F]{2})/g, (_, h) => String.fromCharCode(parseInt(h, 16)));
110
108
// Ersetze nur den _setImageSrc-Aufruf, behalte umgebenden Text
111
l = l.replace(imgMatch[0], `\n`);
109
l = l.replace(imgMatch[0], ''); // `\n`);
112
110
}
113
111
114
112
// Behebt den fehlerhaften Regex für die Datei-Metadaten am Zeilenende
@@ -360,13 +360,17 @@ class Website:
360
360
const previewImg = getImage("{p['name']}")
361
361
img.parentElement.appendChild(previewImg);
362
362
let n = 1;
363
let previewRemoved = false;
363
364
const orgSrc = img.dataset.src;
364
365
img.onload = () => {{
365
img.parentElement.removeChild(previewImg);
366
n = n + 1;
366
if (!previewRemoved && previewImg.parentNode) {{
367
previewImg.parentNode.removeChild(previewImg);
368
previewRemoved = true;
369
}}
370
n = n + 1;
367
371
if (n <= 3) {{
368
372
setTimeout(() => {{
369
img.src = orgSrc + `_${{n}}.jpg`;
373
img.src = orgSrc + `_${{n}}.webp`;
370
374
}}, 1000);
371
375
}}
372
376
}};
@@ -375,7 +379,7 @@ class Website:
375
379
img.src = 'https://image.thum.io/get/width/600/{logo_url}';
376
380
return;
377
381
}}
378
if (imgs.src == orgSrc) return;
382
if (img.src == orgSrc) return;
379
383
n = 3; // Stop carousel on error
380
384
img.src = orgSrc;
381
385
}};
@@ -836,15 +836,6 @@ class CDPSession:
836
836
output = BytesIO()
837
837
image.save(output, format="WEBP", quality=85, method=6)
838
838
image_bytes = output.getvalue()
839
840
# Try to click any "Accept" or "Einwilligen" cookie consent buttons
841
for _ in range(5):
842
debug.log("Attempting to click accept button...")
843
await asyncio.sleep(1)
844
if await self.click_accept_button():
845
debug.log("Clicked accept button.")
846
await asyncio.sleep(1)
847
break
848
839
849
840
Path(filepath).write_bytes(image_bytes)
850
841
return filepath