rag_perso / app_back.py
ALBERT Clement
Voice assistant improvements
e7e3aa3
Raw
History Blame Contribute Delete
2.12 kB
import spaces
import gradio as gr
from src.vectorstore.faiss_index import load_index
from src.vectorstore.metadata_store import load_metadata
from src.retrieval.retriever import retrieve
from src.retrieval.reranker import rerank
from src.llm.generator import generate_answer
from src.llm.postprocessing import clean_answer
from src.data_processing.txt_embeddings import compute_embeddings
from src.voice.assistant import text_to_audio
# Load once
from pathlib import Path
BASE_DIR = Path(__file__).parent
INDEX_PATH = str(BASE_DIR / "data/vectorstore/faiss.index")
METADATA_PATH = str(BASE_DIR / "data/metadata/metadata.json")
index = load_index(INDEX_PATH)
metadata = load_metadata(METADATA_PATH)
@spaces.GPU
def chat_fn(message, history):
# 1. Embedding de la question
query_emb = compute_embeddings([message])
# 2. Retrieval FAISS
docs = retrieve(query_emb, index, metadata, top_k=10)
# 3. Reranking (IMPORTANT: retourne (doc, score))
docs = rerank(message, docs, top_k=10)
# 4. Construction du contexte LLM
context = "\n\n".join([doc["text"] for doc, score in docs])
# 5. Prompt
prompt = f"""
Context:
{context}
Question:
{message}
Answer:
"""
# 6. Génération réponse LLM
answer = generate_answer(prompt)
# 6.1. Postprocessing
answer = clean_answer(answer)
# 6.2. Audio answer
audio = text_to_audio(answer)
# 7. Debug chunks avec scores
debug = "\n\n".join(
[
f"📄 Chunk {i+1} (Score : {score:.3f})\n{doc['text']}"
for i, (doc, score) in enumerate(docs)
]
)
# 8. Output final
final_output = f"{answer}\n\n---\n\n🔍 Retrieved chunks:\n{debug}"
return final_output, audio
###########################################################################
# Interface Gradio type ChatGPT
"""
audio_output = gr.Audio(
label="🔊 Audio"
)
demo = gr.ChatInterface(
fn=chat_fn,
title="💬 RAG Assistant",
description="Chat avec ton système RAG local",
additional_outputs=[audio_output]
)
if __name__ == "__main__":
demo.launch()
"""