Spaces:
Sleeping
Sleeping
import os | |
import requests | |
import streamlit as st | |
from dotenv import load_dotenv | |
# Load environment variables from .env file | |
load_dotenv() | |
# Read API URL from environment variable | |
API_URL = os.getenv("API_URL", "http://localhost:8000") | |
def get_similar_prompts(query: str, n: int) -> dict: | |
""" | |
Fetches similar prompts from the API based on the user query. | |
Args: | |
query (str): The user query for which similar prompts are to be retrieved. | |
n (int): The number of similar prompts to return. | |
Returns: | |
dict: A dictionary containing similar prompts, or None if there was an error. | |
Raises: | |
requests.RequestException: If an HTTP error occurs during the request. | |
""" | |
try: | |
response = requests.post( | |
f"{API_URL}/most_similar", json={"query": query, "n": n} | |
) | |
response.raise_for_status() # Raise an exception for HTTP errors | |
return response.json() | |
except requests.RequestException as e: | |
st.error(f"Error: {e}") | |
return {} | |
def get_color(score: float) -> str: | |
""" | |
Determines the color based on the similarity score. | |
Args: | |
score (float): The similarity score of a prompt. | |
Returns: | |
str: The color representing the score, which could be "green", "orange", or "red". | |
""" | |
if score >= 0.8: | |
return "green" | |
elif score >= 0.5: | |
return "orange" | |
else: | |
return "red" | |
def main(): | |
""" | |
The main function for running the Streamlit app. | |
Sets up the UI for entering queries and retrieving similar prompts. | |
""" | |
st.title("Prompt Similarity Finder") | |
query = st.text_input("Enter your query:", "") | |
n = st.slider( | |
"Number of similar prompts to retrieve:", min_value=1, max_value=40, value=5 | |
) | |
if st.button("Find Similar Prompts"): | |
if query: | |
with st.spinner("Fetching similar prompts..."): | |
result = get_similar_prompts(query, n) | |
if result: | |
similar_prompts = result.get("similar_prompts", []) | |
if similar_prompts: | |
st.subheader("Similar Prompts:") | |
for item in similar_prompts: | |
score = item["score"] | |
color = get_color(score) | |
st.markdown( | |
f"<p><strong>Score:</strong> <span style='color:{color};'>{score:.2f}</span> <br> <strong>Prompt:</strong> {item['prompt']}</p>", | |
unsafe_allow_html=True, | |
) | |
st.write("---") | |
else: | |
st.write("No similar prompts found.") | |
else: | |
st.warning("Please enter a query.") | |
if __name__ == "__main__": | |
main() | |