Spaces:
Runtime error
Runtime error
Update app.py
Browse files
app.py
CHANGED
|
@@ -11,6 +11,15 @@ from langchain.chat_models import ChatOpenAI
|
|
| 11 |
pn.extension(sizing_mode="stretch_width", notifications=True)
|
| 12 |
hv.extension("bokeh")
|
| 13 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 14 |
|
| 15 |
RANDOM_NAME_QUERY = """
|
| 16 |
SELECT name, count,
|
|
@@ -73,13 +82,14 @@ class StreamHandler(BaseCallbackHandler):
|
|
| 73 |
|
| 74 |
|
| 75 |
class NameChronicles:
|
| 76 |
-
def __init__(self
|
| 77 |
super().__init__()
|
| 78 |
self.db_path = Path("data/names.db")
|
| 79 |
-
self._initialize_database(refresh=refresh)
|
| 80 |
|
| 81 |
# Main
|
| 82 |
-
self.holoviews_pane = pn.pane.HoloViews(
|
|
|
|
|
|
|
| 83 |
self.selection = hv.streams.Selection1D()
|
| 84 |
|
| 85 |
# Sidebar
|
|
@@ -94,7 +104,6 @@ class NameChronicles:
|
|
| 94 |
solid=False,
|
| 95 |
)
|
| 96 |
self.names_choice.param.watch(self._update_plot, "value")
|
| 97 |
-
self.names_choice.value = ["Andrew"]
|
| 98 |
|
| 99 |
# Reset Widgets
|
| 100 |
self.clear_button = pn.widgets.Button(
|
|
@@ -168,9 +177,11 @@ class NameChronicles:
|
|
| 168 |
title="Ask AI",
|
| 169 |
)
|
| 170 |
|
|
|
|
|
|
|
| 171 |
# Database Methods
|
| 172 |
-
|
| 173 |
-
def _initialize_database(self
|
| 174 |
"""
|
| 175 |
Initialize database with data from the Social Security Administration.
|
| 176 |
"""
|
|
@@ -196,6 +207,12 @@ class NameChronicles:
|
|
| 196 |
self.conn.execute("DROP TABLE IF EXISTS names")
|
| 197 |
self.conn.execute("CREATE TABLE names AS SELECT * FROM df_processed")
|
| 198 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 199 |
def _query_names(self, names):
|
| 200 |
"""
|
| 201 |
Query the database for the given name.
|
|
@@ -438,6 +455,7 @@ class NameChronicles:
|
|
| 438 |
align="end",
|
| 439 |
)
|
| 440 |
sidebar = pn.Column(
|
|
|
|
| 441 |
self.names_input,
|
| 442 |
self.names_choice,
|
| 443 |
reset_row,
|
|
@@ -446,13 +464,16 @@ class NameChronicles:
|
|
| 446 |
self.ai_pane,
|
| 447 |
data_url,
|
| 448 |
)
|
|
|
|
|
|
|
|
|
|
| 449 |
template = pn.template.FastListTemplate(
|
| 450 |
sidebar=[sidebar],
|
| 451 |
-
main=[self.
|
| 452 |
title="Name Chronicles",
|
| 453 |
theme="dark",
|
| 454 |
)
|
| 455 |
return template
|
| 456 |
|
| 457 |
|
| 458 |
-
NameChronicles().view().servable()
|
|
|
|
| 11 |
pn.extension(sizing_mode="stretch_width", notifications=True)
|
| 12 |
hv.extension("bokeh")
|
| 13 |
|
| 14 |
+
INSTRUCTIONS = """
|
| 15 |
+
#### Name Chronicles lets you explore the history of names in the United States.
|
| 16 |
+
- Enter a name to add to plot.
|
| 17 |
+
- See stats by hovering a line.
|
| 18 |
+
- Click on a line to see the gender distribution.
|
| 19 |
+
- Get a random name based on selected criteria.
|
| 20 |
+
- Ask AI for some background info on a name.
|
| 21 |
+
- Have ideas? [Open an issue](https://github.com/ahuang11/name-chronicles/issues).
|
| 22 |
+
"""
|
| 23 |
|
| 24 |
RANDOM_NAME_QUERY = """
|
| 25 |
SELECT name, count,
|
|
|
|
| 82 |
|
| 83 |
|
| 84 |
class NameChronicles:
|
| 85 |
+
def __init__(self):
|
| 86 |
super().__init__()
|
| 87 |
self.db_path = Path("data/names.db")
|
|
|
|
| 88 |
|
| 89 |
# Main
|
| 90 |
+
self.holoviews_pane = pn.pane.HoloViews(
|
| 91 |
+
min_height=675, sizing_mode="stretch_both"
|
| 92 |
+
)
|
| 93 |
self.selection = hv.streams.Selection1D()
|
| 94 |
|
| 95 |
# Sidebar
|
|
|
|
| 104 |
solid=False,
|
| 105 |
)
|
| 106 |
self.names_choice.param.watch(self._update_plot, "value")
|
|
|
|
| 107 |
|
| 108 |
# Reset Widgets
|
| 109 |
self.clear_button = pn.widgets.Button(
|
|
|
|
| 177 |
title="Ask AI",
|
| 178 |
)
|
| 179 |
|
| 180 |
+
pn.state.onload(self._initialize_database)
|
| 181 |
+
|
| 182 |
# Database Methods
|
| 183 |
+
|
| 184 |
+
def _initialize_database(self):
|
| 185 |
"""
|
| 186 |
Initialize database with data from the Social Security Administration.
|
| 187 |
"""
|
|
|
|
| 207 |
self.conn.execute("DROP TABLE IF EXISTS names")
|
| 208 |
self.conn.execute("CREATE TABLE names AS SELECT * FROM df_processed")
|
| 209 |
|
| 210 |
+
if self.names_choice.value == []:
|
| 211 |
+
self.names_choice.value = ["Andrew"]
|
| 212 |
+
else:
|
| 213 |
+
self.names_choice.param.trigger("value")
|
| 214 |
+
self.main.objects = [self.holoviews_pane]
|
| 215 |
+
|
| 216 |
def _query_names(self, names):
|
| 217 |
"""
|
| 218 |
Query the database for the given name.
|
|
|
|
| 455 |
align="end",
|
| 456 |
)
|
| 457 |
sidebar = pn.Column(
|
| 458 |
+
INSTRUCTIONS,
|
| 459 |
self.names_input,
|
| 460 |
self.names_choice,
|
| 461 |
reset_row,
|
|
|
|
| 464 |
self.ai_pane,
|
| 465 |
data_url,
|
| 466 |
)
|
| 467 |
+
self.main = pn.Column(
|
| 468 |
+
pn.widgets.StaticText(value="Loading, this may take a few seconds...", sizing_mode="stretch_both"),
|
| 469 |
+
)
|
| 470 |
template = pn.template.FastListTemplate(
|
| 471 |
sidebar=[sidebar],
|
| 472 |
+
main=[self.main],
|
| 473 |
title="Name Chronicles",
|
| 474 |
theme="dark",
|
| 475 |
)
|
| 476 |
return template
|
| 477 |
|
| 478 |
|
| 479 |
+
NameChronicles().view().servable()
|