Spaces:
Runtime error
Runtime error
James Wade
commited on
Commit
·
b9f7af9
1
Parent(s):
e58f0cc
tweak shiny deployment
Browse files
app.py
CHANGED
@@ -3,62 +3,96 @@ from chemcrow.agents import ChemCrow
|
|
3 |
import asyncio
|
4 |
import shinyswatch
|
5 |
|
|
|
|
|
|
|
6 |
app_ui = ui.page_fluid(
|
7 |
shinyswatch.theme.slate(),
|
8 |
ui.panel_title("ChemCrow UI"),
|
9 |
ui.p("An experiment with Shiny for Python and ChemCrow"),
|
10 |
ui.br(),
|
11 |
ui.row(
|
12 |
-
ui.column(
|
13 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
14 |
),
|
15 |
-
ui.help_text("Example 1: Propose a novel organicatalyst for enhancing carbon dioxide conversion in carbon capture and utilization processes."),
|
16 |
ui.br(),
|
17 |
-
ui.help_text(
|
|
|
|
|
18 |
ui.output_text("txt"),
|
19 |
ui.output_ui("prompt_ui"),
|
20 |
ui.output_ui("result"),
|
21 |
ui.hr(),
|
22 |
ui.div(
|
23 |
-
{
|
24 |
-
|
|
|
|
|
|
|
|
|
|
|
25 |
),
|
26 |
ui.br(),
|
27 |
-
ui.markdown(
|
|
|
|
|
28 |
)
|
29 |
|
|
|
30 |
def server(input, output, session):
|
31 |
@reactive.Effect()
|
32 |
def _():
|
33 |
if input.chat():
|
34 |
ui.update_text("prompt", value="")
|
35 |
-
|
36 |
@output
|
37 |
@render.ui
|
38 |
@reactive.event(input.chat)
|
39 |
def prompt_ui():
|
40 |
-
list_ui = [ui.strong("Prompt"),
|
41 |
-
ui.markdown(input.prompt())]
|
42 |
return list_ui
|
43 |
|
44 |
@output
|
45 |
@render.ui
|
46 |
-
@reactive.event(input.chat)
|
47 |
async def result():
|
48 |
ui.notification_show("Chatting with ChemCrow...", type="message")
|
49 |
try:
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
58 |
return list_ui
|
59 |
except TypeError:
|
60 |
async def error_coro():
|
61 |
return "An error occurred while processing your request."
|
62 |
return await error_coro()
|
63 |
|
64 |
-
app = App(app_ui, server
|
|
|
3 |
import asyncio
|
4 |
import shinyswatch
|
5 |
|
6 |
+
# initialize the model
|
7 |
+
chem_model = ChemCrow(model="gpt-4-0613", tools_model="gpt-4-0613", temp=0.1, verbose=True)
|
8 |
+
|
9 |
app_ui = ui.page_fluid(
|
10 |
shinyswatch.theme.slate(),
|
11 |
ui.panel_title("ChemCrow UI"),
|
12 |
ui.p("An experiment with Shiny for Python and ChemCrow"),
|
13 |
ui.br(),
|
14 |
ui.row(
|
15 |
+
ui.column(
|
16 |
+
9,
|
17 |
+
ui.input_text(
|
18 |
+
"prompt",
|
19 |
+
label=None,
|
20 |
+
placeholder="E.g., What is the molecular weight of tylenol?",
|
21 |
+
width="100%",
|
22 |
+
),
|
23 |
+
),
|
24 |
+
ui.column(
|
25 |
+
3,
|
26 |
+
ui.input_action_button(
|
27 |
+
"chat", "Chat", class_="btn btn-primary btn-lg btn-block", width="100%"
|
28 |
+
),
|
29 |
+
),
|
30 |
+
),
|
31 |
+
ui.help_text(
|
32 |
+
"Example 1: Propose a novel organicatalyst for enhancing carbon dioxide conversion in carbon capture and utilization processes."
|
33 |
),
|
|
|
34 |
ui.br(),
|
35 |
+
ui.help_text(
|
36 |
+
"Example 2: What are the products of the reaction between 2-bromo-2-methylpropane and 4-(4-hydroxyphenyl)butan-2-one. Can this reaction run without problems?"
|
37 |
+
),
|
38 |
ui.output_text("txt"),
|
39 |
ui.output_ui("prompt_ui"),
|
40 |
ui.output_ui("result"),
|
41 |
ui.hr(),
|
42 |
ui.div(
|
43 |
+
{
|
44 |
+
"style": "align-items: center; display: flex; flex-direction: column; justify-content: center;"
|
45 |
+
},
|
46 |
+
ui.img(
|
47 |
+
src="https://github.com/ur-whitelab/chemcrow-public/raw/main/assets/chemcrow_dark_thin.png",
|
48 |
+
width="400px",
|
49 |
+
),
|
50 |
),
|
51 |
ui.br(),
|
52 |
+
ui.markdown(
|
53 |
+
f'ChemCrow was [introduced](https://arxiv.org/abs/2304.05376) by Bran, Andres M., et al. "ChemCrow: Augmenting large-language models with chemistry tools." arXiv preprint arXiv:2304.05376 (2023). This tool is an extension of that work that puts the code into an interactive web app created by [James Wade](https://jameshwade.com) using [Shiny for Python](https://shiny.posit.co/py/). Find the code for the app [here](https://github.com/jameshwade/chemcrow) and the original code [here](https://github.com/ur-whitelab/chemcrow-public).'
|
54 |
+
),
|
55 |
)
|
56 |
|
57 |
+
|
58 |
def server(input, output, session):
|
59 |
@reactive.Effect()
|
60 |
def _():
|
61 |
if input.chat():
|
62 |
ui.update_text("prompt", value="")
|
63 |
+
|
64 |
@output
|
65 |
@render.ui
|
66 |
@reactive.event(input.chat)
|
67 |
def prompt_ui():
|
68 |
+
list_ui = [ui.strong("Prompt"), ui.markdown(input.prompt())]
|
|
|
69 |
return list_ui
|
70 |
|
71 |
@output
|
72 |
@render.ui
|
73 |
+
@reactive.event(input.chat) # triggered when the "Chat" button is clicked
|
74 |
async def result():
|
75 |
ui.notification_show("Chatting with ChemCrow...", type="message")
|
76 |
try:
|
77 |
+
|
78 |
+
list_ui = []
|
79 |
+
# run the model and handle output as it's being produced
|
80 |
+
async for response in chem_model.run(input.prompt()):
|
81 |
+
if isinstance(response, str):
|
82 |
+
list_ui.append(ui.markdown(response))
|
83 |
+
else:
|
84 |
+
list_ui.extend([
|
85 |
+
ui.strong("Thoughts"),
|
86 |
+
ui.markdown(response[0]),
|
87 |
+
ui.strong("Reasoning"),
|
88 |
+
ui.markdown(response[1]),
|
89 |
+
ui.strong("Answer"),
|
90 |
+
ui.markdown(response[2]),
|
91 |
+
])
|
92 |
return list_ui
|
93 |
except TypeError:
|
94 |
async def error_coro():
|
95 |
return "An error occurred while processing your request."
|
96 |
return await error_coro()
|
97 |
|
98 |
+
app = App(app_ui, server)
|