Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| from models.vectorizer import Vectorizer | |
| from models.prompt_search_engine import PromptSearchEngine | |
| from models.data_reader import load_prompts_from_jsonl | |
| from models.Query import Query, SimilarPrompt, SearchResponse, PromptVector, VectorResponse | |
| from sentence_transformers import SentenceTransformer | |
| import os | |
| # Path to your prompts data (you need to upload this file to your Hugging Face space) | |
| prompt_path = "models/prompts_data.jsonl" # Update this to the correct path in your space | |
| # Initialize search engine and model | |
| prompts = load_prompts_from_jsonl(prompt_path) | |
| search_engine = PromptSearchEngine() | |
| search_engine.add_prompts_to_vector_database(prompts) | |
| # Streamlit App Interface | |
| st.title("Prompt Search Engine") | |
| st.write("Search for similar prompts using the local search engine.") | |
| # Input for the user's prompt | |
| query_input = st.text_input("Enter your prompt:") | |
| # Number of similar prompts to retrieve (k) | |
| k = st.number_input("Number of similar prompts to retrieve:", min_value=1, max_value=10, value=3) | |
| # Button to trigger search | |
| if st.button("Search Prompts"): | |
| if query_input: | |
| query = Query(prompt=query_input) | |
| similar_prompts, distances = search_engine.most_similar(query.prompt, top_k=k) | |
| # Format and display search results | |
| response = [ | |
| SimilarPrompt(prompt=prompt, distance=float(distance)) | |
| for prompt, distance in zip(similar_prompts, distances) | |
| ] | |
| st.write("Search Results:") | |
| for result in response: | |
| st.write(f"Prompt: {result.prompt}, Distance: {result.distance}") | |
| else: | |
| st.error("Please enter a prompt.") | |
| # Additional functionality for vector similarity | |
| st.write("---") | |
| st.write("### Vector Similarities") | |
| if st.button("Retrieve All Vector Similarities"): | |
| if query_input: | |
| query = Query(prompt=query_input) | |
| query_embedding = search_engine.model.encode([query.prompt]) # Encode the prompt to a vector | |
| all_similarities = search_engine.cosine_similarity(query_embedding, search_engine.index) | |
| # Format and display vector similarities | |
| response = [ | |
| PromptVector(vector=index, distance=float(distance)) | |
| for index, distance in enumerate(all_similarities) | |
| ] | |
| st.write("Vector Similarities:") | |
| for result in response: | |
| st.write(f"Vector Index: {result.vector}, Distance: {result.distance}") | |
| else: | |
| st.error("Please enter a prompt.") | |
| # # streamlit_app.py | |
| # import streamlit as st | |
| # import requests | |
| # # Streamlit app title | |
| # st.title("Top K Search with Vector DataBase") | |
| # # FastAPI endpoint URL | |
| # # url = "http://localhost:8084/search/" | |
| # url = "https://huggingface.co/search/" | |
| # # Input fields in Streamlit | |
| # id = st.text_input("Enter ID:", value="1") | |
| # prompt = st.text_input("Enter your prompt:") | |
| # k = st.number_input("Top K results:", min_value=1, max_value=100, value=3) | |
| # # Trigger the search when the button is clicked | |
| # if st.button("Search"): | |
| # # Construct the request payload | |
| # payload = { | |
| # "id": id, | |
| # "prompt": prompt, | |
| # "k": k | |
| # } | |
| # # Make the POST request | |
| # response = requests.post(url, json=payload) | |
| # # Handle the response | |
| # if response.status_code == 200: | |
| # results = response.json() | |
| # st.write(results) | |
| # else: | |
| # st.error(f"Error: {response.status_code} - {response.text}") | |