teaevo commited on
Commit
105a917
1 Parent(s): 4b29776

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +157 -26
app.py CHANGED
@@ -1,26 +1,157 @@
1
- from transformers import AutoModelForCausalLM, AutoTokenizer
2
-
3
- def chatbot_response(user_message):
4
- # Load the pre-trained model and tokenizer
5
- model_name = "your_pretrained_model_name" # Replace with the name of the pre-trained model you want to use
6
- tokenizer = AutoTokenizer.from_pretrained(model_name)
7
- model = AutoModelForCausalLM.from_pretrained(model_name)
8
-
9
- # Tokenize the user's message and generate the response
10
- inputs = tokenizer.encode("User: " + user_message, return_tensors="pt")
11
- outputs = model.generate(inputs, max_length=100, num_return_sequences=1)
12
- response = tokenizer.decode(outputs[0], skip_special_tokens=True)
13
-
14
- return response
15
-
16
- if __name__ == '__main__':
17
- print("Chatbot: Hello! I'm your chatbot. Type 'exit' to end the conversation.")
18
-
19
- while True:
20
- user_input = input("You: ")
21
-
22
- if user_input.lower() == 'exit':
23
- break
24
-
25
- response = chatbot_response(user_input)
26
- print("Chatbot:", response)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from pathlib import Path
2
+ from typing import List, Dict, Tuple
3
+ import matplotlib.colors as mpl_colors
4
+
5
+ import pandas as pd
6
+ import seaborn as sns
7
+ import shinyswatch
8
+
9
+ import shiny.experimental as x
10
+ from shiny import App, Inputs, Outputs, Session, reactive, render, req, ui
11
+
12
+ sns.set_theme()
13
+
14
+ www_dir = Path(__file__).parent.resolve() / "www"
15
+
16
+ df = pd.read_csv(Path(__file__).parent / "penguins.csv", na_values="NA")
17
+ numeric_cols: List[str] = df.select_dtypes(include=["float64"]).columns.tolist()
18
+ species: List[str] = df["Species"].unique().tolist()
19
+ species.sort()
20
+
21
+ app_ui = x.ui.page_fillable(
22
+ shinyswatch.theme.minty(),
23
+ x.ui.layout_sidebar(
24
+ x.ui.sidebar(
25
+ # Artwork by @allison_horst
26
+ ui.input_selectize(
27
+ "xvar",
28
+ "X variable",
29
+ numeric_cols,
30
+ selected="Bill Length (mm)",
31
+ ),
32
+ ui.input_selectize(
33
+ "yvar",
34
+ "Y variable",
35
+ numeric_cols,
36
+ selected="Bill Depth (mm)",
37
+ ),
38
+ ui.input_checkbox_group(
39
+ "species", "Filter by species", species, selected=species
40
+ ),
41
+ ui.hr(),
42
+ ui.input_switch("by_species", "Show species", value=True),
43
+ ui.input_switch("show_margins", "Show marginal plots", value=True),
44
+ ),
45
+ ui.output_ui("value_boxes"),
46
+ x.ui.output_plot("scatter", fill=True),
47
+ ui.help_text(
48
+ "Artwork by ",
49
+ ui.a("@allison_horst", href="https://twitter.com/allison_horst"),
50
+ class_="text-end",
51
+ ),
52
+ fill=True,
53
+ fillable=True,
54
+ ),
55
+ )
56
+
57
+
58
+ def server(input: Inputs, output: Outputs, session: Session):
59
+ @reactive.Calc
60
+ def filtered_df() -> pd.DataFrame:
61
+ """Returns a Pandas data frame that includes only the desired rows"""
62
+
63
+ # This calculation "req"uires that at least one species is selected
64
+ req(len(input.species()) > 0)
65
+
66
+ # Filter the rows so we only include the desired species
67
+ return df[df["Species"].isin(input.species())]
68
+
69
+ @output
70
+ @render.plot
71
+ def scatter():
72
+ """Generates a plot for Shiny to display to the user"""
73
+
74
+ # The plotting function to use depends on whether margins are desired
75
+ plotfunc = sns.jointplot if input.show_margins() else sns.scatterplot
76
+
77
+ plotfunc(
78
+ data=filtered_df(),
79
+ x=input.xvar(),
80
+ y=input.yvar(),
81
+ palette=palette,
82
+ hue="Species" if input.by_species() else None,
83
+ hue_order=species,
84
+ legend=False,
85
+ )
86
+
87
+ @output
88
+ @render.ui
89
+ def value_boxes():
90
+ df = filtered_df()
91
+
92
+ def penguin_value_box(title: str, count: int, bgcol: str, showcase_img: str):
93
+ return x.ui.value_box(
94
+ title,
95
+ count,
96
+ {"class_": "pt-1 pb-0"},
97
+ showcase=x.ui.bind_fill_role(
98
+ ui.tags.img(
99
+ {"style": "object-fit:contain;"},
100
+ src=showcase_img,
101
+ ),
102
+ item=True,
103
+ ),
104
+ theme_color=None,
105
+ style=f"background-color: {bgcol};",
106
+ height="90px",
107
+ full_screen=True,
108
+ )
109
+
110
+ if not input.by_species():
111
+ return penguin_value_box(
112
+ "Penguins",
113
+ len(df.index),
114
+ bg_palette["default"],
115
+ # Artwork by @allison_horst
116
+ showcase_img="penguins.png",
117
+ )
118
+
119
+ value_boxes = [
120
+ penguin_value_box(
121
+ name,
122
+ len(df[df["Species"] == name]),
123
+ bg_palette[name],
124
+ # Artwork by @allison_horst
125
+ showcase_img=f"{name}.png",
126
+ )
127
+ for name in species
128
+ # Only include boxes for _selected_ species
129
+ if name in input.species()
130
+ ]
131
+
132
+ return x.ui.layout_column_wrap(1 / len(value_boxes), *value_boxes)
133
+
134
+
135
+ # "darkorange", "purple", "cyan4"
136
+ colors = [[255, 140, 0], [160, 32, 240], [0, 139, 139]]
137
+ colors = [(r / 255.0, g / 255.0, b / 255.0) for r, g, b in colors]
138
+
139
+ palette: Dict[str, Tuple[float, float, float]] = {
140
+ "Adelie": colors[0],
141
+ "Chinstrap": colors[1],
142
+ "Gentoo": colors[2],
143
+ "default": sns.color_palette()[0], # type: ignore
144
+ }
145
+
146
+ bg_palette = {}
147
+ # Use `sns.set_style("whitegrid")` to help find approx alpha value
148
+ for name, col in palette.items():
149
+ # Adjusted n_colors until `axe` accessibility did not complain about color contrast
150
+ bg_palette[name] = mpl_colors.to_hex(sns.light_palette(col, n_colors=7)[1]) # type: ignore
151
+
152
+
153
+ app = App(
154
+ app_ui,
155
+ server,
156
+ static_assets=str(www_dir),
157
+ )