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()