Spaces:
Sleeping
Sleeping
File size: 3,956 Bytes
2c34bfb e98ddaa 2c34bfb 67bb883 2c34bfb 8b5b3e2 2c34bfb 1c9b9af 2c34bfb 085878e 2c34bfb 97cd980 fa4d8c3 2c34bfb 578c38e 2c34bfb e98ddaa 3d0bcee e98ddaa 2c34bfb 1c9b9af 578c38e 1c9b9af 2c34bfb 1c9b9af 2c34bfb f9bfd56 2c34bfb 1ab0fce 1c9b9af 2c34bfb 1c9b9af 2c34bfb f962321 1c9b9af 5916f4a ac2905b 5916f4a 78bb813 185c31f ac2905b f962321 7ecf042 f962321 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 | #================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/La_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
)
prompt = ChatPromptTemplate.from_messages([
("system", """Tu es un assistant expert en dans le domaine de l'elevage et la pêche. Réponds clairement.
Si tu ne connais pas, n'invente pas. Garde un ton 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))
# ================= 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()
|