anekameni commited on
Commit
ff93078
·
1 Parent(s): f7f383e

Update prompt and add link to github project

Browse files
Files changed (2) hide show
  1. app.py +46 -12
  2. 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[List[str]]):
 
 
 
 
 
 
 
 
 
 
 
 
16
  result = ""
17
- history = [(turn["role"], turn["content"]) for turn in history]
18
- # limit history to 10 to avoid message length limit
19
- for text in self.rag_system.query(message, history[-10:]):
20
  result += text
21
  yield result
22
- return result
23
 
24
- def create_interface(self):
25
- chat_interface = gr.ChatInterface(
 
 
 
 
 
 
 
 
 
 
 
 
26
  fn=self.respond,
27
  type="messages",
28
  title="Medivocate",
29
- description="Medivocate est une application qui offre des informations claires et structurées sur l'histoire de l'Afrique et sa médecine traditionnelle, en s'appuyant exclusivement sur un contexte issu de documentaires sur l'histoire du continent africain.",
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
- # Usage example:
39
  if __name__ == "__main__":
40
- rag_system = RAGSystem(top_k_documents=12)
 
 
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 qui fournit des informations sur l'histoire de l'Afrique et la médecine traditionnelle africaine. Vous recevez une question et fournissez une réponse claire et structurée. Lorsque cela est pertinent, utilisez des points et des listes pour structurer vos réponses.
10
-
11
- Utilisez uniquement les éléments de contexte suivants pour répondre à la question de l'utilisateur. Si vous ne connaissez pas la réponse, dites simplement que vous ne savez pas, n'essayez pas d'inventer une réponse.
12
-
13
- Si la question posée est dans une langue parlée en Afrique ou demande une traduction dans une de ces langues, répondez que vous ne savez pas et demandez à l'utilisateur de reformuler sa question.
14
-
15
- Si vous connaissez la réponse à la question mais que cette réponse ne provient pas du contexte ou n'est pas relative à l'histoire africaine ou à la médecine traditionnelle, répondez que vous ne savez pas et demandez à l'utilisateur de reformuler sa question.
16
-
17
- -----------------
18
- {context}
 
 
 
 
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 = [