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()