LCA commited on
Commit
2fd6167
·
verified ·
1 Parent(s): 885ae73

mise à jour du prompt

Browse files
Files changed (1) hide show
  1. app.py +32 -44
app.py CHANGED
@@ -9,7 +9,6 @@ from huggingface_hub import InferenceClient
9
  from datasets import load_dataset
10
  import json
11
 
12
-
13
  DATASET_REPO = "LCA/HACKATHON_PARTS"
14
 
15
  dataset = load_dataset(DATASET_REPO, split="train")
@@ -18,7 +17,6 @@ df = dataset.to_pandas()
18
  descriptions = df['DESIGNATION'].tolist()
19
  codes = df["CODE"].astype(str).tolist()
20
 
21
-
22
  # --- Embedding model ---
23
  embedding_model = SentenceTransformer("all-MiniLM-L6-v2")
24
 
@@ -40,7 +38,8 @@ else:
40
  # client = InferenceClient("HuggingFaceH4/zephyr-7b-beta", token=os.getenv("HF_TOKEN"))
41
 
42
  def rechercher_article(articleSource):
43
-
 
44
  source = articleSource["designation"]
45
  query_embedding = embedding_model.encode([source], convert_to_numpy=True)
46
  faiss.normalize_L2(query_embedding)
@@ -48,46 +47,41 @@ def rechercher_article(articleSource):
48
  similarity_scores, indices = index.search(query_embedding, k=1)
49
  # Gérer la qualité du retour avec un seuil de similarité
50
  threshold = 0.7 # à ajuster selon vos tests
 
51
  if similarity_scores[0][0] < threshold:
52
- print(f"Score de similarité trop faible ({similarity_scores[0][0]:.2f}) pour '{source}'")
53
- return "UNKNOWN"
54
-
55
-
56
- article = {}
57
- article["code"] = codes[indices[0][0]]
58
- article["designation"] = descriptions[indices[0][0]]
59
- article["source"] = source
60
- article["quantite"] = articleSource.get("quantite", None)
61
- print(f"Code trouvé pour '{source}': {article['code']} / {article['designation']}")
62
-
 
63
 
64
  return article
65
 
66
  def respond(message):
67
-
 
 
68
  # Prompt par défaut
69
- custom_prompt = """Tu es un analyseur de messages expert.
70
  Ta mission est de déterminer dans le messages fourni quels sont les articles qui sont demandés et pour quelle quantité.
71
- La réponse est au format json et donne 2 informations par article identifié : la désignation et le nombre
72
- La désignation est formé du type d'article et des caractéristiques comme la matière ou les dimensions
73
-
74
- Ne retourne que le JSON.
75
 
 
 
76
  """
77
- # query_embedding = embedding_model.encode([message], convert_to_numpy=True)
78
- # faiss.normalize_L2(query_embedding)
79
- # _, indices = index.search(query_embedding, k=5)
80
- # context = "\n".join([f"{codes[i]}: {descriptions[i]}" for i in indices[0]])
81
-
82
- # Utilise le prompt personnalisé
83
 
84
-
85
- # message = custom_prompt.format(message=message)
86
-
87
  messages = [{"role": "system", "content": custom_prompt}]
88
  messages += [{"role": "user", "content": message}]
89
 
90
- # full_response = client.text_generation(message)
91
  client = InferenceClient("HuggingFaceH4/zephyr-7b-beta", token=os.getenv("HF_TOKEN"))
92
  # client = InferenceClient(
93
  # "deepseek-ai/DeepSeek-R1-Distill-Qwen-32B",
@@ -102,13 +96,17 @@ def respond(message):
102
  max_tokens=512,
103
  stream=True,
104
  temperature=0.1,
105
- top_p=0.8,
106
  ):
107
  token = chunk.choices[0].delta.content
108
  if token:
109
  full_response += token
110
  # yield full_response.replace("\n", "\n\n")
111
 
 
 
 
 
112
  # If you expect a JSON response, you can try to parse it here
113
  # import json
114
  # try:
@@ -118,8 +116,7 @@ def respond(message):
118
  articles = []
119
  for article in data.get("articles", []):
120
  found_article = rechercher_article(article)
121
- if found_article != "UNKNOWN":
122
- articles.append(found_article)
123
  order["articles"] = articles
124
  # Ajouter les champs destinataire et delai avec des valeurs figées
