📍 Local Places
Find places, Go fast
Search for nearby places using a local Google Places API proxy. Two-step flow: resolve location first, then search.
Setup
bashcd {baseDir} echo "GOOGLE_PLACES_API_KEY=your-key" > .env uv venv && uv pip install -e ".[dev]" 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
-
Check server:
curl http://127.0.0.1:8000/ping -
Resolve location:
bashcurl -X POST http://127.0.0.1:8000/locations/resolve \ -H "Content-Type: application/json" \ -d '{"location_text": "Soho, London", "limit": 5}'
- Search places:
bashcurl -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 }'
- Get details:
bashcurl http://127.0.0.1:8000/places/{place_id}
Conversation Flow
- If user says "near me" or gives vague location → resolve it first
- If multiple results → show numbered list, ask user to pick
- Ask for preferences: type, open now, rating, price level
- Search with
location_biasfrom chosen location - Present results with name, rating, address, open status
- 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 incrementsfilters.open_now: booleanlimit: 1-20 for search, 1-10 for resolvelocation_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.


