samiha123 commited on
Commit
8235df4
·
verified ·
1 Parent(s): 3f86398

Update src/generation.py

Browse files
Files changed (1) hide show
  1. src/generation.py +29 -30
src/generation.py CHANGED
@@ -1,33 +1,36 @@
1
  from langchain_groq import ChatGroq
2
  from langchain.schema import AIMessage, HumanMessage, SystemMessage
3
  import json
4
-
 
5
  class RAGGenerator:
 
 
6
 
7
- def generate_answer(self, messages: list, solution: str, lang: str) -> str:
 
8
 
9
- # Ajout dans la consigne de la détection et citation explicite des sources légales si présentes
10
  consigne = (
11
- "Tu es un assistant technique. En te basant uniquement sur la solution finale fournie, "
12
- "mets en évidence uniquement les éléments pertinents qui répondent à la question de l'utilisateur. "
13
- "Formule ensuite une réponse claire, concise, strictement factuelle, précise et détaillée. "
14
- "Ne contiens aucune personnalisation (pas de nom, de salutation, ni de remerciement). "
15
- "Ne demande pas l'envoi de fichiers, captures d'écran, ou toute autre aide externe.\n"
16
- "Si le texte contient des citations de lois, articles, décrets, règlements, codes, directives ou toute source officielle, "
17
- "mentionne explicitement ces sources en citant leur nom ou référence."
18
- )
19
 
20
  langue_instruction = {
21
  'fr': 'Réponds en français.',
22
  'en': 'Respond in English.',
23
  'es': 'Responde en español.',
24
  'de': 'Antworte auf Deutsch.',
25
- 'zh': '请用中文回答。'
26
  }
27
 
28
- sys_msg = consigne + " " + langue_instruction.get(lang, '')
29
 
30
- content = [SystemMessage(content=f"Utilise la solution finale suivante pour formuler la réponse :\n{solution}")]
31
 
32
  chat_history = [SystemMessage(content=sys_msg)] + [
33
  AIMessage(content=msg["content"]) if msg["role"] == "assistant" else HumanMessage(content=msg["content"])
@@ -35,7 +38,7 @@ class RAGGenerator:
35
  ] + content
36
 
37
  chat = ChatGroq(
38
- model_name="meta-llama/llama-4-scout-17b-16e-instruct",
39
  temperature=0.2
40
  )
41
 
@@ -44,9 +47,9 @@ class RAGGenerator:
44
  return reply.content
45
 
46
 
47
- def retrieve_qa(self, query: str, docs_scores: list = []) -> tuple:
48
  if not docs_scores:
49
- raise ValueError("Aucun document trouvé pour la requête.")
50
 
51
  chat = ChatGroq(
52
  model_name="LLaMA3-8b-8192",
@@ -54,29 +57,33 @@ class RAGGenerator:
54
  )
55
  try:
56
  lang_detect_messages = [
57
- SystemMessage(content="Détecte la langue ISO 639-1 de la phrase suivante (ex: 'fr', 'en', 'es'):"),
 
58
  HumanMessage(content=query)
59
  ]
60
  lang_response = chat.invoke(lang_detect_messages)
61
  lang = lang_response.content.strip().lower()
62
  except Exception:
63
  lang = "en"
 
 
64
 
65
  first_doc, _ = docs_scores[0]
66
  try:
67
  qa_pairs = json.loads(first_doc.metadata.get('qa_pairs', '[]'))
68
  qa_pairs = [q for q in qa_pairs if q.get('question')]
69
  except json.JSONDecodeError:
70
- raise ValueError("Métadonnée 'qa_pairs' invalide.")
 
71
 
72
- # Traduction des questions dans la langue détectée
73
  if lang and qa_pairs:
74
  for pair in qa_pairs:
75
  original_question = pair.get("question", "")
76
  if original_question:
77
  try:
78
  messages = [
79
- SystemMessage(content=f"Traduis la question suivante en {lang}, uniquement la phrase traduite:"),
 
80
  HumanMessage(content=original_question)
81
  ]
82
  response = chat.invoke(messages)
@@ -85,18 +92,10 @@ class RAGGenerator:
85
  pass
86
 
87
  solutions = []
88
- sources = set() # Pour collecter les sources
89
-
90
  for doc, _ in docs_scores:
91
  sol = doc.metadata.get('solution_finale', '')
92
  if sol:
93
  solutions.append(sol)
94
- # Supposons que la source est stockée dans metadata sous 'source' ou 'origin'
95
- src = doc.metadata.get('source') or doc.metadata.get('origin') or doc.metadata.get('reference')
96
- if src:
97
- sources.add(src)
98
-
99
  full_solution = "\n\n".join(solutions)
