autoreg-skills-max: initial public release (restored, redacted, hardened)
This commit is contained in:
@@ -0,0 +1,98 @@
|
||||
# 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)
|
||||
Reference in New Issue
Block a user