PubMedSearch / app.py
shrut123's picture
Update app.py
a19ad68 verified
raw
history blame
2.65 kB
import os
import streamlit as st
from pinecone import Pinecone
from sentence_transformers import SentenceTransformer
# Title of the Streamlit App
st.title("Pinecone Query Search on 'pubmed-splade' Index")
# Initialize Pinecone globally
index = None
# Function to initialize Pinecone
def initialize_pinecone():
api_key = os.getenv('PINECONE_API_KEY') # Get Pinecone API key from environment variable
if api_key:
# Initialize Pinecone client using the new class instance method
return Pinecone(api_key=api_key)
else:
st.error("Pinecone API key not found! Please set the PINECONE_API_KEY environment variable.")
return None
# Function to connect to the 'pubmed-splade' index
def connect_to_index(pc):
index_name = 'pubmed-splade' # Hardcoded index name
if index_name in pc.list_indexes().names():
st.info(f"Successfully connected to index '{index_name}'")
return pc.Index(index_name)
else:
st.error(f"Index '{index_name}' not found!")
return None
# Function to encode query using sentence transformers model
def encode_query(model, query_text):
return model.encode(query_text).tolist()
# Initialize Pinecone
pc = initialize_pinecone()
# If Pinecone initialized successfully, proceed with index management
if pc:
index = connect_to_index(pc)
# Load model for query encoding
model = SentenceTransformer('msmarco-bert-base-dot-v5')
# Query input
query_text = st.text_input("Enter a Query to Search", "Can clinicians use the PHQ-9 to assess depression?")
# Button to encode query and search the Pinecone index
if st.button("Search Query"):
if query_text and index:
dense_vector = encode_query(model, query_text)
# Search the index
results = index.query(
vector=dense_vector,
top_k=5,
include_metadata=True
)
st.write("### Search Results:")
if results.matches:
for match in results.matches:
score = match.score
context = match.metadata.get("context", "No context available")
# Display score and context in a formatted way
st.markdown(f"**Score**: `{score}`")
st.markdown(f"**Context**: {context}")
st.markdown("---") # Divider for each result
else:
st.warning("No results found for this query.")
else:
st.error("Please enter a query and ensure the index is initialized.")