Spaces:
Runtime error
Runtime error
| 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 | |
| ) | |
| from google_buckets import CloudStorageManager | |
| import dotenv | |
| import os | |
| from utils import ( | |
| change_file_extension, convert_obj_to_stl, | |
| remove_files | |
| ) | |
| from mesh_utils import generate_mesh_images | |
| from vision_model import analyze_images | |
| from gradio_client import Client as ShapEClient | |
| dotenv.load_dotenv() | |
| 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") | |
| bucket_name = os.getenv('GOOGLE_BUCKET_NAME') | |
| manager = CloudStorageManager(bucket_name) | |
| for i in app_components: | |
| client = ShapEClient("hysts/Shap-E") | |
| client.hf_token = os.getenv("HUGGINGFACE_API_KEY") | |
| result = client.predict( | |
| i, # str in 'Prompt' Textbox component | |
| 1621396601, # float (numeric value between 0 and 2147483647) in 'Seed' Slider component | |
| 15, # float (numeric value between 1 and 20) in 'Guidance scale' Slider component | |
| 64, # float (numeric value between 2 and 100) in 'Number of inference steps' Slider component | |
| api_name="/text-to-3d" | |
| ) | |
| app_uuid = component_collection.data.insert({ | |
| "Tags": output_text['Fields_of_study'], | |
| "FeildsOfStudy" : output_text['Fields_of_study'], | |
| "ToolName" : i, | |
| "UsedInComps" : [input_text] | |
| }) | |
| glb_file_name = app_uuid.hex + ".glb" | |
| manager.upload_file( | |
| result, | |
| glb_file_name, | |
| ) | |
| 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 | |
| def review_3d_model(uuid:str) -> None: | |
| """input the uuid of a 3d model""" | |
| uuid = uuid.replace("-","") | |
| bucket_name = os.getenv('GOOGLE_BUCKET_NAME') | |
| manager = CloudStorageManager(bucket_name) | |
| xx = manager.get_file_by_uuid(uuid) | |
| manager.download_file( | |
| xx, | |
| xx | |
| ) | |
| xx_as_stl = change_file_extension(xx,"stl") | |
| convert_obj_to_stl(xx,xx_as_stl) | |
| viewing_angles = [(30, 45), (60, 90), (45, 135)] | |
| prompt = "I am creating an 3d model of a Glass lenses for refracting light,\ | |
| using a text-to-3d model\ | |
| Do these images look correct?\ | |
| If not please make a suggesttion on how to improve the text input\ | |
| As this response will be used in a pipeline please only output a new \ | |
| potential prompt or output nothing, " | |
| # Please keep the prompt to 5 25 words to not confuse the model" | |
| images = generate_mesh_images( | |
| xx_as_stl, | |
| viewing_angles, | |
| ) | |
| response = analyze_images( | |
| images, | |
| prompt, | |
| # api_key, | |
| ) | |
| #clean up | |
| remove_files(images) | |
| remove_files([xx,xx_as_stl]) | |
| return response | |
| 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", | |
| ) | |
| review_3d_model_interface = gr.Interface( | |
| fn=review_3d_model, | |
| inputs=["text"], | |
| outputs="text", | |
| title="Review 3D Model", | |
| description="Input the UUID of a 3D model to review its images and provide feedback.", | |
| ) | |
| demo = gr.TabbedInterface([ | |
| generate_apparatus_interface, | |
| generate_experiment_interface, | |
| search_experiments_interface, | |
| search_apparatus_interface, | |
| review_3d_model_interface, | |
| ], [ | |
| "Generate Apparatus", | |
| "Generate Experiment", | |
| "Search Existing Experiments", | |
| "Search Existing Apparatuses", | |
| "review_3d_model_interface" | |
| ]) | |
| if __name__ == "__main__": | |
| demo.launch() | |