proventures / app.py
karthigrj's picture
Update app.py
75c0712 verified
import gradio as gr
import pandas as pd
from openai import OpenAI
from sentence_transformers import SentenceTransformer
import faiss
import numpy as np
import os
from groq import Groq
# Load Excel Data
data_file = "project_data.xlsx" # Replace with your actual file
df = pd.read_excel(data_file)
df['combined_text'] = df.apply(lambda row: ' '.join(row.astype(str)), axis=1)
# Embedding Model and FAISS Index
model = SentenceTransformer("all-MiniLM-L6-v2")
embeddings = model.encode(df['combined_text'].tolist())
index = faiss.IndexFlatL2(embeddings.shape[1])
index.add(np.array(embeddings))
# Groq API Configuration
# api_key = "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" # Replace with your API key
def generate_answer(query, top_k=3):
client = Groq(
api_key='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',
)
# Step 1: Embed Query
query_embedding = model.encode([query])[0]
# Step 2: Retrieve Relevant Data
distances, indices = index.search(np.array([query_embedding]), top_k)
relevant_data = df.iloc[indices[0]].to_dict(orient="records")
# Step 3: Prepare Context
context = "\n".join([str(row) for row in relevant_data])
# Step 4: Generate Response using Groq API
# prompt =
response = client.chat.completions.create(
model="llama-3.1-70b-versatile", # Replace with the appropriate model
# prompt=f"Generate a question based on this content: {chunk}",
messages=[{
"role": "user",
"content": f"Answer the question based on the following context:\n{context}\n\nQuestion: {query}\nAnswer:",
}],
max_tokens=200
)
print(response.choices[0].message.content)
return response.choices[0].message.content
# Gradio Interface
def gradio_interface(query):
return generate_answer(query)
iface = gr.Interface(
fn=gradio_interface,
inputs="text",
outputs="text",
title="Project Data Q&A System",
description="Ask questions about project data from the provided Excel sheet.",
)
iface.launch()