Spaces:
Sleeping
Sleeping
import os | |
from openai import OpenAI | |
import pandas as pd | |
import numpy as np | |
import faiss | |
import streamlit as st | |
from dotenv import load_dotenv | |
from pathlib import Path | |
from src.E_openAI_embeddings import calculate_openai_similarity, load_openai_embeddings | |
# Streamlit UI | |
st.title("Sentence Similarity Finder") | |
# Initialize session state for embeddings | |
if 'embeddings' not in st.session_state: | |
st.session_state.embeddings = None | |
if 'api_key' not in st.session_state: | |
st.session_state.api_key = None | |
try: | |
api_key = os.getenv('OPENAI_API_KEY') | |
# session_state.api_key = api_key | |
st.session_state.api_key = api_key | |
if not api_key: | |
st.error("OpenAI API key not found. Please set it in the .env file.") | |
else: | |
st.success("OpenAI API key loaded successfully.") | |
api_key = st.session_state.api_key | |
openai = OpenAI() | |
openai.api_key = api_key # Initialize OpenAI API | |
except Exception as e: | |
st.error(f"An error occurred while loading the OpenAI API: {e}") | |
# Button to load OpenAI embeddings | |
if st.button("Get OpenAI embeddings"): | |
embeddings_path = Path("embeddings") / "openai_embeddings.csv" | |
if not embeddings_path.exists(): | |
st.error(f"Embeddings file not found at {embeddings_path}.") | |
else: | |
# Load embeddings and store in session state | |
embeddings = load_openai_embeddings(str(embeddings_path)) | |
st.session_state.embeddings = embeddings | |
st.success(f"Embeddings loaded from {embeddings_path}.") | |
# User input for sentence similarity | |
user_input = st.text_input("Enter a sentence:") | |
# Button to calculate similarity | |
similarity_button = st.button("Calculate similarity") | |
if similarity_button: | |
if st.session_state.embeddings is None: | |
st.warning("Please load embeddings by clicking the 'Get OpenAI embeddings' button.") | |
elif not user_input.strip(): | |
st.warning("Please enter a valid sentence for similarity calculation.") | |
else: | |
top_similar_sentences = get_openai_similarity(user_input, st.session_state.embeddings, top_n=5) | |
st.write(f'top_similar_sentences: {top_similar_sentences[:1]}') | |
if top_similar_sentences: | |
st.write("**Top 5 similar sentences:**") | |
for i, (sentence, score) in enumerate(top_similar_sentences, 1): | |
st.write(f"{i}. **Sentence:** {sentence}") | |
st.write(f" **Similarity score:** {score:.4f}") | |
else: | |
st.info("No similar sentences found.") | |
stop() | |
# Button to calculate similarity | |
if st.button("Calculate similarity"): | |
try: | |
if st.session_state.embeddings is None: | |
st.warning("Please load embeddings by clicking the 'Get OpenAI embeddings' button.") | |
elif not user_input.strip(): | |
st.warning("Please enter a valid sentence for similarity calculation.") | |
else: | |
top_similar_sentences = calculate_openai_similarity(user_input, st.session_state.embeddings, top_n=5) | |
st.write(f'top_similar_sentences: {top_similar_sentences[:1]}') | |
if top_similar_sentences: | |
st.write("**Top 5 similar sentences:**") | |
for i, (sentence, score) in enumerate(top_similar_sentences, 1): | |
st.write(f"{i}. **Sentence:** {sentence}") | |
st.write(f" **Similarity score:** {score:.4f}") | |
else: | |
st.info("No similar sentences found.") | |
except Exception as e: | |
print(f"An error occurred during similarity calculation: {e}") | |
st.error(f"An error occurred during similarity calculation: {e}") |