File size: 2,116 Bytes
e7e3aa3 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | 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()
""" |