import requests import json import gradio as gr import os def callSearchAPI(query: str) -> dict: """ Call search API hosted on AWS """ # hardcode public url of api url = os.getenv('GCR_API_URL') # make get request params = {"query": query} response = requests.get(url + "/search", params=params) # return response as python dict return json.loads(response.text) def formatResultText(title: str, video_id: str): """ Function to format video title and id as markdown """ text = f"""

# {title}
🔗 [Video Link](https://youtu.be/{video_id})""" return text def formatVideoEmbed(video_id: str): """ Function to generate video embed from video_id """ return '' def searchResults(query): """ Function to update search outputs for gradio ui """ # API call response = callSearchAPI(query) # format search results # initialize list of outputs output_list = [] # compute number of null search results (out of 5) num_empty_results = 5-len(response['title']) # display search results for i in range(len(response['title'])): video_id = response['video_id'][i] title = response['title'][i] embed = gr.HTML(value = formatVideoEmbed(video_id), visible=True) text = gr.Markdown(value = formatResultText(title, video_id), visible=True) output_list.append(embed) output_list.append(text) # make null search result slots invisible for i in range(num_empty_results): # if no search results display "No results." text if num_empty_results==5 and i==0: embed = gr.HTML(visible=False) text = gr.Markdown(value = "No results. Try rephrasing your query.", visible=True) output_list.append(embed) output_list.append(text) continue embed = gr.HTML(visible=False) text = gr.Markdown(visible=False) output_list.append(embed) output_list.append(text) return output_list