| 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 |
|
|
| |
| 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): |
|
|
| |
| query_emb = compute_embeddings([message]) |
|
|
| |
| docs = retrieve(query_emb, index, metadata, top_k=10) |
|
|
| |
| docs = rerank(message, docs, top_k=10) |
|
|
| |
| context = "\n\n".join([doc["text"] for doc, score in docs]) |
|
|
| |
| prompt = f""" |
| Context: |
| {context} |
| |
| Question: |
| {message} |
| |
| Answer: |
| """ |
|
|
| |
| answer = generate_answer(prompt) |
|
|
| |
| answer = clean_answer(answer) |
|
|
| |
| audio = text_to_audio(answer) |
|
|
| |
| debug = "\n\n".join( |
| [ |
| f"📄 Chunk {i+1} (Score : {score:.3f})\n{doc['text']}" |
| for i, (doc, score) in enumerate(docs) |
| ] |
| ) |
|
|
| |
| final_output = f"{answer}\n\n---\n\n🔍 Retrieved chunks:\n{debug}" |
|
|
|
|
| return final_output, audio |
|
|
| |
| |
|
|
| """ |
| |
| 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() |
| """ |