Spaces:
Running
Running
anekameni
commited on
Commit
·
ff93078
1
Parent(s):
f7f383e
Update prompt and add link to github project
Browse files- app.py +46 -12
- src/rag_pipeline/prompts.py +14 -10
app.py
CHANGED
@@ -5,40 +5,74 @@ import gradio as gr
|
|
5 |
|
6 |
from src.rag_pipeline.rag_system import RAGSystem
|
7 |
|
|
|
8 |
os.environ["TOKENIZERS_PARALLELISM"] = "true"
|
9 |
|
10 |
|
11 |
class ChatInterface:
|
|
|
|
|
12 |
def __init__(self, rag_system: RAGSystem):
|
13 |
self.rag_system = rag_system
|
14 |
|
15 |
-
def respond(self, message: str, history: List[
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16 |
result = ""
|
17 |
-
|
18 |
-
#
|
19 |
-
for text in self.rag_system.query(message,
|
20 |
result += text
|
21 |
yield result
|
22 |
-
return result
|
23 |
|
24 |
-
def create_interface(self):
|
25 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
26 |
fn=self.respond,
|
27 |
type="messages",
|
28 |
title="Medivocate",
|
29 |
-
description=
|
30 |
)
|
31 |
-
return chat_interface
|
32 |
|
33 |
-
def launch(self, share=False):
|
|
|
|
|
|
|
|
|
|
|
|
|
34 |
interface = self.create_interface()
|
35 |
interface.launch(share=share)
|
36 |
|
37 |
|
38 |
-
#
|
39 |
if __name__ == "__main__":
|
40 |
-
|
|
|
|
|
41 |
rag_system.initialize_vector_store()
|
42 |
|
|
|
43 |
chat_interface = ChatInterface(rag_system)
|
44 |
chat_interface.launch(share=False)
|
|
|
5 |
|
6 |
from src.rag_pipeline.rag_system import RAGSystem
|
7 |
|
8 |
+
# Set environment variable to optimize tokenization performance
|
9 |
os.environ["TOKENIZERS_PARALLELISM"] = "true"
|
10 |
|
11 |
|
12 |
class ChatInterface:
|
13 |
+
"""Interface for interacting with the RAG system via Gradio's chat component."""
|
14 |
+
|
15 |
def __init__(self, rag_system: RAGSystem):
|
16 |
self.rag_system = rag_system
|
17 |
|
18 |
+
def respond(self, message: str, history: List[dict]):
|
19 |
+
"""
|
20 |
+
Processes a user message and returns responses incrementally using the RAG system.
|
21 |
+
|
22 |
+
Args:
|
23 |
+
message (str): User's input message.
|
24 |
+
history (List[dict]): Chat history as a list of role-content dictionaries.
|
25 |
+
|
26 |
+
Yields:
|
27 |
+
str: Incremental response generated by the RAG system.
|
28 |
+
"""
|
29 |
+
# Convert history to (role, content) tuples and limit to the last 10 turns
|
30 |
+
processed_history = [(turn["role"], turn["content"]) for turn in history][-10:]
|
31 |
result = ""
|
32 |
+
|
33 |
+
# Generate response incrementally
|
34 |
+
for text in self.rag_system.query(message, processed_history):
|
35 |
result += text
|
36 |
yield result
|
|
|
37 |
|
38 |
+
def create_interface(self) -> gr.ChatInterface:
|
39 |
+
"""
|
40 |
+
Creates the Gradio chat interface for Medivocate.
|
41 |
+
|
42 |
+
Returns:
|
43 |
+
gr.ChatInterface: Configured Gradio chat interface.
|
44 |
+
"""
|
45 |
+
description = (
|
46 |
+
"Medivocate is an application that offers clear and structured information "
|
47 |
+
"about African history and traditional medicine. The knowledge is exclusively "
|
48 |
+
"based on historical documentaries about the African continent.\n\n"
|
49 |
+
"🌟 **Code Repository**: [Medivocate GitHub](https://github.com/KameniAlexNea/medivocate)"
|
50 |
+
)
|
51 |
+
return gr.ChatInterface(
|
52 |
fn=self.respond,
|
53 |
type="messages",
|
54 |
title="Medivocate",
|
55 |
+
description=description,
|
56 |
)
|
|
|
57 |
|
58 |
+
def launch(self, share: bool = False):
|
59 |
+
"""
|
60 |
+
Launches the Gradio interface.
|
61 |
+
|
62 |
+
Args:
|
63 |
+
share (bool): Whether to generate a public sharing link. Defaults to False.
|
64 |
+
"""
|
65 |
interface = self.create_interface()
|
66 |
interface.launch(share=share)
|
67 |
|
68 |
|
69 |
+
# Entry point
|
70 |
if __name__ == "__main__":
|
71 |
+
# Initialize the RAG system with specified parameters
|
72 |
+
top_k_documents = 12
|
73 |
+
rag_system = RAGSystem(top_k_documents=top_k_documents)
|
74 |
rag_system.initialize_vector_store()
|
75 |
|
76 |
+
# Create and launch the chat interface
|
77 |
chat_interface = ChatInterface(rag_system)
|
78 |
chat_interface.launch(share=False)
|
src/rag_pipeline/prompts.py
CHANGED
@@ -6,16 +6,20 @@ from langchain.prompts.chat import (
|
|
6 |
)
|
7 |
|
8 |
system_template = """
|
9 |
-
Vous êtes un assistant IA
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
|
|
|
|
|
|
|
|
19 |
"""
|
20 |
|
21 |
messages = [
|
|
|
6 |
)
|
7 |
|
8 |
system_template = """
|
9 |
+
**Vous êtes un assistant IA spécialisé dans l'histoire de l'Afrique et la médecine traditionnelle africaine. Votre rôle est de fournir des réponses claires, structurées et précises en utilisant exclusivement les éléments de contexte suivants :**
|
10 |
+
-----------------
|
11 |
+
{context}
|
12 |
+
-----------------
|
13 |
+
|
14 |
+
**Règles à suivre :**
|
15 |
+
1. **Utilisez uniquement le contexte fourni pour répondre. **Si une information n'est pas présente dans le contexte, répondez : *"Je ne sais pas. Je ne dispose pas d'informations à ce sujet."*
|
16 |
+
2. **Répondez uniquement aux questions en lien avec l'histoire de l'Afrique ou la médecine traditionnelle africaine.** Si une question n'est pas pertinente, indiquez :
|
17 |
+
*"Je ne peux répondre qu'à des questions relatives à l'histoire africaine ou à la médecine traditionnelle. Pouvez-vous reformuler votre question en lien avec ces sujets ?"*
|
18 |
+
3. **Structurez vos réponses** : Lorsque pertinent, utilisez des points ou des listes pour rendre l'information plus claire et accessible.
|
19 |
+
4. **Ne devinez pas.** Si le contexte est insuffisant pour répondre précisément, dites :
|
20 |
+
*"Je ne sais pas. Les informations dont je dispose ne couvrent pas ce sujet."*
|
21 |
+
|
22 |
+
**Votre priorité est de fournir des informations exactes et de ne jamais sortir du cadre défini.**
|
23 |
"""
|
24 |
|
25 |
messages = [
|