Spaces:
Sleeping
Sleeping
import streamlit as st | |
import requests | |
import chromadb | |
import json | |
from sentence_transformers import SentenceTransformer | |
# Load Embedding Model | |
model = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2") | |
# Connect to ChromaDB (Persistent) | |
DB_PATH = "./recipe_db" | |
client = chromadb.PersistentClient(path=DB_PATH) | |
collection = client.get_or_create_collection("recipes") | |
# Function to Fetch Restaurant Data Using OpenStreetMap (Overpass API) | |
def get_restaurants(city): | |
overpass_url = "http://overpass-api.de/api/interpreter" | |
query = f""" | |
[out:json]; | |
area[name="{city}"]->.searchArea; | |
node["amenity"="restaurant"](area.searchArea); | |
out; | |
""" | |
response = requests.get(overpass_url, params={'data': query}) | |
if response.status_code == 200: | |
data = response.json() | |
restaurants = [] | |
for element in data.get("elements", []): | |
name = element.get("tags", {}).get("name", "Unknown Restaurant") | |
restaurants.append(name) | |
return restaurants[:5] # Return top 5 results | |
else: | |
return ["No restaurant data found."] | |
# Sample Food Dishes (You can expand this dataset) | |
food_data = { | |
"Lahore": [ | |
{"name": "Nihari", "price": "800 PKR"}, | |
{"name": "Karahi", "price": "1200 PKR"}, | |
{"name": "Haleem", "price": "600 PKR"} | |
], | |
"Karachi": [ | |
{"name": "Biryani", "price": "500 PKR"}, | |
{"name": "Haleem", "price": "700 PKR"}, | |
{"name": "Kebab Roll", "price": "300 PKR"} | |
], | |
"Peshawar": [ | |
{"name": "Chapli Kebab", "price": "400 PKR"}, | |
{"name": "Dumpukht", "price": "1500 PKR"} | |
], | |
"Multan": [ | |
{"name": "Sohan Halwa", "price": "1000 PKR"}, | |
{"name": "Saag", "price": "600 PKR"} | |
] | |
} | |
# Streamlit UI | |
st.title("Famous Pakistani Food Finder π") | |
city = st.text_input("Enter a Pakistani City (e.g., Lahore, Karachi, Islamabad)").strip() | |
if st.button("Find Food & Restaurants"): | |
if city: | |
st.subheader(f"Famous Foods in {city}") | |
# Retrieve food data for the city | |
dishes = food_data.get(city, []) | |
if dishes: | |
for dish in dishes: | |
st.write(f"**Dish:** {dish['name']}") | |
st.write(f"**Price:** {dish['price']}") | |
st.markdown("---") | |
else: | |
st.write("No data available for this city. Please add more dishes!") | |
# Retrieve restaurant data | |
st.subheader(f"Popular Restaurants in {city}") | |
restaurants = get_restaurants(city) | |
if restaurants: | |
for r in restaurants: | |
st.write(f"- {r}") | |
else: | |
st.write("No restaurant data found.") | |
else: | |
st.warning("Please enter a city name.") | |