mh084449's picture
Update app.py
31c40ea verified
import gradio as gr
import requests
# The API endpoint URL
similarity_problem = 'http://34.166.48.42:5555/similarity_problem'
similarity_solution = 'http://34.166.48.42:5555/similarity_solution'
glob = {}
import json
import random
import string
def generate_random_string(length=10):
letters = string.ascii_lowercase
return ''.join(random.choice(letters) for i in range(length))
def generate_random_json_object():
return {
"problem_link": f"https://example.com/problem/{generate_random_string()}",
"solution": generate_random_string(20),
"similarity": round(random.uniform(0, 1), 2)
}
def get_similar_problems(problem_statement, problem_solution, top_k):
if not problem_statement:
if not problem_solution:
return "ERROR: Input the problem's statement and/or solution"
# The JSON object to send (with one key-value pair)
data = {'solution': problem_solution,
'top_k': top_k}
# Send the POST request with the JSON data
response = requests.post(similarity_solution, json=data)
if response.status_code == 200:
similar_solutions = response.json()
# similar_solutions = [generate_random_json_object() for _ in range(10)]
ret = {}
glob.clear()
for json_obj in similar_solutions:
ret[json_obj.get("problem_link", "No problem link provided")] = json_obj.get("similarity", "No similarity provided")
glob[json_obj.get("problem_link", "No problem link provided")] = json_obj.get("solution", "No problem solution provided")
return ret
else:
glob.clear()
return {"NaN" : 0}
else:
# The JSON object to send (with one key-value pair)
data = {'problem': problem_statement,
'top_k': top_k}
# Send the POST request with the JSON data
response = requests.post(similarity_problem, json=data)
if response.status_code == 200:
similar_problems = response.json()
ret = {}
glob.clear()
for json_obj in similar_problems:
ret[json_obj.get("problem_link", "No problem link provided")] = json_obj.get("similarity", "No similarity provided")
glob[json_obj.get("problem_link", "No problem link provided")] = json_obj.get("problem_statement", "No problem statement provided")
else:
glob.clear()
return {"NaN" : 0}
def show_problem(evt: gr.SelectData): # SelectData is a subclass of EventData
uid = evt.value
if uid != "NaN":
statement = glob[uid]
title = uid
url = uid
markdown = f"# [{title}]({url})\n\n"
markdown += f"### Statement\n\n{statement}"
return markdown
with gr.Blocks(
title="Similarity Module", css=".mymarkdown {font-size: 15px !important}"
) as demo:
gr.Markdown(
"""
# Similarity Module
IPC Intelligent Programming Companion
"""
)
with gr.Row():
# column for inputs
with gr.Column():
problem_statement = gr.Textbox(
label="Statement",
info="Paste your statement here!",
value="",
)
problem_solution = gr.Textbox(
label="Solution",
info="Paste your solution here!",
value="",
)
topk_slider = gr.Slider(
minimum=1,
maximum=100,
step=1,
value=10,
label="Number of similar problems to show",
)
submit_button = gr.Button("Submit")
my_markdown = gr.Markdown(
latex_delimiters=[
{"left": "$$", "right": "$$", "display": True},
{"left": "$", "right": "$", "display": False},
{"left": "\\(", "right": "\\)", "display": False},
{"left": "\\[", "right": "\\]", "display": True},
],
elem_classes="mymarkdown",
)
# column for outputs
with gr.Column():
output_labels = gr.Label(
label="Similar problems",
)
submit_button.click(
fn=get_similar_problems,
inputs=[problem_statement, problem_solution, topk_slider],
outputs=[output_labels],
)
output_labels.select(fn=show_problem, inputs=None, outputs=[my_markdown])
demo.launch()