analysis_ui / app.py
baxin's picture
Update app.py
2c28e0c verified
raw
history blame
3.53 kB
import gradio as gr
import requests
import uuid
import os
def string_to_binary(input_string):
binary_string = ''.join(format(ord(char), '08b') for char in input_string)
return binary_string
def upload_protocol(protocol_name):
# robot_ip = "localhost"
# robot_url = "https://baxin-ot-analysis.hf.space"
robot_url = "https://baxin-analyzer.hf.space"
# endpoint = f"http://{robot_url}:31950/protocols"
endpoint = f"http://{robot_url}/protocols"
# protocol_name = generate_unique_name()
protocol_file = open(protocol_name, "rb")
files = {
"files": (protocol_name, protocol_file),
}
headers = {"Opentrons-Version": "3"}
response = requests.post(endpoint, headers=headers, files=files)
response_data = response.json()
protocol_file.close()
if os.path.exists(protocol_name):
# if the protocol file is existing, remove it
os.remove(protocol_name)
if 'data' in response_data:
response_data = response.json()
protocol_id = response_data["data"]["id"]
analysis_result=response_data["data"]["analyses"]
analysis_id = response_data["data"]["analysisSummaries"][0]["id"]
analysis_status = response_data["data"]["analysisSummaries"][0]["status"]
print(protocol_id
)
print(analysis_result)
print(analysis_id)
print(analysis_status)
return f"success\n protocol_id:{protocol_id}\n analysis_id:{analysis_id}"
else:
print("analysis error")
error_id = response_data["errors"][0]['id']
error_code = response_data["errors"][0]["errorCode"]
error_detail = response_data["errors"][0]['detail']
print(error_id)
print(error_code)
print(error_detail)
return f"{error_id}\n{error_code}\n{error_detail}"
def generate_unique_name():
unique_name = str(uuid.uuid4()) + ".py"
return unique_name
def send_post_request(payload):
url = "https://baxin-simulator.hf.space/protocol"
protocol_name = generate_unique_name()
data = {"name"
: protocol_name, "content": payload}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=data, headers=headers)
if response.status_code != 200:
print("Error: " + response.text)
return "Error: " + response.text
# Check the response before returning it
response_data = response.json()
if "error_message" in response_data:
print("Error in response:", response_data["error_message"])
return response_data["error_message"]
elif "protocol_name" in response_data:
print("Protocol executed successfully. Run log:", response_data["run_log"])
return response_data["run_log"]
else:
print("Unexpected response:", response_data)
return "Unexpected response"
def send_message(text, chatbot):
# Send POST request and get response
# response = send_post_request(text)
# binary_protocol = string_to_binary(text)
protocol_name = generate_unique_name()
with open(protocol_name, "w") as file:
file.write(text)
response = upload_protocol(protocol_name)
# Update chatbot with response
chatbot.append(("opentrons analysis result", response))
return chatbot
with gr.Blocks() as app:
textbox = gr.Textbox()
send_button = gr.Button(value="Send")
chatbot = gr.Chatbot()
clear_button = gr.ClearButton([textbox, chatbot])
send_button.click(send_message, [textbox, chatbot], [chatbot])
app.launch()