Spaces:
Sleeping
Sleeping
File size: 4,831 Bytes
2c34bfb e98ddaa 2c34bfb 67bb883 2c34bfb 8b5b3e2 2c34bfb f2f9ede 2c34bfb 1c9b9af 2c34bfb 085878e 2c34bfb 97cd980 fa4d8c3 2c34bfb 578c38e 499ccd7 2c34bfb e98ddaa 3d0bcee e98ddaa 2c34bfb 9a1db27 2c34bfb 9a1db27 2c34bfb 333acbb 2c34bfb 1c9b9af 7c69608 2c34bfb 1c9b9af 7c69608 1c9b9af 2c34bfb 9a1db27 2c34bfb f9bfd56 2c34bfb 1ab0fce 1c9b9af 2c34bfb 1c9b9af 2c34bfb f962321 1c9b9af 5916f4a ac2905b 333acbb 5916f4a 333acbb 5916f4a 333acbb 3eefb71 333acbb 3eefb71 333acbb 3eefb71 ac2905b f962321 7ecf042 f962321 1ab0fce 499ccd7 1ab0fce 499ccd7 1ab0fce 2c34bfb b09f05e 2c34bfb 1ab0fce 7490740 | 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 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 | #================imports==============
import uuid
import requests
import os
os.environ["USER_AGENT"] = "RAG-App/1.0"
from typing import Dict, List, Any
from dotenv import load_dotenv
from bs4 import BeautifulSoup
from langchain_core.globals import set_llm_cache
from langchain_core.caches import InMemoryCache
from langchain_community.document_loaders import WebBaseLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_huggingface import HuggingFaceEmbeddings
#from langchain_community.vectorstores import Weaviate
from langchain_community.vectorstores import FAISS
from langchain_groq import ChatGroq
from langchain_core.prompts import ChatPromptTemplate,MessagesPlaceholder
from langchain_classic.chains.combine_documents import create_stuff_documents_chain
from langchain_classic.chains import create_retrieval_chain
from langchain_core.runnables.history import RunnableWithMessageHistory
from langchain_community.chat_message_histories import ChatMessageHistory
from langchain_core.chat_history import BaseChatMessageHistory
#================== CONFIG==================
load_dotenv()
set_llm_cache(InMemoryCache())
api_key=os.environ["GROQ_API_KEY"]
#os.environ["HF_API_KEY"]
print("api chargée:" if api_key else "y'a probleme!!")
#========== charger et decouper documents=================
urls=[
"https://fr.wikipedia.org/wiki/%C3%89levage",
"https://fr.wikipedia.org/wiki/P%C3%AAche"
]
loader = WebBaseLoader(urls,
requests_kwargs={
"headers":{
"User-Agent":"RAG-App/1.0"
}
}
)
docs =loader.load()
splitter = RecursiveCharacterTextSplitter(chunk_size= 1000, chunk_overlap=200)
chunks= splitter.split_documents(docs)
#============ embeding et indexation vers faiss_db =====================
embeddings= HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
faiss_db=FAISS.from_documents(
documents=chunks,
embedding=embeddings
)
retriever=faiss_db.as_retriever(search_type="similarity", search_kwargs={"k":3})
#=============== LLM et Prompt ======================
llm = ChatGroq(
model="llama-3.3-70b-versatile",
temperature=0.0,
max_tokens=1200,
streaming=True
)
prompt = ChatPromptTemplate.from_messages([
("system", """Tu es un assistant expert en élevage et pêche.
Tu dois respecter ces règles à la lettre :
1. Réponds UNIQUEMENT avec les informations présentes dans le contexte ci-dessous.
2. Si la question n'est pas couverte par le contexte, réponds exactement :
"Désolé, je n'ai pas d'information sur ce sujet dans mes documents actuels."
3. Ne jamais inventer, extrapoler ou utiliser tes connaissances générales.
4. Sois clair, précis et amical.
Contexte :
{context}
"""),
MessagesPlaceholder(variable_name="chat_history"),
("human", "{input}"),
])
#============= CHAINE DE RECUPERATION =====================
stuff_chain= create_stuff_documents_chain(llm, prompt)
rag_chain=create_retrieval_chain(retriever, stuff_chain)
import gradio as gr
store = {}
def get_session_history(session_id:str)->BaseChatMessageHistory:
if session_id not in store:
store[session_id] = ChatMessageHistory()
return store[session_id]
# ======== CHAIN AVEC MÉMOIRE ===========
convers_chain = RunnableWithMessageHistory(
rag_chain,
get_session_history,
input_messages_key="input",
history_messages_key="chat_history",
output_messages_key="answer"
)
# =============FONCTION CHAT ================
SESSION_ID = str(uuid.uuid4()) # session globale
# def chat_fn(message, history):
# result = convers_chain.invoke(
# {"input": message},
# config={"configurable": {"session_id": SESSION_ID}}
# )
# return result.get("answer", str(result))
def chat_fn(message, history):
"""Chat avec streaming optimisé"""
response = ""
for chunk in convers_chain.stream(
{"input": message},
config={"configurable": {"session_id": SESSION_ID}}
):
# Extraction intelligente
token = None
if isinstance(chunk, dict):
token = chunk.get("answer")
elif hasattr(chunk, "content"):
token = chunk.content
if token:
response += token
yield response
# ================= GRADIO ====================
demo = gr.ChatInterface(
fn=chat_fn,
title="🤖 RAG:Specialist en Science Animale 👌",
description="Posez vos questions sur l'élévage et la pêche",
examples=[
"C'est quoi la Pêche ?",
"Explique l'élévage",
"Quelle est la différence entre l'élévage et Pêche ?"
]
)
# ===================LANCEMENT ================
demo.launch()
|