feat(skills): add local-places skill for Google Places search
- Wraps Hyaxia/local_places FastAPI server
- Two-step flow: resolve location → search places
- Supports filters: type, rating, price, open_now
🦞
This commit is contained in:
87
skills/local-places/SKILL.md
Normal file
87
skills/local-places/SKILL.md
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
---
|
||||||
|
name: local-places
|
||||||
|
description: Search for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
|
||||||
|
homepage: https://github.com/Hyaxia/local_places
|
||||||
|
metadata: {"clawdis":{"emoji":"📍","requires":{"bins":["uv"],"env":["GOOGLE_PLACES_API_KEY"]},"primaryEnv":"GOOGLE_PLACES_API_KEY"}}
|
||||||
|
---
|
||||||
|
|
||||||
|
# Local Places
|
||||||
|
|
||||||
|
Search for nearby places using a local Google Places API proxy. Two-step flow: resolve location first, then search.
|
||||||
|
|
||||||
|
## Setup
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd ~/Projects/local_places
|
||||||
|
uv run --env-file .env uvicorn local_places.main:app --host 127.0.0.1 --port 8000
|
||||||
|
```
|
||||||
|
|
||||||
|
Requires `GOOGLE_PLACES_API_KEY` in `.env` or environment.
|
||||||
|
|
||||||
|
## Quick Start
|
||||||
|
|
||||||
|
1. **Check server:** `curl http://127.0.0.1:8000/ping`
|
||||||
|
|
||||||
|
2. **Resolve location:**
|
||||||
|
```bash
|
||||||
|
curl -X POST http://127.0.0.1:8000/locations/resolve \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{"location_text": "Soho, London", "limit": 5}'
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Search places:**
|
||||||
|
```bash
|
||||||
|
curl -X POST http://127.0.0.1:8000/places/search \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{
|
||||||
|
"query": "coffee shop",
|
||||||
|
"location_bias": {"lat": 51.5137, "lng": -0.1366, "radius_m": 1000},
|
||||||
|
"filters": {"open_now": true, "min_rating": 4.0},
|
||||||
|
"limit": 10
|
||||||
|
}'
|
||||||
|
```
|
||||||
|
|
||||||
|
4. **Get details:**
|
||||||
|
```bash
|
||||||
|
curl http://127.0.0.1:8000/places/{place_id}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Conversation Flow
|
||||||
|
|
||||||
|
1. If user says "near me" or gives vague location → resolve it first
|
||||||
|
2. If multiple results → show numbered list, ask user to pick
|
||||||
|
3. Ask for preferences: type, open now, rating, price level
|
||||||
|
4. Search with `location_bias` from chosen location
|
||||||
|
5. Present results with name, rating, address, open status
|
||||||
|
6. Offer to fetch details or refine search
|
||||||
|
|
||||||
|
## Filter Constraints
|
||||||
|
|
||||||
|
- `filters.types`: exactly ONE type (e.g., "restaurant", "cafe", "gym")
|
||||||
|
- `filters.price_levels`: integers 0-4 (0=free, 4=very expensive)
|
||||||
|
- `filters.min_rating`: 0-5 in 0.5 increments
|
||||||
|
- `filters.open_now`: boolean
|
||||||
|
- `limit`: 1-20 for search, 1-10 for resolve
|
||||||
|
- `location_bias.radius_m`: must be > 0
|
||||||
|
|
||||||
|
## Response Format
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"results": [
|
||||||
|
{
|
||||||
|
"place_id": "ChIJ...",
|
||||||
|
"name": "Coffee Shop",
|
||||||
|
"address": "123 Main St",
|
||||||
|
"location": {"lat": 51.5, "lng": -0.1},
|
||||||
|
"rating": 4.6,
|
||||||
|
"price_level": 2,
|
||||||
|
"types": ["cafe", "food"],
|
||||||
|
"open_now": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"next_page_token": "..."
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Use `next_page_token` as `page_token` in next request for more results.
|
||||||
Reference in New Issue
Block a user