halimbahae's picture
Update app.py
3e4b883 verified
import numpy as np
import faiss
import pandas as pd
from transformers import pipeline
import gradio as gr
# Charger les embeddings et l'index FAISS
def load_embeddings_and_index(embeddings_file, index_file):
embeddings = np.load(embeddings_file)
index = faiss.read_index(index_file)
return embeddings, index
# Charger les données sources
def load_data(file_path):
data = pd.read_excel(file_path)
data['combined'] = data[['Product_name', 'price']].apply(
lambda row: f"Product: {row['Product_name']} | Price: {row['price']}", axis=1
)
return data
# Effectuer une recherche dans l'index FAISS
def query_faiss_index(query, embeddings, index, data, embedding_model, top_k=5):
query_embedding = embedding_model.encode([query])
distances, indices = index.search(query_embedding, top_k)
results = [data['combined'].iloc[idx] for idx in indices[0]]
return results
# Générer une réponse avec le modèle LLM
def generate_answer(query, context, llm_pipeline):
prompt = f"Given the following context, answer the question:\n\nContext:\n{context}\n\nQuestion: {query}\nAnswer:"
response = llm_pipeline(prompt, max_length=500, num_return_sequences=1)
return response[0]['generated_text']
# Interface principale
def main(embeddings_file, index_file, data_file):
# Charger les données et les fichiers nécessaires
embeddings, index = load_embeddings_and_index(embeddings_file, index_file)
data = load_data(data_file)
# Charger le modèle LLM
llm_pipeline = pipeline("text-generation", model="HuggingFaceH4/zypher-llm")
# Interface utilisateur avec Gradio
def gradio_interface(query):
# Recherche dans FAISS
context = query_faiss_index(query, embeddings, index, data, embedding_model, top_k=5)
context_text = "\n".join(context)
# Générer une réponse à l'aide du LLM
answer = generate_answer(query, context_text, llm_pipeline)
return answer
# Lancer l'application Gradio
interface = gr.Interface(fn=gradio_interface, inputs="text", outputs="text", title="RAG Chatbot")
interface.launch()
# Exemple d'exécution
if __name__ == "__main__":
# Fichiers nécessaires
embeddings_file = "embeddings.npy"
index_file = "faiss_index.bin"
data_file = "avito.xls"
# Charger le modèle d'embedding
from sentence_transformers import SentenceTransformer
embedding_model = SentenceTransformer("all-MiniLM-L6-v2")
# Lancer le programme
main(embeddings_file, index_file, data_file)