Alexandre commited on
Commit
3bedc3b
·
1 Parent(s): 63a82a9

chore: :fire: remove unused packages

Browse files
Files changed (2) hide show
  1. app.py +2 -143
  2. requirements.txt +1 -2
app.py CHANGED
@@ -1,6 +1,5 @@
1
  import os
2
  import gradio as gr
3
- from haystack import Pipeline
4
  from haystack.document_stores.in_memory import InMemoryDocumentStore
5
  from haystack.dataclasses import ChatMessage
6
  from haystack.utils.auth import Secret
@@ -13,7 +12,6 @@ from haystack_integrations.components.embedders.mistral import MistralDocumentEm
13
  from haystack_integrations.components.generators.mistral import MistralChatGenerator
14
  from haystack_integrations.components.embedders.mistral.document_embedder import MistralDocumentEmbedder
15
  from haystack.components.generators.utils import print_streaming_chunk
16
- import pandas as pd
17
 
18
  title = "Gaia Mistral Chat RAG PDF Demo"
19
  description = "Example of an assistant with Gradio, RAG from PDF documents and Mistral AI via its API"
@@ -79,7 +77,7 @@ reseau: Charentes
79
  culture: Vigne
80
  date: 26/02/2024
81
  5. Partie 5 : Mémo de l’observateur
82
- Rédige un encart “mémo de l’Observateur” qui liste les bonnes pratiques, suggère la recherche de premiers symptômes de bioagresseurs à forte pression épidémiologique spécifique à la culture sur la période de un mois avant et un moins après la date
83
  """,
84
  """Partie 6 : Ce qu’il faut retenir
85
  A partir du bulletin de santé végétal proposé, rédige une rubrique de synthèse intitulé “Ce qu’il faut retenir”. Cette rubrique sera divisée en sous sections correspondant à chacun des encarts qui compose le BSV, hormis celle de la météorologie, et proposera un récapitulatif de deux lignes maximum sur les éléments essentiels à retenir. Par exemple :
@@ -112,7 +110,7 @@ def predict_haystack(message, history):
112
  messages = []
113
  for human, assistant in history:
114
  messages.append(ChatMessage(role="system", content=assistant, name="history-assistant"))
115
- messages.append(ChatMessage(role="user", content=human, name="history-user"))
116
 
117
  messages.append(ChatMessage(role="user", content=message, name="query"))
118
 
@@ -170,144 +168,5 @@ def predict_haystack_rag(message, history):
170
  }
171
  )
172
  yield response["llm"]["replies"][0].content
