The official gpt4free repository | various collection of powerful language models | opus 4.6 gpt 5.3 kimi 2.5 deepseek v3.2 gemini 3
This report summarizes scanner evidence for xtekky/gpt4free, a Python project with 66,781 GitHub stars. SynthScan examined 114,898 lines of code across 462 source files, recording 2621 pattern matches distributed across 23 syntactic categories. The legacy adjusted pattern signal is 37.5 (High pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 973 finding(s).
Are imports declared and package/API names verified? 626 finding(s).
Are wrappers, guards, and repeated structures necessary? 1616 finding(s).
Which changes need focused human review? 2621 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 2621 distinct pattern matches across 23 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | g4f/cookies.py | 246 | except OSError: | CODE |
| HIGH | g4f/cookies.py | 291 | except (json.JSONDecodeError, FileNotFoundError): | CODE |
| HIGH | g4f/cookies.py | 311 | except ValueError: | CODE |
| HIGH | g4f/cookies.py | 441 | except (json.JSONDecodeError, FileNotFoundError): | CODE |
| HIGH | g4f/cookies.py | 218 | except BrowserCookieError: | CODE |
| HIGH | g4f/cookies.py | 244 | except OSError: | CODE |
| HIGH | g4f/config.py | 55 | except OSError: | CODE |
| HIGH | g4f/version.py | 101 | except ImportError: | CODE |
| HIGH | g4f/version.py | 103 | except PackageNotFoundError: | CODE |
| HIGH | g4f/tray.py | 60 | except Exception: | CODE |
| HIGH | g4f/tools/files.py | 408 | except IndexError: | CODE |
| HIGH | g4f/tools/files.py | 208 | except zipfile.BadZipFile: | CODE |
| HIGH | g4f/tools/optimize_request.py | 797 | except (json.JSONDecodeError, TypeError): | CODE |
| HIGH | g4f/tools/tool_support.py | 154 | except Exception: | CODE |
| HIGH | g4f/tools/tool_support.py | 415 | except Exception: | CODE |
| HIGH | g4f/tools/tool_support.py | 159 | except Exception: | CODE |
| HIGH | g4f/tools/tool_support.py | 468 | except Exception: | CODE |
| HIGH | g4f/tools/tool_support.py | 461 | except Exception: | CODE |
| HIGH | g4f/integration/markitdown/__init__.py | 240 | except NotImplementedError: | CODE |
| HIGH | g4f/integration/markitdown/_audio_converter.py | 109 | except MissingDependencyException: | CODE |
| HIGH | g4f/integration/markitdown/_youtube_converter.py | 77 | except Exception: | CODE |
| HIGH | g4f/providers/config_provider.py | 451 | except ImportError: | CODE |
| HIGH | g4f/providers/base_provider.py | 134 | except Exception: | CODE |
| HIGH | g4f/providers/base_provider.py | 503 | except OSError: | CODE |
| HIGH | g4f/providers/asyncio.py | 39 | except RuntimeError: | CODE |
| HIGH | g4f/providers/asyncio.py | 94 | except StopAsyncIteration: | CODE |
| HIGH | g4f/providers/asyncio.py | 73 | except Exception: | CODE |
| HIGH | g4f/providers/cache.py | 43 | except (FileNotFoundError, OSError) as e: | CODE |
| HIGH | g4f/providers/any_provider.py | 504 | except KeyError: | CODE |
| HIGH | g4f/providers/tool_support.py | 47 | except Exception: | CODE |
| HIGH | g4f/Provider/DeepAI.py | 257 | except Exception as e: | CODE |
| HIGH | g4f/Provider/AgentTools.py | 183 | except Exception: | CODE |
| HIGH | g4f/Provider/__init__.py | 643 | except ImportError: | CODE |
| HIGH | g4f/Provider/__init__.py | 670 | except AttributeError: | CODE |
| HIGH | g4f/Provider/__init__.py | 583 | except ImportError: | CODE |
| HIGH | g4f/Provider/__init__.py | 653 | except ImportError: | CODE |
| HIGH | g4f/Provider/Cloudflare.py | 119 | except ModelNotFoundError: | CODE |
| HIGH | g4f/Provider/BraveSearch.py | 432 | except json.JSONDecodeError: | CODE |
| HIGH | g4f/Provider/ChatGPT.py | 143 | except TimeoutError: | CODE |
| HIGH | g4f/Provider/Quillbot.py | 86 | except json.JSONDecodeError: | CODE |
| HIGH | g4f/Provider/DeepInfra.py | 107 | except Exception: | CODE |
| HIGH | g4f/Provider/DeepInfra.py | 134 | except Exception: | CODE |
| HIGH | g4f/Provider/ChatGPTLightweight.py | 298 | except Exception: | CODE |
| HIGH | g4f/Provider/ChatGPTLightweight.py | 276 | except OSError: | CODE |
| HIGH | g4f/Provider/hf_space/raise_for_status.py | 21 | except Exception: | CODE |
| HIGH | g4f/Provider/qwen/sharedTokenManager.py | 251 | except Exception: | CODE |
| HIGH | g4f/Provider/qwen/sharedTokenManager.py | 83 | except Exception: | CODE |
| HIGH | g4f/Provider/qwen/sharedTokenManager.py | 243 | except Exception: | CODE |
| HIGH | g4f/Provider/qwen/sharedTokenManager.py | 241 | except Exception: | CODE |
| HIGH | g4f/Provider/github/GithubCopilot.py | 309 | except Exception: | CODE |
| HIGH | g4f/Provider/github/sharedTokenManager.py | 151 | except TokenManagerError: | CODE |
| HIGH | g4f/Provider/needs_auth/BlackboxPro.py | 2580 | except NoValidHarFileError: | CODE |
| HIGH | g4f/Provider/needs_auth/Puter.py | 437 | except ModelNotFoundError: | CODE |
| HIGH | g4f/Provider/needs_auth/GeminiCLI.py | 1320 | except Exception: | CODE |
| HIGH | g4f/Provider/needs_auth/GeminiCLI.py | 314 | except Exception: | CODE |
| HIGH | g4f/Provider/needs_auth/OpenaiChat.py | 636 | except ModelNotFoundError: | CODE |
| HIGH | g4f/Provider/needs_auth/Gemini.py | 992 | except (TypeError, IndexError, KeyError): | CODE |
| HIGH | g4f/Provider/needs_auth/Gemini.py | 1020 | except (TypeError, IndexError, KeyError): | CODE |
| HIGH | g4f/Provider/needs_auth/Gemini.py | 827 | except ValueError: | CODE |
| HIGH | g4f/Provider/needs_auth/Gemini.py | 891 | except (IndexError, TypeError): | CODE |
| 135 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | g4f/Provider/Qwen.py | 252 | "The `arguments` value MUST be a JSON object (not a string, not null) matching the " | CODE |
| HIGH | g4f/Provider/Qwen.py | 443 | "window.__baxia__ && window.__baxia__.getFYModule" | CODE |
| HIGH⚡ | g4f/Provider/Qwen.py | 560 | if (!window.baxiaInitialized || typeof sdk?.getUA !== 'function') return null; | CODE |
| HIGH⚡ | g4f/Provider/Qwen.py | 560 | if (!window.baxiaInitialized || typeof sdk?.getUA !== 'function') return null; | CODE |
| HIGH⚡ | g4f/Provider/Qwen.py | 565 | if (!valid(ua)) return null; | CODE |
| HIGH⚡ | g4f/Provider/Qwen.py | 569 | } catch { return null; } | CODE |
| HIGH | g4f/Provider/Qwen.py | 595 | return !!editor && editor.getClientRects().length > 0 | STRING |
| HIGH | g4f/Provider/ChatGPTLightweight.py | 613 | # The real guest UI sends a constant "[1,null]" here (captured), | COMMENT |
| HIGH | g4f/Provider/ChatGPTLightweight.py | 615 | "timingToken": "[1,null]", | CODE |
| HIGH⚡ | g4f/Provider/search/GoogleAiMode.py | 60 | }).pop(); b ? b.click() : null; !!b""") | CODE |
| HIGH⚡ | g4f/Provider/search/GoogleAiMode.py | 70 | if (child.nodeType === Node.ELEMENT_NODE && child.tagName === "STRONG") { | CODE |
| HIGH⚡ | g4f/Provider/search/GoogleAiMode.py | 71 | textNodes.push("**"); | CODE |
| HIGH⚡ | g4f/Provider/search/GoogleAiMode.py | 73 | if (child.nodeType === Node.TEXT_NODE && child.textContent) { | CODE |
| HIGH⚡ | g4f/Provider/search/GoogleAiMode.py | 74 | textNodes.push(child.textContent); | CODE |
| HIGH⚡ | g4f/Provider/search/GoogleAiMode.py | 76 | textNodes.push(...getTextNodes(child)); | CODE |
| HIGH⚡ | g4f/Provider/search/GoogleAiMode.py | 78 | if (child.nodeType === Node.ELEMENT_NODE && child.tagName === "STRONG") { | CODE |
| HIGH⚡ | g4f/Provider/search/GoogleAiMode.py | 79 | textNodes.push("**"); | CODE |
| HIGH⚡ | g4f/Provider/search/GoogleAiMode.py | 81 | if (child.nodeType === Node.ELEMENT_NODE && child.tagName === "DIV") { | CODE |
| HIGH⚡ | g4f/Provider/search/GoogleAiMode.py | 82 | if (child.parentElement && child.parentElement.tagName !== "DIV") { | CODE |
| HIGH⚡ | g4f/Provider/search/GoogleAiMode.py | 83 | textNodes.push("\\n"); | CODE |
| HIGH | g4f/Provider/search/GoogleAiMode.py | 94 | allTexts.push(text); | CODE |
| HIGH⚡ | g4f/Provider/search/GoogleSearch.py | 74 | const link = linkEl.href ? new URL(linkEl.href || '/') : null; | CODE |
| HIGH⚡ | g4f/Provider/search/GoogleSearch.py | 77 | const snippet = snippetEl ? snippetEl.innerText.replace('...Read more', '...') : undefined; | CODE |
| HIGH⚡ | g4f/Provider/search/GoogleSearch.py | 78 | if (title && link) { | CODE |
| HIGH⚡ | g4f/Provider/search/GoogleSearch.py | 79 | results.push({ title, link: link.toString(), snippet }); | CODE |
| HIGH⚡ | g4f/Provider/search/GoogleSearch.py | 79 | results.push({ title, link: link.toString(), snippet }); | CODE |
| HIGH | g4f/Provider/audio/ElevenLabs.py | 89 | document.body || new Promise(r => { | STRING |
| HIGH | g4f/Provider/audio/ElevenLabs.py | 180 | if (p.audio_base64) chunks.push(p.audio_base64); | CODE |
| HIGH | g4f/Provider/needs_auth/Gemini.py | 446 | MODEL_HEADER_KEY: "[1,null,null,null,null,null,null,null,[4]]", | CODE |
| HIGH | g4f/Provider/needs_auth/Arena.py | 293 | "window.grecaptcha && window.grecaptcha.enterprise" | CODE |
| HIGH | g4f/Provider/needs_auth/Arena.py | 328 | "window.grecaptcha && window.grecaptcha.enterprise" | CODE |
| HIGH | g4f/Provider/needs_auth/Arena.py | 343 | resolve(null); | STRING |
| HIGH | g4f/Provider/needs_auth/mini_max/crypt.py | 47 | M += hash_function("") # Mimics hashFunction(undefined) in JS | CODE |
| HIGH | g4f/Provider/needs_auth/mini_max/crypt.py | 67 | const os_name = navigator.userAgentData?.platform || navigator.platform || "Unknown"; | STRING |
| HIGH | g4f/Provider/needs_auth/mini_max/crypt.py | 76 | const cpu_core_num = navigator.hardwareConcurrency || 8; | STRING |
| HIGH | g4f/Provider/glm/captcha_solver.py | 65 | Object.defineProperty(navigator, 'webdriver', { get: () => undefined }); | CODE |
| HIGH | g4f/Provider/openai/turnstile_vm.py | 63 | _JS_UNDEFINED = object() # missing register (JS undefined) | CODE |
| HIGH⚡ | g4f/mcp/pa_provider.py | 198 | Returns a binary blob: ``nonce (12) || ciphertext || tag (16)``. | STRING |
| HIGH | g4f/mcp/pa_provider.py | 259 | Format: ``G4FENC (6) || version (1) || nonce (12) || ciphertext || tag`` | STRING |
| HIGH | g4f/mcp/browser_dom.py | 92 | exec('selectAll', false, null); | CODE |
| HIGH | g4f/mcp/browser_dom.py | 112 | const isField = target instanceof HTMLInputElement || target instanceof HTMLTextAreaElement; | CODE |
| HIGH | g4f/mcp/browser_dom.py | 113 | const setter = isField ? Object.getOwnPropertyDescriptor(Object.getPrototypeOf(target), 'value')?.set : null; | CODE |
| HIGH⚡ | g4f/mcp/browser_dom.py | 146 | (document.head || document.documentElement).appendChild(s); | CODE |
| HIGH | g4f/mcp/browser_dom.py | 194 | exec('selectAll', false, null); | CODE |
| HIGH | g4f/mcp/browser_dom.py | 213 | const isField = target instanceof HTMLInputElement || target instanceof HTMLTextAreaElement; | CODE |
| HIGH | g4f/mcp/browser_dom.py | 214 | const setter = isField ? Object.getOwnPropertyDescriptor(Object.getPrototypeOf(target), 'value')?.set : null; | CODE |
| HIGH | g4f/mcp/browser_dom.py | 251 | // Parentheses are required: mixing ?? with || in one expression is a | COMMENT |
| HIGH | g4f/mcp/browser_dom.py | 276 | case 'A': return text ? `[${text}](${node.href || node.getAttribute('href') || ''})` : ''; | CODE |
| HIGH | g4f/mcp/browser_dom.py | 277 | case 'IMG': return ` || ''})`; | CODE |
| HIGH⚡ | g4f/requests/cdp.py | 1578 | "window.G4FAutomation && window.G4FAutomation.closeTarget(%s)" | CODE |
| HIGH⚡ | g4f/requests/cdp.py | 1613 | "window.G4FAutomation && window.G4FAutomation.closeTarget(%s)" | CODE |
| HIGH⚡ | g4f/requests/cdp.py | 1998 | let cfIframe = null; | CODE |
| HIGH⚡ | g4f/requests/cdp.py | 2000 | if (iframe.src && iframe.src.includes('challenges.cloudflare.com')) { | CODE |
| HIGH⚡ | g4f/requests/cdp.py | 2005 | if (!cfIframe) return null; | CODE |
| HIGH⚡ | g4f/requests/cdp.py | 2068 | const text = (button.innerText || button.value || button.textContent || '').trim(); | CODE |
| HIGH⚡ | g4f/requests/cdp.py | 2070 | foundButtons.push(button); | CODE |
| HIGH⚡ | g4f/requests/cdp.py | 2078 | const iframeDoc = iframe.contentDocument || iframe.contentWindow?.document; | CODE |
| HIGH⚡ | g4f/requests/cdp.py | 2087 | foundButtons.push(...btns); | CODE |
| HIGH⚡ | g4f/requests/cdp.py | 2103 | if (acceptBtns && acceptBtns.length > 0) {{ | CODE |
| HIGH⚡ | g4f/requests/cdp.py | 2107 | clickedTexts.push(btn.innerText || btn.value || btn.textContent || ''); | CODE |
| 68 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | g4f/tools/optimize_request.py | 1195 | # ────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | g4f/tools/optimize_request.py | 1197 | # ────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | g4f/tools/optimize_request.py | 34 | # ── System prompt condensation ────────────────────────────────────────────── | COMMENT |
| MEDIUM | g4f/tools/optimize_request.py | 116 | # ── Tools to remove entirely ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | g4f/tools/optimize_request.py | 152 | # ── Tool description replacements ─────────────────────────────────────────── | COMMENT |
| MEDIUM | g4f/tools/optimize_request.py | 647 | # ── Message-level optimization ────────────────────────────────────────────── | COMMENT |
| MEDIUM | g4f/tools/optimize_request.py | 774 | # ── Tool-loop detection ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | g4f/tools/optimize_request.py | 999 | # ── Tool result truncation ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | g4f/tools/optimize_request.py | 1068 | # ── Strip redundant tool_call fields ───────────────────────────────────────── | COMMENT |
| MEDIUM | g4f/tools/optimize_request.py | 1124 | # ── Collapse whitespace in message content ────────────────────────────────── | COMMENT |
| MEDIUM | g4f/tools/optimize_request.py | 1163 | # ── Drop stale context (old user turns beyond a threshold) ─────────────────── | COMMENT |
| MEDIUM | g4f/tools/token_optimizer.py | 41 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | g4f/tools/token_optimizer.py | 43 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | g4f/tools/token_optimizer.py | 110 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | g4f/tools/token_optimizer.py | 112 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | g4f/tools/token_optimizer.py | 159 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | g4f/tools/token_optimizer.py | 161 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | g4f/providers/config_provider.py | 77 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | g4f/providers/config_provider.py | 79 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | g4f/providers/config_provider.py | 129 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | g4f/providers/config_provider.py | 131 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | g4f/providers/config_provider.py | 175 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | g4f/providers/config_provider.py | 177 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | g4f/providers/config_provider.py | 340 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | g4f/providers/config_provider.py | 342 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | g4f/providers/config_provider.py | 370 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | g4f/providers/config_provider.py | 372 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | g4f/providers/config_provider.py | 440 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | g4f/providers/config_provider.py | 442 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | g4f/Provider/qwen/cookie_generator.py | 491 | # ----------------------- | COMMENT |
| MEDIUM⚡ | g4f/Provider/qwen/cookie_generator.py | 493 | # ----------------------- | COMMENT |
| MEDIUM | g4f/Provider/qwen/generate_ua.py | 10 | # ========================= | COMMENT |
| MEDIUM | g4f/Provider/qwen/generate_ua.py | 12 | # ========================= | COMMENT |
| MEDIUM | g4f/Provider/qwen/generate_ua.py | 44 | # ========================= | COMMENT |
| MEDIUM | g4f/Provider/qwen/generate_ua.py | 46 | # ========================= | COMMENT |
| MEDIUM | g4f/Provider/qwen/generate_ua.py | 150 | # ========================= | COMMENT |
| MEDIUM | g4f/Provider/qwen/generate_ua.py | 152 | # ========================= | COMMENT |
| MEDIUM | g4f/Provider/qwen/generate_ua.py | 246 | # ========================= | COMMENT |
| MEDIUM | g4f/Provider/qwen/generate_ua.py | 248 | # ========================= | COMMENT |
| MEDIUM | g4f/Provider/qwen/fingerprint.py | 5 | # ========================= | COMMENT |
| MEDIUM | g4f/Provider/qwen/fingerprint.py | 7 | # ========================= | COMMENT |
| MEDIUM | g4f/Provider/qwen/fingerprint.py | 38 | # ========================= | COMMENT |
| MEDIUM | g4f/Provider/qwen/fingerprint.py | 40 | # ========================= | COMMENT |
| MEDIUM | g4f/Provider/qwen/fingerprint.py | 93 | # ========================= | COMMENT |
| MEDIUM | g4f/Provider/qwen/fingerprint.py | 95 | # ========================= | COMMENT |
| MEDIUM | g4f/Provider/qwen/fingerprint.py | 108 | # ========================= | COMMENT |
| MEDIUM | g4f/Provider/qwen/fingerprint.py | 110 | # ========================= | COMMENT |
| MEDIUM | g4f/Provider/glm/__init__.py | 101 | # ── Signature (spoofing.ts: computeSignature) ────────────────────────── | COMMENT |
| MEDIUM | g4f/Provider/glm/__init__.py | 114 | # ── Fingerprint params (spoofing.ts: buildFingerprintParams) ──────────── | COMMENT |
| MEDIUM | g4f/Provider/glm/__init__.py | 180 | # ── Headers (spoofing.ts: buildGlmHeaders) ────────────────────────────── | COMMENT |
| MEDIUM | g4f/Provider/glm/__init__.py | 211 | # ── Variables (spoofing.ts: buildGlmVariables) ────────────────────────── | COMMENT |
| MEDIUM | g4f/Provider/glm/__init__.py | 232 | # ── Auth cache (AuthFileMixin) ────────────────────────────────────────── | COMMENT |
| MEDIUM | g4f/Provider/glm/__init__.py | 256 | # ── Models ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | g4f/Provider/glm/__init__.py | 285 | # ── Session (session.ts: getOrCreateChatSession) ──────────────────────── | COMMENT |
| MEDIUM⚡ | g4f/Provider/glm/__init__.py | 351 | # ── Captcha ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | g4f/Provider/glm/__init__.py | 361 | # ── Main entry point (pipeline.ts: proxyViaGlmWebChat) ────────────────── | COMMENT |
| MEDIUM | g4f/Provider/glm/__init__.py | 528 | # ── SSE stream parser (stream.ts: parseGlmSseLine) ────────────────────── | COMMENT |
| MEDIUM⚡ | g4f/mcp/pa_provider.py | 186 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | g4f/mcp/pa_provider.py | 188 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | g4f/mcp/pa_provider.py | 76 | # --------------------------------------------------------------------------- | COMMENT |
| 169 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | g4f/cookies.py | 184 | def load_cookies_from_browsers( | CODE |
| LOW | g4f/tools/files.py | 313 | def stream_read_parts_and_refine( | CODE |
| LOW | g4f/tools/files.py | 340 | def split_file_by_size_and_newline( | CODE |
| LOW | g4f/tools/files.py | 618 | async def async_read_and_download_urls( | CODE |
| LOW | g4f/tools/optimize_request.py | 1071 | def _strip_redundant_tool_fields(messages: Messages) -> int: | CODE |
| LOW | g4f/tools/optimize_request.py | 1127 | def _collapse_message_whitespace(messages: Messages) -> int: | CODE |
| LOW | g4f/tools/optimize_request.py | 1235 | def _drop_empty_trailing_messages(messages: Messages) -> int: | CODE |
| LOW | g4f/tools/run_tools.py | 147 | def provider_supports_native_tools(provider: ProviderType) -> bool: | STRING |
| LOW | g4f/tools/tool_support.py | 262 | def normalize_stream_tool_calls(tool_calls: Any, start_index: int = 0) -> list[dict]: | CODE |
| LOW | g4f/tools/tool_support.py | 372 | def parse_tool_calls_from_text(content: str, tool_names: Optional[list[str]] = None) -> list[dict]: | CODE |
| LOW | g4f/tools/tool_support.py | 479 | def _extract_calls_from_json_obj(obj: Any) -> list[dict]: | CODE |
| LOW | g4f/tools/tool_support.py | 517 | def filter_tool_calls_by_names(calls: list[dict], tool_names: Optional[list[str]] = None) -> list[dict]: | CODE |
| LOW | g4f/integration/langchain.py | 15 | def new_convert_message_to_dict(message: BaseMessage) -> dict: | CODE |
| LOW | g4f/integration/markitdown/__init__.py | 330 | def _convert_github_url_to_raw(url: str) -> str: | CODE |
| LOW | g4f/integration/markitdown/_youtube_converter.py | 47 | def _extract_youtube_video_id(url: str) -> Optional[str]: | CODE |
| LOW | g4f/providers/base_provider.py | 138 | def get_async_provider_method(provider: type) -> Optional[callable]: | CODE |
| LOW | g4f/providers/tool_support.py | 128 | def _parse_stringified_tool_calls(text: str) -> list[dict]: | CODE |
| LOW | g4f/providers/tool_support.py | 196 | def _merge_messages_to_single_user(messages: Messages) -> Messages: | CODE |
| LOW | g4f/providers/tool_support.py | 217 | def _preprocess_tool_messages(messages: Messages) -> Messages: | CODE |
| LOW | g4f/Provider/CopilotLeagcy.py | 427 | async def get_access_token_and_cookies( | CODE |
| LOW | g4f/Provider/CopilotSession.py | 78 | def _normalize_stream_message(msg): | CODE |
| LOW | g4f/Provider/AgentTools.py | 259 | def _merge_tool_call_fragments(accumulated: list, fragments: list) -> list: | CODE |
| LOW | g4f/Provider/Copilot.py | 78 | def _normalize_stream_message(msg): | CODE |
| LOW | g4f/Provider/Yupp.py | 164 | def sync_record_model_feedback( | CODE |
| LOW⚡ | g4f/Provider/Qwen.py | 555 | async def _read_browser_fingerprint(cls, session, timeout: float = 30) -> dict: | CODE |
| LOW | g4f/Provider/BraveSearch.py | 83 | def _parse_sveltekit_tap_data(cls, raw_json: dict) -> dict: | CODE |
| LOW | g4f/Provider/DeepInfra.py | 11 | async def _get_turnstile_token_async(model: str) -> str: | CODE |
| LOW | g4f/Provider/DeepInfra.py | 141 | async def get_turnstile_token_async(model: str = None) -> str: | STRING |
| LOW | g4f/Provider/qwen/fingerprint.py | 191 | def generate_fingerprint_batch(count: int, options: Dict[str, Any] = None) -> List[str]: | CODE |
| LOW | g4f/Provider/yupp/models.py | 192 | class DataManager: | CODE |
| LOW⚡ | g4f/Provider/yupp/token_extractor.py | 334 | def _extract_tokens_from_html(self, html: str) -> List[str]: | CODE |
| LOW | g4f/Provider/needs_auth/gemini_utils.py | 255 | def extract_gemini_error_code(value) -> int | None: | CODE |
| LOW | g4f/Provider/needs_auth/MicrosoftDesigner.py | 171 | async def get_access_token_and_user_agent(url: str, proxy: str = None): | CODE |
| LOW⚡ | g4f/Provider/needs_auth/BlackboxPro.py | 2522 | def _find_session_in_har_files(cls) -> Optional[dict]: | CODE |
| LOW | g4f/Provider/needs_auth/GeminiCLI.py | 106 | def get_gemini_cli_user_agent(model: str = "gemini-2.5-pro") -> str: | CODE |
| LOW | g4f/Provider/needs_auth/GeminiCLI.py | 638 | def _messages_to_gemini_format( | CODE |
| LOW | g4f/Provider/needs_auth/MetaAI.py | 262 | def generate_offline_threading_id() -> str: | CODE |
| LOW | g4f/Provider/needs_auth/Gemini.py | 179 | def _extract_response_content(response_part: list) -> str | None: | CODE |
| LOW | g4f/Provider/needs_auth/Gemini.py | 297 | def _has_authenticated_session(cookies: Cookies) -> bool: | CODE |
| LOW | g4f/Provider/needs_auth/Gemini.py | 301 | def _resolve_gemini_conversation( | CODE |
| LOW | g4f/Provider/needs_auth/DeepSeek.py | 193 | def _build_upload_session_headers(headers: dict) -> dict: | CODE |
| LOW | g4f/Provider/needs_auth/DeepSeek.py | 219 | def _build_completion_payload( | CODE |
| LOW⚡ | g4f/Provider/needs_auth/Antigravity.py | 357 | def get_antigravity_model_metadata(model_name: str) -> Optional[dict]: | CODE |
| LOW⚡ | g4f/Provider/needs_auth/Antigravity.py | 364 | def is_known_antigravity_model(model_name: str) -> bool: | CODE |
| LOW⚡ | g4f/Provider/needs_auth/Antigravity.py | 374 | def antigravity_model_uses_thinking_levels(model_name: str) -> bool: | CODE |
| LOW⚡ | g4f/Provider/needs_auth/Antigravity.py | 380 | def antigravity_model_requires_stream_for_non_stream(model_name: str) -> bool: | CODE |
| LOW⚡ | g4f/Provider/needs_auth/Antigravity.py | 389 | def normalize_antigravity_text_part(part: dict) -> None: | CODE |
| LOW⚡ | g4f/Provider/needs_auth/Antigravity.py | 398 | def normalize_antigravity_text_parts(parts: list) -> None: | CODE |
| LOW⚡ | g4f/Provider/needs_auth/Antigravity.py | 404 | def get_antigravity_client_model_thinking_level(model_name: str) -> str: | CODE |
| LOW⚡ | g4f/Provider/needs_auth/Antigravity.py | 409 | def apply_antigravity_thinking_level_config( | CODE |
| LOW⚡ | g4f/Provider/needs_auth/Antigravity.py | 419 | def apply_antigravity_client_model_thinking_level( | CODE |
| LOW | g4f/Provider/needs_auth/Antigravity.py | 90 | def get_antigravity_oauth_creds_path() -> Path: | CODE |
| LOW | g4f/Provider/needs_auth/Antigravity.py | 305 | def normalize_antigravity_model_id(model_name: str) -> str: | CODE |
| LOW | g4f/Provider/needs_auth/Antigravity.py | 320 | def resolve_antigravity_upstream_model(model_name: str) -> str: | CODE |
| LOW | g4f/Provider/needs_auth/Antigravity.py | 329 | def expand_antigravity_client_models(upstream_model: str) -> List[str]: | CODE |
| LOW | g4f/Provider/needs_auth/Antigravity.py | 431 | def apply_antigravity_client_model_thinking_level_to_request( | CODE |
| LOW | g4f/Provider/needs_auth/Antigravity.py | 469 | def generate_image_gen_request_id() -> str: | CODE |
| LOW | g4f/Provider/needs_auth/Antigravity.py | 478 | def generate_stable_session_id(payload: dict) -> str: | CODE |
| LOW | g4f/Provider/needs_auth/Antigravity.py | 514 | def normalize_thinking_budget(model_name: str, budget: int) -> int: | CODE |
| LOW | g4f/Provider/needs_auth/Antigravity.py | 528 | def normalize_antigravity_thinking( | CODE |
| 506 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | g4f/cookies.py | 223 | except Exception as e: | CODE |
| LOW | g4f/cookies.py | 500 | except Exception as e: | CODE |
| LOW | g4f/version.py | 33 | except Exception as e: | CODE |
| LOW | g4f/version.py | 61 | except Exception as e: | CODE |
| LOW | g4f/version.py | 133 | except Exception: | CODE |
| LOW | g4f/version.py | 159 | except Exception as e: | CODE |
| LOW | g4f/tray.py | 60 | except Exception: | CODE |
| LOW | g4f/tray.py | 78 | except Exception: | CODE |
| LOW | g4f/tray.py | 147 | except Exception as exc: | CODE |
| MEDIUM | g4f/tray.py | 140 | def _run(): | CODE |
| LOW | g4f/tools/files.py | 72 | except Exception: | CODE |
| LOW | g4f/tools/files.py | 509 | except Exception as e: | CODE |
| LOW | g4f/tools/files.py | 685 | except Exception as e: | CODE |
| LOW | g4f/tools/files.py | 708 | except Exception as e: | CODE |
| LOW⚡ | g4f/tools/token_optimizer.py | 106 | except Exception: | CODE |
| LOW⚡ | g4f/tools/token_optimizer.py | 155 | except Exception: | CODE |
| LOW | g4f/tools/token_optimizer.py | 220 | except Exception as exc: | CODE |
| LOW | g4f/tools/run_tools.py | 99 | except Exception: | CODE |
| LOW | g4f/tools/run_tools.py | 294 | except Exception as e: | CODE |
| LOW | g4f/tools/run_tools.py | 501 | except Exception as e: | CODE |
| LOW | g4f/tools/run_tools.py | 506 | except Exception: | CODE |
| LOW | g4f/tools/run_tools.py | 599 | except Exception as e: | CODE |
| LOW | g4f/tools/run_tools.py | 713 | except Exception: | CODE |
| LOW⚡ | g4f/tools/tool_support.py | 451 | except Exception: | CODE |
| LOW⚡ | g4f/tools/tool_support.py | 457 | except Exception: | CODE |
| LOW⚡ | g4f/tools/tool_support.py | 461 | except Exception: | CODE |
| LOW⚡ | g4f/tools/tool_support.py | 468 | except Exception: | CODE |
| LOW | g4f/tools/tool_support.py | 58 | except Exception: | CODE |
| LOW | g4f/tools/tool_support.py | 154 | except Exception: | CODE |
| LOW | g4f/tools/tool_support.py | 159 | except Exception: | CODE |
| LOW | g4f/tools/tool_support.py | 247 | except Exception: | CODE |
| LOW | g4f/tools/tool_support.py | 307 | except Exception: | CODE |
| LOW | g4f/tools/tool_support.py | 415 | except Exception: | CODE |
| LOW | g4f/integration/markitdown/_llm_caption.py | 25 | except Exception as e: | CODE |
| LOW | g4f/integration/markitdown/__init__.py | 252 | except Exception: | CODE |
| LOW | g4f/integration/markitdown/_youtube_converter.py | 77 | except Exception: | CODE |
| LOW | g4f/integration/markitdown/_youtube_converter.py | 187 | except Exception as e: | CODE |
| MEDIUM | g4f/integration/markitdown/_youtube_converter.py | 188 | print(f"Error extracting description: {e}") | CODE |
| LOW | g4f/integration/markitdown/_youtube_converter.py | 248 | except Exception as e: | CODE |
| MEDIUM | g4f/integration/markitdown/_youtube_converter.py | 251 | print(f"Error fetching transcript: {e}") | CODE |
| LOW | g4f/integration/markitdown/_youtube_converter.py | 264 | except Exception as e: | CODE |
| MEDIUM | g4f/integration/markitdown/_youtube_converter.py | 265 | print(f"Error processing transcript: {e}") | CODE |
| LOW | g4f/integration/markitdown/_youtube_converter.py | 309 | except Exception as e: | CODE |
| LOW | g4f/providers/config_provider.py | 396 | except Exception as e: | CODE |
| LOW | g4f/providers/config_provider.py | 470 | except Exception as e: | CODE |
| LOW | g4f/providers/config_provider.py | 579 | except Exception as e: | CODE |
| LOW | g4f/providers/retry_provider.py | 137 | except Exception as e: | CODE |
| LOW | g4f/providers/retry_provider.py | 237 | except Exception as e: | CODE |
| LOW | g4f/providers/retry_provider.py | 319 | except Exception as e: | CODE |
| LOW | g4f/providers/base_provider.py | 134 | except Exception: | CODE |
| LOW | g4f/providers/base_provider.py | 352 | except Exception: | CODE |
| LOW | g4f/providers/base_provider.py | 357 | except Exception as e: | CODE |
| MEDIUM | g4f/providers/base_provider.py | 112 | def wait_for_next(): | CODE |
| LOW | g4f/providers/asyncio.py | 73 | except Exception: | CODE |
| LOW | g4f/providers/cache.py | 30 | except Exception as e: | CODE |
| MEDIUM | g4f/providers/cache.py | 31 | print(f"Error writing to {file}: {e}") | CODE |
| LOW | g4f/providers/any_provider.py | 185 | except Exception as e: | CODE |
| LOW | g4f/providers/any_provider.py | 251 | except Exception as e: | CODE |
| LOW | g4f/providers/any_provider.py | 529 | except Exception as e: | CODE |
| MEDIUM | g4f/providers/any_provider.py | 507 | def _safe_getattr(p): | CODE |
| 501 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | g4f/cookies.py | 1 | CODE | |
| LOW | g4f/files.py | 1 | CODE | |
| LOW | g4f/config.py | 1 | CODE | |
| LOW | g4f/version.py | 1 | CODE | |
| LOW | g4f/version.py | 3 | CODE | |
| LOW | g4f/tray.py | 11 | CODE | |
| LOW | g4f/models.py | 1 | CODE | |
| LOW | g4f/__init__.py | 1 | CODE | |
| LOW | g4f/__init__.py | 7 | CODE | |
| LOW | g4f/__init__.py | 7 | CODE | |
| LOW | g4f/__init__.py | 10 | CODE | |
| LOW | g4f/__init__.py | 10 | CODE | |
| LOW | g4f/__init__.py | 10 | CODE | |
| LOW | g4f/__init__.py | 10 | CODE | |
| LOW | g4f/__init__.py | 12 | CODE | |
| LOW | g4f/__init__.py | 12 | CODE | |
| LOW | g4f/__init__.py | 12 | CODE | |
| LOW | g4f/__init__.py | 16 | CODE | |
| LOW | g4f/typing.py | 1 | CODE | |
| LOW | g4f/typing.py | 4 | CODE | |
| LOW | g4f/typing.py | 4 | CODE | |
| LOW | g4f/typing.py | 4 | CODE | |
| LOW | g4f/typing.py | 4 | CODE | |
| LOW | g4f/tools/auth.py | 1 | CODE | |
| LOW | g4f/tools/files.py | 1 | CODE | |
| LOW | g4f/tools/files.py | 88 | CODE | |
| LOW | g4f/tools/fetch_and_scrape.py | 1 | CODE | |
| LOW | g4f/tools/optimize_request.py | 9 | CODE | |
| LOW | g4f/tools/media.py | 1 | CODE | |
| LOW | g4f/tools/token_optimizer.py | 31 | CODE | |
| LOW | g4f/tools/run_tools.py | 1 | CODE | |
| LOW | g4f/tools/run_tools.py | 3 | CODE | |
| LOW | g4f/tools/run_tools.py | 24 | CODE | |
| LOW | g4f/tools/run_tools.py | 15 | CODE | |
| LOW | g4f/tools/web_search.py | 1 | CODE | |
| LOW | g4f/tools/tool_support.py | 1 | CODE | |
| LOW | g4f/integration/langchain.py | 1 | CODE | |
| LOW | g4f/integration/pydantic_ai.py | 1 | CODE | |
| LOW | g4f/providers/config_provider.py | 54 | CODE | |
| LOW | g4f/providers/retry_provider.py | 1 | CODE | |
| LOW | g4f/providers/base_provider.py | 1 | CODE | |
| LOW | g4f/providers/asyncio.py | 1 | CODE | |
| LOW | g4f/providers/cache.py | 1 | CODE | |
| LOW | g4f/providers/create_images.py | 1 | CODE | |
| LOW | g4f/providers/response.py | 1 | CODE | |
| LOW | g4f/providers/types.py | 1 | CODE | |
| LOW | g4f/providers/types.py | 3 | CODE | |
| LOW | g4f/providers/types.py | 5 | CODE | |
| LOW | g4f/providers/types.py | 5 | CODE | |
| LOW | g4f/providers/helper.py | 1 | CODE | |
| LOW | g4f/providers/any_provider.py | 1 | CODE | |
| LOW | g4f/providers/tool_support.py | 1 | CODE | |
| LOW | g4f/providers/tool_support.py | 5 | CODE | |
| LOW | g4f/providers/tool_support.py | 6 | CODE | |
| LOW | g4f/providers/tool_support.py | 10 | CODE | |
| LOW | g4f/providers/tool_support.py | 13 | CODE | |
| LOW | g4f/Provider/DeepAI.py | 4 | CODE | |
| LOW | g4f/Provider/DeepAI.py | 9 | CODE | |
| LOW | g4f/Provider/OperaAria.py | 1 | CODE | |
| LOW | g4f/Provider/OperaAria.py | 13 | CODE | |
| 434 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | g4f/cookies.py | 184 | CODE | |
| LOW | g4f/cookies.py | 236 | CODE | |
| LOW | g4f/cookies.py | 271 | CODE | |
| LOW | g4f/cookies.py | 371 | CODE | |
| LOW | g4f/cookies.py | 446 | CODE | |
| LOW | g4f/tools/files.py | 118 | CODE | |
| LOW | g4f/tools/files.py | 189 | CODE | |
| LOW | g4f/tools/files.py | 280 | CODE | |
| LOW | g4f/tools/files.py | 340 | CODE | |
| LOW | g4f/tools/files.py | 421 | CODE | |
| LOW | g4f/tools/files.py | 588 | CODE | |
| LOW | g4f/tools/files.py | 603 | CODE | |
| LOW | g4f/tools/files.py | 618 | CODE | |
| LOW | g4f/tools/files.py | 633 | CODE | |
| LOW | g4f/tools/fetch_and_scrape.py | 23 | CODE | |
| LOW | g4f/tools/optimize_request.py | 653 | CODE | |
| LOW | g4f/tools/optimize_request.py | 671 | CODE | |
| LOW | g4f/tools/optimize_request.py | 696 | CODE | |
| LOW | g4f/tools/optimize_request.py | 803 | CODE | |
| LOW | g4f/tools/optimize_request.py | 1002 | CODE | |
| LOW | g4f/tools/optimize_request.py | 1127 | CODE | |
| LOW | g4f/tools/media.py | 64 | CODE | |
| LOW | g4f/tools/token_optimizer.py | 169 | CODE | |
| LOW | g4f/tools/run_tools.py | 300 | CODE | |
| LOW | g4f/tools/run_tools.py | 515 | CODE | |
| LOW | g4f/tools/run_tools.py | 721 | CODE | |
| LOW | g4f/tools/run_tools.py | 216 | CODE | |
| LOW | g4f/tools/tool_support.py | 10 | CODE | |
| LOW | g4f/tools/tool_support.py | 98 | CODE | |
| LOW | g4f/tools/tool_support.py | 186 | CODE | |
| LOW | g4f/tools/tool_support.py | 335 | CODE | |
| LOW | g4f/tools/tool_support.py | 372 | CODE | |
| LOW | g4f/tools/tool_support.py | 479 | CODE | |
| LOW | g4f/integration/markitdown/__init__.py | 186 | CODE | |
| LOW | g4f/integration/markitdown/_audio_converter.py | 50 | CODE | |
| LOW | g4f/integration/markitdown/_youtube_converter.py | 143 | CODE | |
| LOW | g4f/integration/markitdown/_youtube_converter.py | 288 | CODE | |
| LOW | g4f/providers/config_provider.py | 261 | CODE | |
| LOW | g4f/providers/config_provider.py | 510 | CODE | |
| LOW | g4f/providers/retry_provider.py | 89 | CODE | |
| LOW | g4f/providers/retry_provider.py | 201 | CODE | |
| LOW | g4f/providers/retry_provider.py | 294 | CODE | |
| LOW | g4f/providers/base_provider.py | 107 | CODE | |
| LOW | g4f/providers/base_provider.py | 180 | CODE | |
| LOW | g4f/providers/base_provider.py | 451 | CODE | |
| LOW | g4f/providers/base_provider.py | 564 | CODE | |
| LOW | g4f/providers/base_provider.py | 194 | CODE | |
| LOW | g4f/providers/asyncio.py | 24 | CODE | |
| LOW | g4f/providers/asyncio.py | 61 | CODE | |
| LOW | g4f/providers/create_images.py | 71 | CODE | |
| LOW | g4f/providers/helper.py | 12 | CODE | |
| LOW | g4f/providers/helper.py | 84 | CODE | |
| LOW | g4f/providers/any_provider.py | 139 | CODE | |
| LOW | g4f/providers/any_provider.py | 299 | CODE | |
| LOW | g4f/providers/any_provider.py | 401 | CODE | |
| LOW | g4f/providers/tool_support.py | 91 | CODE | |
| LOW | g4f/providers/tool_support.py | 157 | CODE | |
| LOW | g4f/providers/tool_support.py | 181 | CODE | |
| LOW | g4f/providers/tool_support.py | 217 | CODE | |
| LOW | g4f/providers/tool_support.py | 342 | CODE | |
| 230 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | g4f/tools/optimize_request.py | 1097 | # Check if a subsequent tool message references this call. | COMMENT |
| LOW | g4f/integration/markitdown/__init__.py | 236 | # Check if the converter will accept the file, and if so, try to convert it | COMMENT |
| LOW | g4f/integration/markitdown/__init__.py | 312 | # Check if we have a seekable stream. If not, load the entire stream into memory. | COMMENT |
| LOW | g4f/integration/markitdown/_audio_converter.py | 112 | # Return the result | COMMENT |
| LOW | g4f/Provider/DeepAI.py | 115 | # Check if we should directly generate an image if the user is just asking for it | COMMENT |
| LOW | g4f/Provider/Perplexity.py | 200 | # Check if this is a followup request (has session tokens) | COMMENT |
| LOW | g4f/Provider/Yupp.py | 736 | # Check if this is a token-related error | COMMENT |
| LOW | g4f/Provider/hf_space/CohereForAI_C4AI_Command.py | 48 | # Check if the model exists directly in our models list | COMMENT |
| LOW | g4f/Provider/hf_space/CohereForAI_C4AI_Command.py | 52 | # Check if there's an alias for this model | COMMENT |
| LOW | g4f/Provider/github/copilotTokenProvider.py | 42 | # Check if we have a valid cached token | COMMENT |
| LOW | g4f/Provider/yupp/token_extractor.py | 97 | # Check if this is actually a cached token that failed | COMMENT |
| LOW | g4f/Provider/needs_auth/BlackboxPro.py | 2372 | # Check if there are valid session data in HAR files | COMMENT |
| LOW | g4f/Provider/needs_auth/BlackboxPro.py | 2408 | # Check if there are valid session data in HAR files | COMMENT |
| LOW⚡ | g4f/Provider/needs_auth/BlackboxPro.py | 2515 | # Check if this is a premium session | COMMENT |
| LOW | g4f/Provider/needs_auth/BlackboxPro.py | 2557 | # Check if this is a valid session object | COMMENT |
| LOW | g4f/Provider/needs_auth/BlackboxPro.py | 2719 | # Check if we have a valid session | COMMENT |
| LOW | g4f/Provider/needs_auth/Puter.py | 419 | # Check if we need to use a vision model | COMMENT |
| LOW | g4f/Provider/needs_auth/OpenaiChat.py | 391 | # Check if there is an image response | COMMENT |
| LOW | g4f/Provider/needs_auth/Gemini.py | 1288 | # Check if the cache file was modified in the last minute to avoid 429 Too Many Requests | COMMENT |
| LOW | g4f/Provider/glm/captcha_solver.py | 137 | # Check if the browser is still connected by opening a tab. | COMMENT |
| LOW | g4f/mcp/apply_patch.py | 27 | # Check if patch is available in PATH | COMMENT |
| LOW | g4f/mcp/apply_patch.py | 190 | # Check if any changes | COMMENT |
| LOW | g4f/mcp/tools.py | 203 | # Check if image_data has url attribute | COMMENT |
| LOW | g4f/image/__init__.py | 251 | # Check if the data URI starts with 'data:image' and contains an image format (e.g., jpeg, png, gif) | COMMENT |
| LOW | g4f/image/__init__.py | 256 | # Check if the image format is one of the allowed formats (jpg, jpeg, png, gif) | COMMENT |
| LOW⚡ | g4f/requests/cdp.py | 546 | # Verify if it's reachable and working | COMMENT |
| LOW | g4f/client/service.py | 72 | # Check if model string specifies agent-tools or Provider:Model format | COMMENT |
| LOW | etc/examples/vision_images.py | 44 | local_image.close() # Close file after use | CODE |
| LOW⚡ | etc/tool/commit.py | 173 | # Check if it's a git repository | COMMENT |
| LOW⚡ | etc/tool/commit.py | 176 | # Check if we're in a subdirectory of a git repo | COMMENT |
| LOW | scripts/start-browser.sh | 146 | # Check if the remote-debugging port is accepting connections. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | g4f/providers/base_provider.py | 295 | Abstract method for creating asynchronous results. Args: model (str): The model to use for | STRING |
| HIGH | g4f/providers/base_provider.py | 384 | Abstract method for creating an asynchronous generator. Args: model (str): The model to us | STRING |
| HIGH | g4f/Provider/needs_auth/OpenaiChat.py | 569 | Create an asynchronous generator for the conversation. Args: model (str): The model name. | STRING |
| HIGH | g4f/Provider/needs_auth/bing/create_images.py | 72 | Creates images based on a given prompt using Bing's service. Args: session (ClientSession): Active cli | STRING |
| HIGH | g4f/mcp/pa_provider.py | 1182 | Load a ``.pa.py`` file and return the provider class it defines. The file is executed inside the safe sandbox. The | STRING |
| HIGH | g4f/image/__init__.py | 289 | Detect file type from magic number / header signature. Args: binary_data (bytes): File binary data | STRING |
| HIGH | g4f/client/service.py | 44 | Retrieves the model and provider based on input parameters. Args: model (Union[Model, str]): The model | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | g4f/models.py | 632 | # Create a list of all models and their providers | COMMENT |
| MEDIUM | g4f/integration/markitdown/__init__.py | 194 | # Create a copy of the page_converters list, sorted by priority. | COMMENT |
| MEDIUM | g4f/providers/any_provider.py | 277 | # Create a mapping of parent providers to their children | COMMENT |
| MEDIUM | …f/Provider/hf_space/BlackForestLabs_Flux1KontextDev.py | 89 | # Create a conversation/session data container holding tokens and session hash | COMMENT |
| MEDIUM | g4f/requests/cdp.py | 1157 | # Create a new tab target | COMMENT |
| MEDIUM | g4f/requests/cdp.py | 1278 | # Create the tab target via CDP — there is no /json/new endpoint. | STRING |
| MEDIUM | g4f/api/__init__.py | 1185 | # Create the completion response | COMMENT |
| MEDIUM | g4f/client/factory.py | 52 | # Create a new class that extends OpenaiTemplate | COMMENT |
| MEDIUM | projects/discord-bot/bot.py | 780 | # Create a placeholder then edit/send final result. | COMMENT |
| MEDIUM | etc/examples/mcp_tools_demo.py | 22 | # Create a tool call request for web search | COMMENT |
| MEDIUM | etc/examples/mcp_tools_demo.py | 58 | # Create a tool call request for web scraping | COMMENT |
| MEDIUM | etc/examples/mcp_tools_demo.py | 94 | # Create a tool call request for image generation | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | g4f/cookies.py | 176 | def set_cookies(domain_name: str, cookies: Cookies = None) -> None: | CODE |
| LOW | g4f/cookies.py | 232 | def set_cookies_dir(dir_path: str) -> None: | CODE |
| LOW | g4f/tray.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | g4f/typing.py | 88 | __all__ = [ | CODE |
| LOW⚡ | g4f/tools/optimize_request.py | 1200 | def _set_content(msg: dict, content: Any) -> None: | CODE |
| LOW | g4f/tools/optimize_request.py | 577 | def _set_tool_description(tool: Any, desc: str) -> None: | CODE |
| LOW | g4f/tools/token_optimizer.py | 255 | __all__ = [ | CODE |
| LOW | g4f/proxy/constants.py | 25 | __all__ = [ | CODE |
| LOW | g4f/Provider/search/DDGS.py | 189 | def set_text(self, text: str) -> None: | CODE |
| LOW | g4f/Provider/yupp/models.py | 28 | def _setup_session(self) -> None: | CODE |
| LOW | g4f/Provider/yupp/models.py | 45 | def _set_cookies(self) -> None: | CODE |
| LOW | g4f/Provider/openai/turnstile_vm.py | 153 | def _setup(self, program: list, requirements_token: str, user_agent: str) -> None: | CODE |
| LOW | g4f/mcp/pa_provider.py | 335 | def _update_secret_conversation_index(user_id: str, conversation: dict) -> None: | CODE |
| LOW | g4f/mcp/__init__.py | 43 | __all__ = [ | CODE |
| LOW | g4f/requests/cdp.py | 74 | logger = logging.getLogger(__name__) | CODE |
| LOW | g4f/gui/server/api.py | 40 | logger = logging.getLogger(__name__) | CODE |
| LOW | g4f/gui/server/backend_api.py | 98 | logger = logging.getLogger(__name__) | CODE |
| LOW | g4f/api/__init__.py | 140 | logger = logging.getLogger(__name__) | CODE |
| LOW | g4f/api/cdp_relay.py | 686 | def _set_extension_mode(enabled: bool) -> None: | CODE |
| LOW | projects/remote-desktop/remote_desktop/rooms.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | projects/remote-desktop/remote_desktop/__init__.py | 12 | __all__ = [ | CODE |
| LOW | projects/remote-desktop/remote_desktop/input_bridge.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | projects/remote-desktop/remote_desktop/app.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | etc/tool/fofa_ollama_parser.py | 497 | def update_swarm(hosts: list[str], path: Path = OLLAMA_SWARM_PATH) -> None: | CODE |
| LOW | g4f-go/bundle/remote_desktop/rooms.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | g4f-go/bundle/remote_desktop/__init__.py | 12 | __all__ = [ | CODE |
| LOW | g4f-go/bundle/remote_desktop/input_bridge.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | g4f-go/bundle/remote_desktop/app.py | 22 | logger = logging.getLogger(__name__) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | g4f/tools/files.py | 479 | CODE | |
| LOW | g4f/providers/response.py | 247 | CODE | |
| LOW | g4f/Provider/Pollinations.py | 248 | CODE | |
| LOW | g4f/Provider/PollinationsImage.py | 34 | CODE | |
| LOW | …f/Provider/hf_space/BlackForestLabs_Flux1KontextDev.py | 73 | CODE | |
| LOW | g4f/Provider/hf_space/StabilityAI_SD35Large.py | 28 | CODE | |
| LOW | g4f/Provider/hf_space/BlackForestLabs_Flux1Dev.py | 77 | CODE | |
| LOW | g4f/Provider/template/OpenaiTemplate.py | 216 | CODE | |
| LOW | g4f/Provider/search/DDGS.py | 197 | CODE | |
| LOW | g4f/Provider/extra/Replicate.py | 20 | CODE | |
| LOW | g4f/Provider/needs_auth/BlackboxPro.py | 2653 | CODE | |
| LOW | g4f/Provider/needs_auth/GeminiCLI.py | 763 | CODE | |
| LOW | g4f/Provider/needs_auth/OpenaiChat.py | 548 | CODE | |
| LOW | g4f/Provider/needs_auth/Gemini.py | 595 | CODE | |
| LOW | g4f/Provider/needs_auth/DeepSeek.py | 829 | CODE | |
| LOW | g4f/Provider/needs_auth/Anthropic.py | 86 | CODE | |
| LOW | g4f/Provider/needs_auth/Antigravity.py | 1934 | CODE | |
| LOW | g4f/Provider/needs_auth/Cohere.py | 53 | CODE | |
| LOW | g4f/Provider/needs_auth/hf/HuggingFaceMedia.py | 121 | CODE | |
| LOW | g4f/image/copy_images.py | 146 | CODE | |
| LOW | g4f/image/__init__.py | 417 | CODE | |
| LOW | g4f/requests/__init__.py | 129 | CODE | |
| LOW | g4f/requests/cdp_browser.py | 177 | CODE | |
| LOW | g4f/api/__init__.py | 865 | CODE | |
| LOW | g4f/api/__init__.py | 1997 | CODE | |
| LOW | g4f/client/__init__.py | 355 | CODE | |
| LOW | g4f/client/__init__.py | 756 | CODE | |
| LOW | g4f/client/stubs.py | 65 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | g4f/client/__init__.py | 889 | api_key="your-api-key" | STRING |
| HIGH | etc/testing/test_deepseek_tools.py | 101 | # api_key="your-api-key-here" # Uncomment if needed | COMMENT |
| HIGH | etc/examples/aibadgr.py | 7 | export AIBADGR_API_KEY="your-api-key-here" | STRING |
| HIGH | etc/examples/aibadgr.py | 17 | api_key="your-api-key-here", # Or set AIBADGR_API_KEY environment variable | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | g4f/Provider/AgentTools.py | 61 | # stopping it. The running stream ends with a session token (JsonConversation) | COMMENT |
| LOW | g4f/Provider/AgentTools.py | 81 | COMMENT | |
| LOW | g4f/Provider/ChatGPTLightweight.py | 101 | _script_srcs: list = [] | COMMENT |
| LOW | g4f/Provider/search/YouTube.py | 181 | # To actually run demo() | COMMENT |
| LOW | g4f/Provider/extra/Together.py | 121 | ], | COMMENT |
| LOW | g4f/Provider/needs_auth/OpenaiChat.py | 361 | # last_message = None | COMMENT |
| LOW | g4f/Provider/needs_auth/Arena.py | 261 | await textarea.send_keys("Hello") | COMMENT |
| LOW | g4f/requests/cdp.py | 2321 | # html2canvasEL.src = 'https://html2canvas.hertzen.com/dist/html2canvas.min.js'; | COMMENT |
| LOW | g4f/api/_logging.py | 21 | # frame, depth = logging.currentframe(), 2 | COMMENT |
| LOW | g4f/api/_tokenizer.py | 1 | # import tiktoken | COMMENT |
| LOW | projects/remote-desktop/deploy/setup-turn.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | etc/examples/config.yaml | 1 | # g4f config.yaml – Custom model routing configuration | COMMENT |
| LOW | etc/examples/config.yaml | 21 | # | COMMENT |
| LOW | .github/workflows/build-packages.yml | 401 | # needs: [prepare, build-pypi, create-release] | COMMENT |
| LOW | g4f-go/runtime_android.go | 21 | // 2. merges the android tarball into the app's writable dir | COMMENT |
| LOW | g4f-go/build-all.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | g4f-go/fetch-python.sh | 1 | #!/usr/bin/env bash | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | g4f/Provider/qwen/QwenCode.py | 0 | synchronous cli entry point for setup.py console_scripts. | STRING |
| HIGH | g4f/Provider/github/GithubCopilot.py | 0 | synchronous cli entry point for setup.py console_scripts. | STRING |
| HIGH | g4f/Provider/needs_auth/GeminiCLI.py | 0 | synchronous cli entry point for setup.py console_scripts. | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | etc/unittest/test_openai_token_images.py | 384 | CODE | |
| MEDIUM | etc/unittest/test_openai_token_images.py | 150 | CODE | |
| MEDIUM | etc/unittest/test_auth_retry.py | 106 | CODE | |
| MEDIUM | etc/unittest/mocks.py | 75 | CODE | |
| MEDIUM | etc/unittest/mocks.py | 84 | CODE | |
| MEDIUM | etc/unittest/mocks.py | 93 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | g4f/Provider/OperaAria.py | 85 | # Step 1: Get anonymous access token | COMMENT |
| LOW | g4f/Provider/OperaAria.py | 104 | # Step 2: Anonymous signup | COMMENT |
| LOW | g4f/Provider/OperaAria.py | 120 | # Step 3: Exchange auth_token for refresh token | COMMENT |
| LOW | g4f/Provider/OperaAria.py | 215 | # Step 1: Get signed URL | COMMENT |
| LOW | g4f/Provider/OperaAria.py | 227 | # Step 2: Upload to GCS | COMMENT |
| LOW | g4f/Provider/OperaAria.py | 242 | # Step 3: Poll for completion | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | g4f/Provider/OperaAria.py | 85 | # Step 1: Get anonymous access token | COMMENT |
| LOW | g4f/Provider/OperaAria.py | 104 | # Step 2: Anonymous signup | COMMENT |
| LOW | g4f/Provider/OperaAria.py | 120 | # Step 3: Exchange auth_token for refresh token | COMMENT |
| LOW | g4f/Provider/OperaAria.py | 215 | # Step 1: Get signed URL | COMMENT |
| LOW | g4f/Provider/OperaAria.py | 227 | # Step 2: Upload to GCS | COMMENT |
| LOW | g4f/Provider/OperaAria.py | 242 | # Step 3: Poll for completion | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | g4f/Provider/qwen/cookie_generator.py | 492 | # Example usage | COMMENT |
| LOW | etc/examples/messages.py | 27 | # Usage example | COMMENT |
| LOW | g4f-go/sync-bundle.sh | 9 | # Usage: | COMMENT |
| LOW | g4f-go/build-all.sh | 9 | # Usage: | COMMENT |
| LOW | g4f-go/fetch-python.sh | 9 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | g4f/Provider/github/oauthFlow.py | 80 | interval += 5 # Increase interval as requested by GitHub | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | etc/tool/fofa_ollama_parser.py | 200 | # If not deep scan and no specific filters, just use a single empty iteration | COMMENT |
| MEDIUM | g4f-go/download.go | 360 | // Best effort: log-free skip keeps extraction robust. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | g4f/Provider/needs_auth/BlackboxPro.py | 352 | "description": "UI-TARS 72B is an open-source multimodal AI model designed specifically for automating browser a | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | g4f/mcp/server.py | 151 | async def handle_request(self, request: MCPRequest) -> MCPResponse: | CODE |