MAPI_LLM / app.py
maykcaldas's picture
Update app.py
b7503f5
raw
history blame
3.17 kB
import gradio as gr
import numpy as np
import agent
import os
css_style = """
.gradio-container {
font-family: "IBM Plex Mono";
}
"""
def agent_run(q, openai_api_key, mapi_api_key, serp_api_key):
os.environ["OPENAI_API_KEY"]=openai_api_key
os.environ["MAPI_API_KEY"]=mapi_api_key
os.environ["SERPAPI_API_KEY"]=serp_api_key
agent_chain = agent.Agent(openai_api_key, mapi_api_key)
try:
out = agent_chain.run(q)
except Exception as err:
out = f"Something went wrong. Please try again.\nError: {err}"
return out
with gr.Blocks(css=css_style) as demo:
gr.Markdown(f'''
# A LLM application developed during the LLM March *MADNESS* Hackathon
- Developed by: Mayk Caldas ([@maykcaldas](https://github.com/maykcaldas)) and Sam Cox ([@SamCox822](https://github.com/SamCox822))
## What is this?
- This is a demo of an app that can answer questions about material science using the [LangChain🦜️🔗](https://github.com/hwchase17/langchain/) and the [Materials Project API](https://materialsproject.org/).
- Its behavior is based on Large Language Models (LLM), and it aims to be a tool to help scientists with quick predictions of numerous properties of materials.
It is a work in progress, so please be patient with it. We are working on a systematic validation.
### Some keys are needed to use it:
1. An openAI API key ( [Check it here](https://platform.openai.com/account/api-keys) )
2. A Material Project's API key ( [Check it here](https://materialsproject.org/api#api-key) )
3. A SERP API key ( [Check it here](https://serpapi.com/account-api) )
- Only used if the chain runs a web search to answer the question.
''')
with gr.Accordion("List of properties we developed tools for", open=False):
gr.Markdown(f"""
- Classification tasks: "Is the material AnByCz stable?"
- Stable,
- Magnetic,
- Gap direct, and
- Metal.
- Regression tasks: "What is the band gap of the material AnByCz?"
- Band gap,
- Volume,
- Density,
- Atomic density,
- Formation energy per atom,
- Energy per atom,
- Electronic energy,
- Ionic energy, and
- Total energy.
- Reaction procedure for synthesis proposal: "Give me a reaction procedure to synthesize the material AnByCz"(under development)
""")
openai_api_key = gr.Textbox(
label="OpenAI API Key", placeholder="sk-...", type="password")
mapi_api_key = gr.Textbox(
label="Material Project API Key", placeholder="...", type="password")
serp_api_key = gr.Textbox(
label="Serp API Key", placeholder="...", type="password")
with gr.Tab("MAPI Query"):
text_input = gr.Textbox(label="", placeholder="Enter question here...")
text_output = gr.Textbox(placeholder="Your answer will appear here...")
text_button = gr.Button("Ask!")
text_button.click(agent_run, inputs=[text_input, openai_api_key, mapi_api_key, serp_api_key], outputs=text_output)
demo.launch()