Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -31,8 +31,8 @@ RANDOM_NAME_QUERY = """
|
|
31 |
SELECT name, count,
|
32 |
CASE
|
33 |
WHEN female_percent >= 0.2 AND female_percent <= 0.8 AND male_percent >= 0.2 AND male_percent <= 0.8 THEN 'unisex'
|
34 |
-
WHEN female_percent > 0.
|
35 |
-
WHEN male_percent > 0.
|
36 |
END AS gender
|
37 |
FROM (
|
38 |
SELECT
|
@@ -99,6 +99,9 @@ class NameChronicles:
|
|
99 |
self.db_path = Path("data/names.db")
|
100 |
|
101 |
# Main
|
|
|
|
|
|
|
102 |
self.holoviews_pane = pn.pane.HoloViews(
|
103 |
min_height=675, sizing_mode="stretch_both"
|
104 |
)
|
@@ -135,7 +138,7 @@ class NameChronicles:
|
|
135 |
)
|
136 |
self.count_range = pn.widgets.IntRangeSlider(
|
137 |
name="Peak Count Range",
|
138 |
-
value=(
|
139 |
start=0,
|
140 |
end=100000,
|
141 |
step=1000,
|
@@ -180,8 +183,9 @@ class NameChronicles:
|
|
180 |
name="Parse and Add Names",
|
181 |
button_style="outline",
|
182 |
button_type="primary",
|
183 |
-
disabled=
|
184 |
)
|
|
|
185 |
pn.state.onload(self._initialize_database)
|
186 |
|
187 |
# Database Methods
|
@@ -281,15 +285,18 @@ class NameChronicles:
|
|
281 |
name_pattern = "%"
|
282 |
else:
|
283 |
name_pattern = name_pattern.replace("*", "%")
|
|
|
|
|
|
|
284 |
count_range = self.count_range.value
|
285 |
gender_select = self.gender_select.value.lower()
|
286 |
random_names = (
|
287 |
self.conn.execute(
|
288 |
RANDOM_NAME_QUERY, [name_pattern, *count_range, gender_select]
|
289 |
-
)
|
290 |
-
.fetch_df()["name"]
|
291 |
.tolist()
|
292 |
)
|
|
|
293 |
if random_names:
|
294 |
for i in range(len(random_names)):
|
295 |
random_name = random_names[i]
|
@@ -345,10 +352,12 @@ class NameChronicles:
|
|
345 |
f"One sentence reply to {contents!r} or concisely suggest other relevant names; "
|
346 |
f"if no name is provided use {self.names_choice.value[-1]!r}."
|
347 |
)
|
|
|
348 |
self.last_ai_output = await self.conversation_chain.apredict(
|
349 |
input=prompt,
|
350 |
callbacks=[self.callback_handler],
|
351 |
)
|
|
|
352 |
self.llm_use_counter += 1
|
353 |
|
354 |
async def _parse_ai_output(self, _):
|
@@ -427,9 +436,6 @@ class NameChronicles:
|
|
427 |
tooltips=[("Name", "@name"), ("Year", "@year"), ("Count", "@count")],
|
428 |
)
|
429 |
self._name_indices = {}
|
430 |
-
scatter_cycle = hv.Cycle("Category10")
|
431 |
-
curve_cycle = hv.Cycle("Category10")
|
432 |
-
label_cycle = hv.Cycle("Category10")
|
433 |
for i, (name, df_name) in enumerate(self.df.groupby("name")):
|
434 |
df_name_total = df_name.groupby(
|
435 |
["name", "year", "male", "female"], as_index=False
|
@@ -453,7 +459,7 @@ class NameChronicles:
|
|
453 |
self._scatter_nd_overlay[i] = hv.Scatter(
|
454 |
df_name_total, ["year"], ["count", "male", "female", "name"], label=name
|
455 |
).opts(
|
456 |
-
color=scatter_cycle,
|
457 |
size=4,
|
458 |
alpha=0.15,
|
459 |
marker="y",
|
@@ -464,7 +470,7 @@ class NameChronicles:
|
|
464 |
self._curve_nd_overlay[i] = hv.Curve(
|
465 |
df_name_total, ["year"], ["count"], label=name
|
466 |
).opts(
|
467 |
-
color=curve_cycle,
|
468 |
tools=["tap"],
|
469 |
line_width=3,
|
470 |
)
|
@@ -473,7 +479,7 @@ class NameChronicles:
|
|
473 |
).opts(
|
474 |
text_align="right",
|
475 |
text_baseline="bottom",
|
476 |
-
text_color=label_cycle,
|
477 |
)
|
478 |
self._name_indices[i] = name
|
479 |
self.selection.source = self._curve_nd_overlay
|
|
|
31 |
SELECT name, count,
|
32 |
CASE
|
33 |
WHEN female_percent >= 0.2 AND female_percent <= 0.8 AND male_percent >= 0.2 AND male_percent <= 0.8 THEN 'unisex'
|
34 |
+
WHEN female_percent > 0.5 THEN 'female'
|
35 |
+
WHEN male_percent > 0.5 THEN 'male'
|
36 |
END AS gender
|
37 |
FROM (
|
38 |
SELECT
|
|
|
99 |
self.db_path = Path("data/names.db")
|
100 |
|
101 |
# Main
|
102 |
+
self.scatter_cycle = hv.Cycle("Category10")
|
103 |
+
self.curve_cycle = hv.Cycle("Category10")
|
104 |
+
self.label_cycle = hv.Cycle("Category10")
|
105 |
self.holoviews_pane = pn.pane.HoloViews(
|
106 |
min_height=675, sizing_mode="stretch_both"
|
107 |
)
|
|
|
138 |
)
|
139 |
self.count_range = pn.widgets.IntRangeSlider(
|
140 |
name="Peak Count Range",
|
141 |
+
value=(0, 100000),
|
142 |
start=0,
|
143 |
end=100000,
|
144 |
step=1000,
|
|
|
183 |
name="Parse and Add Names",
|
184 |
button_style="outline",
|
185 |
button_type="primary",
|
186 |
+
disabled=True,
|
187 |
)
|
188 |
+
self.last_ai_output = None
|
189 |
pn.state.onload(self._initialize_database)
|
190 |
|
191 |
# Database Methods
|
|
|
285 |
name_pattern = "%"
|
286 |
else:
|
287 |
name_pattern = name_pattern.replace("*", "%")
|
288 |
+
if not name_pattern.startswith("%"):
|
289 |
+
name_pattern = name_pattern.title()
|
290 |
+
|
291 |
count_range = self.count_range.value
|
292 |
gender_select = self.gender_select.value.lower()
|
293 |
random_names = (
|
294 |
self.conn.execute(
|
295 |
RANDOM_NAME_QUERY, [name_pattern, *count_range, gender_select]
|
296 |
+
).fetch_df()["name"]
|
|
|
297 |
.tolist()
|
298 |
)
|
299 |
+
print(len(random_names))
|
300 |
if random_names:
|
301 |
for i in range(len(random_names)):
|
302 |
random_name = random_names[i]
|
|
|
352 |
f"One sentence reply to {contents!r} or concisely suggest other relevant names; "
|
353 |
f"if no name is provided use {self.names_choice.value[-1]!r}."
|
354 |
)
|
355 |
+
print(prompt)
|
356 |
self.last_ai_output = await self.conversation_chain.apredict(
|
357 |
input=prompt,
|
358 |
callbacks=[self.callback_handler],
|
359 |
)
|
360 |
+
self.parse_ai_button.disabled = False
|
361 |
self.llm_use_counter += 1
|
362 |
|
363 |
async def _parse_ai_output(self, _):
|
|
|
436 |
tooltips=[("Name", "@name"), ("Year", "@year"), ("Count", "@count")],
|
437 |
)
|
438 |
self._name_indices = {}
|
|
|
|
|
|
|
439 |
for i, (name, df_name) in enumerate(self.df.groupby("name")):
|
440 |
df_name_total = df_name.groupby(
|
441 |
["name", "year", "male", "female"], as_index=False
|
|
|
459 |
self._scatter_nd_overlay[i] = hv.Scatter(
|
460 |
df_name_total, ["year"], ["count", "male", "female", "name"], label=name
|
461 |
).opts(
|
462 |
+
color=self.scatter_cycle,
|
463 |
size=4,
|
464 |
alpha=0.15,
|
465 |
marker="y",
|
|
|
470 |
self._curve_nd_overlay[i] = hv.Curve(
|
471 |
df_name_total, ["year"], ["count"], label=name
|
472 |
).opts(
|
473 |
+
color=self.curve_cycle,
|
474 |
tools=["tap"],
|
475 |
line_width=3,
|
476 |
)
|
|
|
479 |
).opts(
|
480 |
text_align="right",
|
481 |
text_baseline="bottom",
|
482 |
+
text_color=self.label_cycle,
|
483 |
)
|
484 |
self._name_indices[i] = name
|
485 |
self.selection.source = self._curve_nd_overlay
|