Files
autoreg-skills-max/skills/ai-provider-autoreg/references/g4f-gemini-web-search.md

98 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# g4f Gemini Web Search — `tools=[["google_search"]]`
## Discovery
g4f's `Provider.Gemini` (URL: `https://gemini.google.com`, uses COOKIES, not API key) supports Google Search through the `tools` parameter passed to `build_request`.
## How it works
1. `Gemini.create_async_generator` accepts `tools=kwargs.get("tools")` (line 663)
2. `Gemini.build_request` accepts `tools: list[list[str]]` and sets `request[9] = tools` (lines 988-1017)
3. The web protocol expects `[["google_search"]]` format
## Usage
```python
import g4f
response = g4f.ChatCompletion.create(
model="gemini",
provider=g4f.Provider.Gemini,
cookies=cookies_dict,
tools=[["google_search"]], # enables Google Search in web interface
messages=[{"role": "user", "content": "What's the current Bitcoin price?"}]
)
```
## Verified
- g4f version: 8.1.6
- Source: `g4f/Provider/needs_auth/Gemini.py`
- `build_request` parameter: `tools: list[list[str]] = None` → `request[9] = tools`
- No other g4f providers support this parameter (searched entire `g4f/Provider/` directory — 0 matches for `google_search`)
## Pitfalls
- The format `[["google_search"]]` is a best guess — the exact web protocol format is undocumented
- Gemini web interface may not always honor the tools parameter
- No error is thrown if the format is wrong — Gemini just ignores it silently
- Test with a query that requires real-time data to verify it's working
## Real-world usage: Calorie-Counter-AI bot (2026-08-16)
### Architecture
```
gemini_web.py (wrapper) → g4f.ChatCompletion.create(
provider=g4f.Provider.Gemini,
cookies=gemini_cookies.json,
tools=[["google_search"]]
) → gemini.google.com
```
### System prompt pattern for structured search results
Instruct Gemini to return search results as structured JSON fields:
```json
{
"prices": [{"product": "куриное филе", "price_uah": 189, "store": "АТБ"}],
"promotions": [{"store": "Сільпо", "title": "Скидка 30%", "valid_until": "2026-08-20"}]
}
```
Prompt snippet:
```
ИНСТРУМЕНТЫ: У тебя есть доступ к Google Search (google_search). Используй его чтобы:
1. Найти актуальные цены в гривнах на КАЖДЫЙ продукт из shopping_list в 2-3 магазинах
2. Найти текущие АКЦИИ и скидки на продукты
```
### Multi-store comparison pattern
Request multiple store prices per product. Post-process by grouping and sorting:
```python
from collections import defaultdict
by_product = defaultdict(list)
for p in prices:
by_product[p["product"]].append((p["price_uah"], p["store"]))
# Display best price first, show alternatives
```
### Fallback chain
1. Gemini Google Search → `prices` field
2. If empty → DuckDuckGo scraping (`price_search.py`)
3. If both fail → no price block shown
### Verified behavior
- Gemini with `tools=[["google_search"]]` returns real-time search results through g4f cookies
- The search tool is invoked automatically by Gemini when the prompt asks for current prices
- DuckDuckGo fallback catches cases where Gemini doesn't search (rate limits, silent failures)
## Related
- `gemini_web.py` in Calorie-Counter-AI project: wraps g4f Gemini with SDK-like interface
- Cookie file: `gemini_cookies.json` (extracted from browser)