import gradio as gr from langchain.vectorstores import FAISS import os os.environ["OPENAI_API_KEY"] = os.environ["openai"] embeddings = OpenAIEmbeddings(model="text-embedding-3-large") # Using OpenAI's embeddings to represent text # Load the vector store vector_store = FAISS.load_local( "yc_index", embeddings, allow_dangerous_deserialization=True ) # Create a retriever with the vector store retriever = vector_store.as_retriever(search_type="mmr") # Function to use the retriever on an input query def retrieve_result(query, k=10): retriever.search_kwargs["k"] = k result = retriever.invoke(query) res = [] for r in result: formatted_result = f""" Name: {r.metadata.get('name')}
One Liner: {r.metadata.get('oneLiner')}
Website: {r.metadata.get('website')}
Status: {r.metadata.get('status')}
Locations: {r.metadata.get('locations')} """ res.append(formatted_result.strip()) return "

".join(res) # Set up the Gradio UI using Blocks with gr.Blocks() as demo: gr.Markdown("# YCombinator Startups Semantic Search") #gr.Markdown("Enter a query to search the vector store for relevant results about legal tech startups.") with gr.Row(): input_text = gr.Textbox(label="Describe your startup idea") k_value = gr.Number(label="Top K startups", value=5) submit_button = gr.Button("Submit") with gr.Row(): output_text = gr.HTML(label="Result") submit_button.click(fn=lambda query, k: '', inputs=[input_text, k_value], outputs=output_text) submit_button.click(fn=retrieve_result, inputs=[input_text, k_value], outputs=output_text) # Launch the UI demo.launch()