autoreg-skills-max: initial public release (restored, redacted, hardened)

This commit is contained in:
baradok60915d52e8425
2026-10-20 02:16:32 +03:00
commit f58eafeb48
565 changed files with 60064 additions and 0 deletions

View File

@@ -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)