125
  order["destinataire"] = {
@@ -148,15 +145,7 @@ with gr.Blocks() as demo:
148
  def chat(message):
149
  history = [] # ou récupère l'historique si tu veux le gérer
150
  gen = respond(message)
151
- # full_response = ""
152
- # for response in gen:
153
- # full_response = full_response + response
154
- # On renvoie la dernière réponse et le contexte utilisé
155
- # Il faut recalculer le contexte ici pour l'afficher
156
- # query_embedding = embedding_model.encode([message], convert_to_numpy=True)
157
- # faiss.normalize_L2(query_embedding)
158
- # _, indices = index.search(query_embedding, k=5)
159
- # context = "\n".join([f"{codes[i]}: {descriptions[i]}" for i in indices[0]])
160
  return json.dumps(gen, indent=2, ensure_ascii=False)
161
 
162
  send_btn.click(
@@ -166,5 +155,4 @@ with gr.Blocks() as demo:
166
  )
167
 
168
  if __name__ == "__main__":
169
- demo.launch(share=True)
170
-
 
9
  from datasets import load_dataset
10
  import json
11
 
 
12
  DATASET_REPO = "LCA/HACKATHON_PARTS"
13
 
14
  dataset = load_dataset(DATASET_REPO, split="train")
 
17
  descriptions = df['DESIGNATION'].tolist()
18
  codes = df["CODE"].astype(str).tolist()
19
 
 
20
  # --- Embedding model ---
21
  embedding_model = SentenceTransformer("all-MiniLM-L6-v2")
22
 
 
38
  # client = InferenceClient("HuggingFaceH4/zephyr-7b-beta", token=os.getenv("HF_TOKEN"))
39
 
40
  def rechercher_article(articleSource):
41
+ print(f"Recherch article pour {articleSource}")
42
+ article = {}
43
  source = articleSource["designation"]
44
  query_embedding = embedding_model.encode([source], convert_to_numpy=True)
45
  faiss.normalize_L2(query_embedding)
 
47
  similarity_scores, indices = index.search(query_embedding, k=1)
48
  # Gérer la qualité du retour avec un seuil de similarité
49
  threshold = 0.7 # à ajuster selon vos tests
50
+ print(f"Score de similarité ({similarity_scores[0][0]:.2f}) pour '{source}'")
51
  if similarity_scores[0][0] < threshold:
52
+ article["code"] = "Inconnu"
53
+ article["designation"] = source
54
+ article["source"] = source
55
+ article["quantite"] = articleSource.get("quantite", None)
56
+ print(f"Code non trouvé pour '{source}'")
57
+ else:
58
+ article["code"] = codes[indices[0][0]]
59
+ article["designation"] = descriptions[indices[0][0]]
60
+ article["source"] = source
61
+ article["quantite"] = articleSource.get("quantite", None)
62
+ print(f"Code trouvé pour '{source}': {article['code']} / {article['designation']}")
63
+
64
 
65
  return article
66
 
67
  def respond(message):
68
+ print(" ------------------ ")
69
+ print(message)
70
+ print(" ------------------ ")
71
  # Prompt par défaut
72
+ custom_prompt = """Tu es un programme chargé de générer un fichier JSON à partir d'un message.
73
  Ta mission est de déterminer dans le messages fourni quels sont les articles qui sont demandés et pour quelle quantité.
74
+ La réponse est au format json et donne uniquement une liste d'article.
75
+ Pour chaque article 2 informations par article identifié : la désignation et le nombre
76
+ La désignation peut être est formée du type d'article et des caractéristiques comme la matière ou les dimensions
 
77
 
78
+ Return only JSON content.
79
+
80
  """
 
 
 
 
 
 
81
 
 
 
 
82
  messages = [{"role": "system", "content": custom_prompt}]
83
  messages += [{"role": "user", "content": message}]
84
 
 
85
  client = InferenceClient("HuggingFaceH4/zephyr-7b-beta", token=os.getenv("HF_TOKEN"))
86
  # client = InferenceClient(
87
  # "deepseek-ai/DeepSeek-R1-Distill-Qwen-32B",
 
96
  max_tokens=512,
97
  stream=True,
98
  temperature=0.1,
99
+ top_p=0.1,
100
  ):
101
  token = chunk.choices[0].delta.content
102
  if token:
103
  full_response += token
104
  # yield full_response.replace("\n", "\n\n")
105
 
106
+ print("---- retour de l'analyse")
107
+ print(full_response)
108
+ print("")
109
+
110
  # If you expect a JSON response, you can try to parse it here
111
  # import json
112
  # try:
 
116
  articles = []
117
  for article in data.get("articles", []):
118
  found_article = rechercher_article(article)
119
+ articles.append(found_article)
 
120
  order["articles"] = articles
121
  # Ajouter les champs destinataire et delai avec des valeurs figées
122
  order["destinataire"] = {
 
145
  def chat(message):
146
  history = [] # ou récupère l'historique si tu veux le gérer
147
  gen = respond(message)
148
+
 
 
 
 
 
 
 
 
149
  return json.dumps(gen, indent=2, ensure_ascii=False)
150
 
151
  send_btn.click(
 
155
  )
156
 
157
  if __name__ == "__main__":
158
+ demo.launch(share=True)