100
 
101
- # Retourner aussi la liste des sources pour info / traçabilité
102
- return qa_pairs, full_solution, lang, list(sources)
 
1
  from langchain_groq import ChatGroq
2
  from langchain.schema import AIMessage, HumanMessage, SystemMessage
3
  import json
4
+ from langchain.schema import SystemMessage, HumanMessage
5
+ from langchain_groq import ChatGroq
6
  class RAGGenerator:
7
+
8
+
9
 
10
+
11
+ def generate_answer(self,messages: list, solution: str, lang: str) -> str:
12
 
 
13
  consigne = (
14
+ "Te egy műszaki asszisztens vagy. A megadott végleges megoldás alapján "
15
+ "csak azokat a releváns elemeket emeld ki, amelyek válaszolnak a felhasználó kérdésére. "
16
+ "Ezután fogalmazz meg egy tiszta, tömör, szigorúan tényszerű, pontos és részletes választ. "
17
+ "NE tartalmazzon SEMMILYEN személyesítést (sem nevet, sem keresztnév, sem köszönést, sem köszönetet, sem aláírást). "
18
+ "NE tartalmazzon SEMMILYEN kérést fájlok, külső objektumok, képernyőképek küldésére "
19
+ "vagy bármilyen más, külső átvitelhez szükséges segítségnyújtást."
20
+ )
21
+
22
 
23
  langue_instruction = {
24
  'fr': 'Réponds en français.',
25
  'en': 'Respond in English.',
26
  'es': 'Responde en español.',
27
  'de': 'Antworte auf Deutsch.',
28
+ 'zh': '请用中文回答。'
29
  }
30
 
31
+ sys_msg = consigne + ' ' + langue_instruction.get(lang, '')
32
 
33
+ content = [SystemMessage(content = f"A következő megoldás felhasználásával készítsd el az átfogalmazást: Végleges megoldás:\n{solution}")]
34
 
35
  chat_history = [SystemMessage(content=sys_msg)] + [
36
  AIMessage(content=msg["content"]) if msg["role"] == "assistant" else HumanMessage(content=msg["content"])
 
38
  ] + content
39
 
40
  chat = ChatGroq(
41
+ model_name="meta-llama/llama-4-scout-17b-16e-instruct",
42
  temperature=0.2
43
  )
44
 
 
47
  return reply.content
48
 
49
 
50
+ def retrieve_qa(self,query: str, docs_scores: list = []) -> tuple:
51
  if not docs_scores:
52
+ raise ValueError("Nem található dokumentum a lekérdezéshez.")
53
 
54
  chat = ChatGroq(
55
  model_name="LLaMA3-8b-8192",
 
57
  )
58
  try:
59
  lang_detect_messages = [
60
+ SystemMessage(content="Határozd meg a következő mondat nyelvét. Csak az ISO 639-1 nyelvkódot válaszold meg (pl. 'fr', 'en', 'es' stb.):"),
61
+
62
  HumanMessage(content=query)
63
  ]
64
  lang_response = chat.invoke(lang_detect_messages)
65
  lang = lang_response.content.strip().lower()
66
  except Exception:
67
  lang = "en"
68
+ if not docs_scores:
69
+ raise ValueError("Aucun document pertinent trouvé après reranking.")
70
 
71
  first_doc, _ = docs_scores[0]
72
  try:
73
  qa_pairs = json.loads(first_doc.metadata.get('qa_pairs', '[]'))
74
  qa_pairs = [q for q in qa_pairs if q.get('question')]
75
  except json.JSONDecodeError:
76
+ raise ValueError("Érvénytelen a 'qa_pairs' metaadat.")
77
+
78
 
 
79
  if lang and qa_pairs:
80
  for pair in qa_pairs:
81
  original_question = pair.get("question", "")
82
  if original_question:
83
  try:
84
  messages = [
85
+ SystemMessage(content=f"Fordítsd le a következő kérdést {lang} nyelvre, csak a lefordított mondatot add meg:"),
86
+
87
  HumanMessage(content=original_question)
88
  ]
89
  response = chat.invoke(messages)
 
92
  pass
93
 
94
  solutions = []
 
 
95
  for doc, _ in docs_scores:
96
  sol = doc.metadata.get('solution_finale', '')
97
  if sol:
98
  solutions.append(sol)
 
 
 
 
 
99
  full_solution = "\n\n".join(solutions)
100
 
101
+ return qa_pairs, full_solution, lang