173
-
174
-
175
- def embed_model():
176
-
177
- llm = MistralChatGenerator(api_key=Secret.from_token(env_api_key),
178
- model='mistral-large-latest')
179
-
180
- #if maladies.txt is absent, we ask for the maladies
181
- if not os.path.exists('maladies.txt'):
182
- prompt_maladies = """
183
- Je vais te donner une extraction d'un fichier CSV, la première ligne est composée des entêtes :
184
- NOM_PARCELLE;TYPE_SUIVI;COMMUNE_PARCELLE;CEPAGE;DATE_OBSERVATION;STADE_PHENOLOGIQUE;COMMENTAIRE;MCF;MFF;MFI;MGF;MGI;OCF;OFF;OFI;OGF;OGI;BCF;BFF;BFI;BGF;BGI;PCF;PFF;PFI;PGF;PGI\
185
- Toutes les colonnes en 3 lettres ont une signification :
186
- M pour le mildiou
187
- O pour l'oidium
188
- F pour la feuille si en deuxième position
189
- F frequence si en 3ème position
190
- G pour la grappe
191
- C pour le cep
192
- P pour pourriture grise
193
- Par Exemple MCF veux dire Mildiou sur Cep Frequence et MFF veut dire Mildiou sur Feuille Fréquence.
194
- # Facts
195
- MCI < 30 : Début d'invasion
196
- 30 < MCI < 50 : Invasion moyenne
197
- 50 < MCI <= 100 : Invasion généralisée
198
- et pareil pour les autres triplets.
199
- Les valeurs sont des pourcentages.
200
- # fichier CSV"""
201
-
202
- df = pd.read_csv('maladies.csv', delimiter=';')
203
- #keep the 50 lines where DATE_OBSERVATION is the most recent. date format is %d/%m/%Y
204
- df['DATE_OBSERVATION'] = pd.to_datetime(df['DATE_OBSERVATION'], format='%d/%m/%Y')
205
- df = df.sort_values(by='DATE_OBSERVATION', ascending=False).head(200)
206
- csv_text = df.to_csv(index=False, sep=';')
207
-
208
- prompt_maladies = prompt_maladies + csv_text
209
-
210
- prompt_maladies = prompt_maladies + "```# Steps\
211
- step 1 : dans cette étape, écris un rapport permettant d\'évaluer la progression de l\'invasion pour chaque triplet en fonction de la date\
212
- step 2 : liste les triplets pour lesquels l\'invasion est la plus avancée\
213
- step 3 : écrit un résumé de la situation pour le black rot, l\'oidium et le mildiou sur la période.\
214
- step 4 : indique les actions à mettre en place pour lutter contre les maladies.\
215
- applique les étapes\
216
- ```"
217
-
218
- message = ChatMessage.from_user(prompt_maladies)
219
- print("asking for maladies")
220
- response = llm.run(messages=[message])
221
- maladies = (response["replies"][0].content)
222
- print(maladies)
223
-
224
- #turn the string maladies into a document for haystack
225
- f = open('maladies.txt', 'w')
226
- f.write(maladies)
227
- f.close()
228
-
229
- #if stades.txt is absent, we ask for the stades
230
- if not os.path.exists('stades.txt'):
231
- print("asking for stades")
232
- prompt_stades = """je vais te donner une extraction d\'un fichier CSV, avec des dates d'observation et des stades phénologiques.
233
- DATE_OBSERVATION;STADE_PHENOLOGIQUE;
234
- évaluer la progression de la vigne sur les derniers jours. Citer le stade phénologique le plus commun et le stade phénologique le plus avancé.
235
- # fichier CSV"""
236
- df = pd.read_csv('maladies.csv', delimiter=';')
237
- df = df[ ['DATE_OBSERVATION', 'STADE_PHENOLOGIQUE'] ]
238
- #convert date to dmy
239
- df['DATE_OBSERVATION'] = pd.to_datetime(df['DATE_OBSERVATION'], format='%d/%m/%Y')
240
- df = df.sort_values(by='DATE_OBSERVATION', ascending=False)
241
- #get the observations for the 10 days before the most recent observation
242
- most_recent_date = df['DATE_OBSERVATION'].iloc[0]
243
- df = df[df['DATE_OBSERVATION'] > most_recent_date - pd.Timedelta(days=10)]
244
- df = df.head(200)
245
- csv_text = df.to_csv(index=False, sep=';')
246
- prompt_stades = prompt_stades + csv_text
247
-
248
- message = ChatMessage.from_user(prompt_stades)
249
- response = llm.run(messages=[message])
250
- stades = (response["replies"][0].content)
251
- print(stades)
252
-
253
- #turn the string stades into a document for haystack
254
- f = open('stades.txt', 'w')
255
- f.write(stades)
256
- f.close()
257
-
258
-
259
-
260
- print("embedding documents")
261
- document_store = InMemoryDocumentStore()
262
-
263
- docs_maladies = TextFileToDocument().run(sources=["maladies.txt"])
264
- docs_stades = TextFileToDocument().run(sources=["stades.txt"])
265
- docs = {"documents": docs_maladies["documents"] + docs_stades["documents"]}
266
- split_docs = DocumentSplitter(split_by="passage", split_length=2).run(documents=docs["documents"])
267
- embeddings = MistralDocumentEmbedder(api_key=Secret.from_token(env_api_key)).run(documents=split_docs["documents"])
268
- DocumentWriter(document_store=document_store).run(documents=embeddings["documents"])
269
-
270
-
271
- text_embedder = MistralTextEmbedder(api_key=Secret.from_token(env_api_key))
272
- retriever = InMemoryEmbeddingRetriever(document_store=document_store)
273
- prompt_builder = DynamicChatPromptBuilder(runtime_variables=["documents"])
274
-
275
-
276
- chat_template = """Vous êtes un rédacteur de l'institut techique de la vignerédigez un bulletin de santé du végétal pour la culture "vigne" dans la région "charente" pour la date du 29/09/2023 en utilisant le contenu des documents. Sois spécifique et concis.
277
- # Facts Les 5 principales catégories sont "phrénologie", "météorologie", "maladies", et un récapitulatif.
278
-
279
-
280
-
281
- {{query}}\n
282
- Documents:
283
- {% for document in documents %}
284
- {{document.content}}
285
- {% endfor%}
286
- """
287
-
288
- messages = [ChatMessage.from_user(chat_template)]
289
-
290
- # print(messages)
291
-
292
- rag_pipeline = Pipeline()
293
- rag_pipeline.add_component("text_embedder", text_embedder)
294
- rag_pipeline.add_component("retriever", retriever)
295
- rag_pipeline.add_component("prompt_builder", prompt_builder)
296
- llm = MistralChatGenerator(api_key=Secret.from_token(env_api_key), model="mistral-large-latest")
297
- rag_pipeline.add_component("llm", llm)
298
-
299
-
300
- rag_pipeline.connect("text_embedder.embedding", "retriever.query_embedding")
301
- rag_pipeline.connect("retriever.documents", "prompt_builder.documents")
302
- rag_pipeline.connect("prompt_builder.prompt", "llm.messages")
303
- # steps
304
- # step 1 : dans "Phrénologie", rédigez un bref rapport sur le stade phénologique de la vigne. mentionnez le stade moyen et le stade le plus avancé avec les codes.
305
- # step 2 : dans "Météorologie", rédigez un rapport sur la météo. mentionnez la température moyenne, les précipitations, et leur évolution par rapport à la semaine dernière, ainsi que l'impact sur la vigne.
306
- # step 3 : dans "Maladies", rédigez un rapport exhaustif sur l'évolution des maladies. mentionnez les maladies les plus avancées et les actions à entreprendre.
307
- # step 4 : dans "Récapitulatif", rédigez un résumé de la situation et des actions à entreprendre.
308
-
309
- return rag_pipeline, messages
310
 
311
- # pipeline, messages = embed_model()
312
- # chat = gr.ChatInterface(predict_haystack_rag).launch()
313
  chat = gr.ChatInterface(predict_haystack).launch()
 
1
  import os
2
  import gradio as gr
 
3
  from haystack.document_stores.in_memory import InMemoryDocumentStore
4
  from haystack.dataclasses import ChatMessage
5
  from haystack.utils.auth import Secret
 
12
  from haystack_integrations.components.generators.mistral import MistralChatGenerator
13
  from haystack_integrations.components.embedders.mistral.document_embedder import MistralDocumentEmbedder
14
  from haystack.components.generators.utils import print_streaming_chunk
 
15
 
16
  title = "Gaia Mistral Chat RAG PDF Demo"
17
  description = "Example of an assistant with Gradio, RAG from PDF documents and Mistral AI via its API"
 
77
  culture: Vigne
78
  date: 26/02/2024
79
  5. Partie 5 : Mémo de l’observateur
80
+ Rédige un encart “mémo de l’Observateur” qui liste les bonnes pratiques, suggère la recherche de premiers symptômes de bioagresseurs à forte pression épidémiologique spécifique à la culture sur la période de un mois avant et un mois après la date
81
  """,
82
  """Partie 6 : Ce qu’il faut retenir
83
  A partir du bulletin de santé végétal proposé, rédige une rubrique de synthèse intitulé “Ce qu’il faut retenir”. Cette rubrique sera divisée en sous sections correspondant à chacun des encarts qui compose le BSV, hormis celle de la météorologie, et proposera un récapitulatif de deux lignes maximum sur les éléments essentiels à retenir. Par exemple :
 
110
  messages = []
111
  for human, assistant in history:
112
  messages.append(ChatMessage(role="system", content=assistant, name="history-assistant"))
113
+ # messages.append(ChatMessage(role="user", content=human, name="history-user"))
114
 
115
  messages.append(ChatMessage(role="user", content=message, name="query"))
116
 
 
168
  }
169
  )
170
  yield response["llm"]["replies"][0].content
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
171
 
 
 
172
  chat = gr.ChatInterface(predict_haystack).launch()
requirements.txt CHANGED
@@ -1,4 +1,3 @@
1
  gradio
2
  gradio_client
3
- farm-haystack
4
- pandas
 
1
  gradio
2
  gradio_client
3
+ farm-haystack