Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -4,10 +4,15 @@ import numpy as np
|
|
4 |
from ast import literal_eval
|
5 |
import pandas as pd
|
6 |
|
|
|
7 |
from gradio_folium import Folium
|
8 |
import folium
|
9 |
from huggingface_hub import InferenceClient
|
10 |
from geopy.geocoders import Nominatim
|
|
|
|
|
|
|
|
|
11 |
|
12 |
from examples import (
|
13 |
description_sf,
|
@@ -17,15 +22,6 @@ from examples import (
|
|
17 |
df_examples
|
18 |
)
|
19 |
|
20 |
-
geolocator = Nominatim(user_agent="HF-trip-planner")
|
21 |
-
|
22 |
-
def get_coordinates(address):
|
23 |
-
location = geolocator.geocode(address)
|
24 |
-
if location:
|
25 |
-
return (location.latitude, location.longitude)
|
26 |
-
else:
|
27 |
-
return None
|
28 |
-
|
29 |
repo_id = "mistralai/Mixtral-8x7B-Instruct-v0.1"
|
30 |
llm_client = InferenceClient(model=repo_id, timeout=180)
|
31 |
|
@@ -60,15 +56,61 @@ def parse_llm_output(output):
|
|
60 |
return dataframe, rationale
|
61 |
|
62 |
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
68 |
|
69 |
|
70 |
def create_map_from_markers(dataframe):
|
71 |
-
|
|
|
|
|
|
|
72 |
f_map = Map(
|
73 |
location=[dataframe["lat"].mean(), dataframe["lon"].mean()],
|
74 |
zoom_start=5,
|
@@ -106,7 +148,8 @@ def run_display(text):
|
|
106 |
def select_example(df, data: gr.SelectData):
|
107 |
row = df.iloc[data.index[0], :]
|
108 |
dataframe, rationale = parse_llm_output(row["output"])
|
109 |
-
|
|
|
110 |
|
111 |
|
112 |
with gr.Blocks(
|
@@ -127,7 +170,7 @@ with gr.Blocks(
|
|
127 |
example_dataframe, example_rationale = parse_llm_output(output_example_sf)
|
128 |
display_rationale = gr.Markdown(example_rationale)
|
129 |
starting_map = create_map_from_markers(example_dataframe)
|
130 |
-
map = Folium(value=starting_map, height=
|
131 |
button.click(run_display, inputs=[text], outputs=[map, display_rationale])
|
132 |
|
133 |
gr.Markdown("### Other examples")
|
|
|
4 |
from ast import literal_eval
|
5 |
import pandas as pd
|
6 |
|
7 |
+
import asyncio
|
8 |
from gradio_folium import Folium
|
9 |
import folium
|
10 |
from huggingface_hub import InferenceClient
|
11 |
from geopy.geocoders import Nominatim
|
12 |
+
from collections import OrderedDict
|
13 |
+
from geopy.adapters import AioHTTPAdapter
|
14 |
+
import nest_asyncio
|
15 |
+
nest_asyncio.apply()
|
16 |
|
17 |
from examples import (
|
18 |
description_sf,
|
|
|
22 |
df_examples
|
23 |
)
|
24 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
25 |
repo_id = "mistralai/Mixtral-8x7B-Instruct-v0.1"
|
26 |
llm_client = InferenceClient(model=repo_id, timeout=180)
|
27 |
|
|
|
56 |
return dataframe, rationale
|
57 |
|
58 |
|
59 |
+
class AsyncLRUCache:
|
60 |
+
def __init__(self, maxsize=100):
|
61 |
+
self.cache = OrderedDict()
|
62 |
+
self.maxsize = maxsize
|
63 |
+
|
64 |
+
async def get(self, key):
|
65 |
+
if key not in self.cache:
|
66 |
+
return None
|
67 |
+
self.cache.move_to_end(key)
|
68 |
+
return self.cache[key]
|
69 |
+
|
70 |
+
async def set(self, key, value):
|
71 |
+
if key in self.cache:
|
72 |
+
self.cache.move_to_end(key)
|
73 |
+
self.cache[key] = value
|
74 |
+
if len(self.cache) > self.maxsize:
|
75 |
+
self.cache.popitem(last=False)
|
76 |
+
|
77 |
+
|
78 |
+
# Instantiate the cache
|
79 |
+
cache = AsyncLRUCache(maxsize=500)
|
80 |
+
|
81 |
+
async def geocode_address(address):
|
82 |
+
# Check if the result is in cache
|
83 |
+
cached_location = await cache.get(address)
|
84 |
+
if cached_location:
|
85 |
+
return cached_location
|
86 |
+
|
87 |
+
# If not in cache, perform the geolocation request
|
88 |
+
async with Nominatim(
|
89 |
+
user_agent="HF-trip-planner",
|
90 |
+
adapter_factory=AioHTTPAdapter,
|
91 |
+
) as geolocator:
|
92 |
+
location = await geolocator.geocode(address, timeout=10)
|
93 |
+
if location:
|
94 |
+
# Save the result in cache for future use
|
95 |
+
await cache.set(address, location)
|
96 |
+
return location
|
97 |
+
|
98 |
+
async def ageocode_addresses(addresses):
|
99 |
+
tasks = [geocode_address(address) for address in addresses]
|
100 |
+
locations = await asyncio.gather(*tasks)
|
101 |
+
return locations
|
102 |
+
|
103 |
+
def geocode_addresses(addresses):
|
104 |
+
loop = asyncio.get_event_loop()
|
105 |
+
result = loop.run_until_complete(ageocode_addresses(addresses))
|
106 |
+
return result
|
107 |
|
108 |
|
109 |
def create_map_from_markers(dataframe):
|
110 |
+
locations = geocode_addresses(dataframe["name"])
|
111 |
+
dataframe["lat"] = [location.latitude if location else None for location in locations]
|
112 |
+
dataframe["lon"] = [location.longitude if location else None for location in locations]
|
113 |
+
|
114 |
f_map = Map(
|
115 |
location=[dataframe["lat"].mean(), dataframe["lon"].mean()],
|
116 |
zoom_start=5,
|
|
|
148 |
def select_example(df, data: gr.SelectData):
|
149 |
row = df.iloc[data.index[0], :]
|
150 |
dataframe, rationale = parse_llm_output(row["output"])
|
151 |
+
map = create_map_from_markers(dataframe)
|
152 |
+
return row["description"], map, rationale
|
153 |
|
154 |
|
155 |
with gr.Blocks(
|
|
|
170 |
example_dataframe, example_rationale = parse_llm_output(output_example_sf)
|
171 |
display_rationale = gr.Markdown(example_rationale)
|
172 |
starting_map = create_map_from_markers(example_dataframe)
|
173 |
+
map = Folium(value=starting_map, height=600, label="Chosen locations")
|
174 |
button.click(run_display, inputs=[text], outputs=[map, display_rationale])
|
175 |
|
176 |
gr.Markdown("### Other examples")
|