maker-space / app.py
isayahc's picture
adding more features to the app
1e522dd verified
raw
history blame
No virus
4.99 kB
import gradio as gr
from weaviate_utils import init_client
from structured_apparatus_chain import (
arxiv_chain as apparatus_arxiv_chain,
pub_med_chain as apparatus_pub_med_chain,
wikipedia_chain as apparatus_wikipedia_chain
)
from structured_experiment_chain import (
arxiv_chain as experiment_arxiv_chain,
pub_med_chain as experiment_pub_med_chain,
wikipedia_chain as experiment_wikipedia_chain
)
apparatus_retriever_options = {
"Arxiv": apparatus_arxiv_chain,
"PubMed": apparatus_pub_med_chain,
"Wikipedia": apparatus_wikipedia_chain,
}
experiment_retriever_options = {
"Arxiv": experiment_arxiv_chain,
"PubMed": experiment_pub_med_chain,
"Wikipedia": experiment_wikipedia_chain,
}
def generate_apparatus(input_text, retriever_choice):
selected_chain = apparatus_retriever_options[retriever_choice]
output_text = selected_chain.invoke(input_text)
weaviate_client = init_client()
app_components = output_text["Material"]
component_collection = weaviate_client.collections.get("Component")
for i in app_components:
app_uuid = component_collection.data.insert({
"Tags": output_text['Fields_of_study'],
"FeildsOfStudy" : output_text['Fields_of_study'],
"ToolName" : i,
"UsedInComps" : [input_text]
})
return output_text
def generate_experiment(input_text, retriever_choice):
selected_chain = experiment_retriever_options[retriever_choice]
exp_data = output_text = selected_chain.invoke(input_text)
weaviate_client = init_client()
science_experiment_collection = weaviate_client.collections.get("ScienceEperiment")
exp_uuid = science_experiment_collection.data.insert({
# "DateCreated": datetime.now(timezone.utc),
"FieldsOfStudy": exp_data['Fields_of_study'],
"Tags": exp_data['Fields_of_study'],
"Experiment_Name": exp_data['Experiment_Name'],
"Material": exp_data['Material'],
"Sources": exp_data['Sources'],
"Protocal": exp_data['Protocal'],
"Purpose_of_Experiments": exp_data['Purpose_of_Experiments'],
"Safety_Precaution": exp_data['Safety_Precuation'], # Corrected spelling mistake
"Level_of_Difficulty": exp_data['Level_of_Difficulty'],
})
return output_text
def search_experiments(input_text, number):
# Example processing function
weaviate_client = init_client()
science_experiment_collection = weaviate_client.collections.get("ScienceEperiment")
response = science_experiment_collection.query.bm25(
query=input_text,
limit=number
)
weaviate_client.close()
response_objects_string = "\n\n".join([str(obj) for obj in response.objects])
return response_objects_string
def search_apparatus(input_text, number):
# Example processing function
weaviate_client = init_client()
component_collection = weaviate_client.collections.get("Component")
response = component_collection.query.bm25(
query=input_text,
limit=number
)
# print(response.objects.__str__())
response_objects_string = "\n\n".join([str(obj) for obj in response.objects])
weaviate_client.close()
return response_objects_string
generate_apparatus_interface = gr.Interface(
fn=generate_apparatus,
inputs=["text", gr.Radio(choices=list(apparatus_retriever_options.keys()), label="Select a retriever", value="Wikipedia")],
outputs="text",
title="Generate Apparatus",
description="I am here to help makers make more and learn the science behind things",
)
generate_experiment_interface = gr.Interface(
fn=generate_experiment,
inputs=["text", gr.Radio(choices=list(experiment_retriever_options.keys()), label="Select a retriever", value="Wikipedia")],
outputs="text",
title="Generate an experiment",
description="I am here to generate and store science experiments for our users",
)
search_experiments_interface = gr.Interface(
fn=search_experiments,
inputs=["text", gr.Slider(minimum=2, maximum=6, step=1, value=2, label="Select a number")],
outputs="text",
title="Search Existing Experiments",
description="If you would like an idea of the experiments in the vectorestore here is the place",
)
search_apparatus_interface = gr.Interface(
fn=search_apparatus,
inputs=["text", gr.Slider(minimum=2, maximum=6, step=1, value=2, label="Select a number")],
outputs="text",
title="Search Existing Apparatuses",
description="If you would like an idea of the apparatuses in the vectorestore here is the place",
)
demo = gr.TabbedInterface([
generate_apparatus_interface,
generate_experiment_interface,
search_experiments_interface,
search_apparatus_interface,
], ["Generate Apparatus", "Generate Experiment", "Search Existing Experiments","Search Existing Apparatuses"])
if __name__ == "__main__":
demo.launch()