Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import faiss | |
| from sentence_transformers import SentenceTransformer | |
| from groq import Groq | |
| # Initialize Groq API | |
| client = Groq(api_key="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") # Ensure your API key is valid | |
| # Initialize Sentence Transformer | |
| embedding_model = SentenceTransformer('all-MiniLM-L6-v2') | |
| # FAISS Index | |
| dimension = 384 # Embedding dimension of the model | |
| index = faiss.IndexFlatL2(dimension) | |
| # Function to chunk text | |
| def chunk_text(text, max_length=500): | |
| words = text.split() | |
| chunks = [] | |
| chunk = [] | |
| for word in words: | |
| if len(" ".join(chunk)) + len(word) <= max_length: | |
| chunk.append(word) | |
| else: | |
| chunks.append(" ".join(chunk)) | |
| chunk = [word] | |
| if chunk: | |
| chunks.append(" ".join(chunk)) | |
| return chunks | |
| # Function to embed text and add to FAISS index | |
| def embed_and_store(chunks): | |
| embeddings = embedding_model.encode(chunks) | |
| index.add(embeddings) | |
| # Query handling using Groq's streaming completions | |
| def query_llm(prompt): | |
| # Create a completion request using the Groq model | |
| completion = client.chat.completions.create( | |
| model="deepseek-r1-distill-llama-70b", # Use the provided Groq model | |
| messages=[ | |
| { | |
| "role": "system", | |
| "content": ( | |
| "You are a relationship counselor. Analyze the given WhatsApp conversation " | |
| "and provide insights on potential red flags, toxicity, and room for improvement in behavior. " | |
| "Every response must start by rating the overall chat toxicity out of 10." | |
| ) | |
| }, | |
| {"role": "user", "content": prompt}, | |
| ], | |
| temperature=0.6, | |
| max_completion_tokens=1024, | |
| top_p=0.95, | |
| stream=True, | |
| reasoning_format="raw" | |
| ) | |
| # Stream and collect the response | |
| full_response = "" | |
| for chunk in completion: | |
| full_response += chunk.choices[0].delta.content or "" | |
| return full_response | |
| # Streamlit App | |
| st.title("AI Relationship Counsellor") | |
| uploaded_file = st.file_uploader("Upload a text file of your WhatsApp chat", type=["txt"]) | |
| if uploaded_file: | |
| text = uploaded_file.read().decode("utf-8") | |
| st.write("Chat Extracted Successfully!") | |
| # Chunk and embed text | |
| chunks = chunk_text(text) | |
| embed_and_store(chunks) | |
| # Query Interface | |
| user_query = st.text_input("Ask a question about your relationship:") | |
| if user_query: | |
| # Embed query and search FAISS for the top 5 relevant chunks | |
| query_embedding = embedding_model.encode([user_query]) | |
| distances, indices = index.search(query_embedding, k=5) | |
| relevant_chunks = [chunks[i] for i in indices[0]] | |
| # Combine chunks to form context | |
| context = " ".join(relevant_chunks) | |
| final_prompt = f"Context: {context}\n\nQuestion: {user_query}" | |
| # Get response from the Groq model | |
| response = query_llm(final_prompt) | |
| st.write("### AI Analysis") | |
| st.write(response) | |