Alass-ADS commited on
Commit
c8ac1b1
·
1 Parent(s): 162b90c
Files changed (4) hide show
  1. app.py +186 -91
  2. maladies.csv +0 -0
  3. maladies.txt +252 -0
  4. stades.txt +7 -0
app.py CHANGED
@@ -18,6 +18,8 @@ from haystack.components.retrievers.in_memory import InMemoryEmbeddingRetriever
18
  from haystack.components.writers import DocumentWriter
19
  from haystack_integrations.components.embedders.mistral import MistralDocumentEmbedder, MistralTextEmbedder
20
  from haystack_integrations.components.generators.mistral import MistralChatGenerator
 
 
21
  import pandas as pd
22
 
23
  title = "Gaia Mistral Chat RAG PDF Demo"
@@ -30,24 +32,9 @@ llm_model = "mistral-medium"
30
 
31
  env_api_key = os.getenv("MISTRAL_API_KEY")
32
  query_engine = None
33
-
34
-
35
- llm = MistralAI(api_key=env_api_key, model=llm_model)
36
-
37
- def predict(message, history):
38
- messages = []
39
- for human, assistant in history:
40
- messages.append(ChatMessage(role="system", content=assistant))
41
- messages.append(ChatMessage(role="user", content=human))
42
-
43
- messages.append(ChatMessage(role="user", content=message))
44
- response = llm.stream_chat(messages)
45
- partial_message = ""
46
- for chunk in response:
47
- partial_message = partial_message + chunk.delta
48
- yield chunk.delta
49
-
50
- chat = gr.ChatInterface(predict).launch()
51
 
52
  prompts = [
53
  """
@@ -105,86 +92,190 @@ Rédige un encart “mémo de l’Observateur” qui liste les bonnes pratiques,
105
  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 :
106
  sur les informations sur la situation épidémiologique et les risques associés pour la semaine passée, afin que le lecteur du BSV puisse facilement les retenir, en les classant par bioagresseur et en les mettant sous forme de bullet point."""
107
  ]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
108
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
109
 
110
  def embed_model():
111
 
112
  llm = MistralChatGenerator(api_key=Secret.from_token(env_api_key),
113
  model='mistral-large-latest')
114
 
115
- prompt_maladies = """
116
- Je vais te donner une extraction d\'un fichier CSV, la première ligne est composée des entêtes :\
117
- 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\
118
- Toutes les colonnes en 3 lettres ont une signification :\
119
- M pour le mildiou\
120
- O pour l\'oidium\
121
- F pour la feuille si en deuxième position\
122
- F frequence si en 3ème position\
123
- G pour la grappe\
124
- C pour le cep\
125
- P pour pourriture grise\
126
- Par Exemple MCF veux dire Mildiou sur Cep Frequence et MFF veut dire Mildiou sur Feuille Fréquence.\
127
- # Facts\
128
- MCI < 30 : Début d\'invasion\
129
- 30 < MCI < 50 : Invasion moyenne\
130
- 50 < MCI <= 100 : Invasion généralisée
131
- et pareil pour les autres triplets.
132
- Les valeurs sont des pourcentages.
133
- # fichier CSV"""
134
-
135
- df = pd.read_csv('maladies.csv', delimiter=';')
136
- #keep the 50 lines where DATE_OBSERVATION is the most recent. date format is %d/%m/%Y
137
- df['DATE_OBSERVATION'] = pd.to_datetime(df['DATE_OBSERVATION'], format='%d/%m/%Y')
138
- df = df.sort_values(by='DATE_OBSERVATION', ascending=False).head(200)
139
- csv_text = df.to_csv(index=False, sep=';')
140
-
141
- prompt_maladies = prompt_maladies + csv_text
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
142
 
143
- prompt_maladies = prompt_maladies + "```# Steps\
144
- step 1 : dans cette étape, écris un rapport permettant d\'évaluer la progression de l\'invasion pour chaque triplet en fonction de la date\
145
- step 2 : liste les triplets pour lesquels l\'invasion est la plus avancée\
146
- step 3 : écrit un résumé de la situation pour le black rot, l\'oidium et le mildiou sur la période.\
147
- step 4 : indique les actions à mettre en place pour lutter contre les maladies.\
148
- applique les étapes\
149
- ```"
150
-
151
- message = ChatMessage.from_user(prompt_maladies)
152
- print("asking for maladies")
153
- response = llm.run(messages=[message])
154
- maladies = (response["replies"][0].content)
155
- print(maladies)
156
-
157
- #turn the string maladies into a document for haystack
158
- f = open('maladies.txt', 'w')
159
- f.write(maladies)
160
- f.close()
161
-
162
- print("asking for stades")
163
- prompt_stades = """je vais te donner une extraction d\'un fichier CSV, avec des dates d'observation et des stades phénologiques.
164
- DATE_OBSERVATION;STADE_PHENOLOGIQUE;
165
- é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é.
166
- # fichier CSV"""
167
- df = pd.read_csv('maladies.csv', delimiter=';')
168
- df = df[ ['DATE_OBSERVATION', 'STADE_PHENOLOGIQUE'] ]
169
- #convert date to dmy
170
- df['DATE_OBSERVATION'] = pd.to_datetime(df['DATE_OBSERVATION'], format='%d/%m/%Y')
171
- df = df.sort_values(by='DATE_OBSERVATION', ascending=False)
172
- #get the observations for the 10 days before the most recent observation
173
- most_recent_date = df['DATE_OBSERVATION'].iloc[0]
174
- df = df[df['DATE_OBSERVATION'] > most_recent_date - pd.Timedelta(days=10)]
175
- df = df.head(200)
176
- csv_text = df.to_csv(index=False, sep=';')
177
- prompt_stades = prompt_stades + csv_text
178
-
179
- message = ChatMessage.from_user(prompt_stades)
180
- response = llm.run(messages=[message])
181
- stades = (response["replies"][0].content)
182
- print(stades)
183
-
184
- #turn the string stades into a document for haystack
185
- f = open('stades.txt', 'w')
186
- f.write(stades)
187
- f.close()
188
 
189
 
190
 
@@ -237,4 +328,8 @@ def embed_model():
237
  # 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.
238
  # step 4 : dans "Récapitulatif", rédigez un résumé de la situation et des actions à entreprendre.
239
 
240
- return rag_pipeline, messages
 
 
 
 
 
18
  from haystack.components.writers import DocumentWriter
19
  from haystack_integrations.components.embedders.mistral import MistralDocumentEmbedder, MistralTextEmbedder
20
  from haystack_integrations.components.generators.mistral import MistralChatGenerator
21
+ from haystack_integrations.components.embedders.mistral.document_embedder import MistralDocumentEmbedder
22
+ from haystack.components.generators.utils import print_streaming_chunk
23
  import pandas as pd
24
 
25
  title = "Gaia Mistral Chat RAG PDF Demo"
 
32
 
33
  env_api_key = os.getenv("MISTRAL_API_KEY")
34
  query_engine = None
35
+ env_api_key = "Yb2kAF0DR4Mva5AEmoYFV3kYRAKdXB7i"
36
+ pipeline = None
37
+ messages = None
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38
 
39
  prompts = [
40
  """
 
92
  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 :
93
  sur les informations sur la situation épidémiologique et les risques associés pour la semaine passée, afin que le lecteur du BSV puisse facilement les retenir, en les classant par bioagresseur et en les mettant sous forme de bullet point."""
94
  ]
95
+
96
+ llm = MistralAI(api_key=env_api_key, model=llm_model)
97
+
98
+ def predict(message, history):
99
+ messages = []
100
+ for human, assistant in history:
101
+ messages.append(ChatMessage(role="system", content=assistant))
102
+ messages.append(ChatMessage(role="user", content=human))
103
+
104
+ messages.append(ChatMessage(role="user", content=message))
105
+ response = llm.stream_chat(messages)
106
+ partial_message = ""
107
+ for chunk in response:
108
+ partial_message = partial_message + chunk.delta
109
+ yield chunk.delta
110
+
111
+
112
+ def predict_haystack(message, history):
113
+ model = "mistral-large-latest"
114
+ match message:
115
+ case "#Phénologie":
116
+ message = prompts[0]
117
+ case "#Climatologie":
118
+ message = prompts[1]
119
+ case "#Maladies":
120
+ message = prompts[2]
121
+ case "#Ravageurs":
122
+ message = prompts[3]
123
+ case "#Mémo":
124
+ message = prompts[4]
125
+ case "#Retenir":
126
+ message = prompts[5]
127
+ case _:
128
+ message = message
129
+
130
+ def yield_response(chunk):
131
+ return chunk.content
132
+
133
+ client = MistralChatGenerator(api_key=Secret.from_token(env_api_key), model=model, streaming_callback=yield_response)
134
+ messages = []
135
+ for human, assistant in history:
136
+ messages.append(ChatMessage(role="system", content=assistant, name="history-assistant"))
137
+ messages.append(ChatMessage(role="user", content=human, name="history-user"))
138
+
139
+ messages.append(ChatMessage(role="user", content=message, name="query"))
140
+
141
+ response = client.run(messages)
142
+
143
+ yield response["replies"][0].content
144
+
145
 
146
+ def predict_haystack_rag(message, history):
147
+
148
+ #affecct global variable messages and pipeline
149
+ global messages
150
+ global pipeline
151
+ print("pipeline")
152
+ print(pipeline)
153
+ print("messages")
154
+ print(messages)
155
+ global prompts
156
+ rag_pipeline = pipeline
157
+ print(rag_pipeline)
158
+
159
+ match message:
160
+ case "#Phénologie":
161
+ message = prompts[0]
162
+ case "#Climatologie":
163
+ message = prompts[1]
164
+ case "#Maladies":
165
+ message = prompts[2]
166
+ case "#Ravageurs":
167
+ message = prompts[3]
168
+ case "#Mémo":
169
+ message = prompts[4]
170
+ case "#Retenir":
171
+ message = prompts[5]
172
+ case _:
173
+ message = message
174
+
175
+ messagestemp = messages
176
+ print("messagestemp")
177
+ print(messagestemp)
178
+ #print type
179
+ print(type(messagestemp))
180
+ messages = []
181
+ for human, assistant in history:
182
+ messages.append(ChatMessage(role="system", content=assistant, name="history-assistant"))
183
+ messages.append(ChatMessage(role="user", content=human, name="history-user"))
184
+ messages = messages + messagestemp
185
+ question = message
186
+
187
+ response = rag_pipeline.run(
188
+ {
189
+ "text_embedder": {"text": question},
190
+ "prompt_builder": {"template_variables": {"query": question}, "prompt_source": messages},
191
+ "llm": {"generation_kwargs": {"max_tokens": 2250}},
192
+ }
193
+ )
194
+ yield response["llm"]["replies"][0].content
195
+
196
 
197
  def embed_model():
198
 
199
  llm = MistralChatGenerator(api_key=Secret.from_token(env_api_key),
200
  model='mistral-large-latest')
201
 
202
+ #if maladies.txt is absent, we ask for the maladies
203
+ if not os.path.exists('maladies.txt'):
204
+ prompt_maladies = """
205
+ Je vais te donner une extraction d'un fichier CSV, la première ligne est composée des entêtes :
206
+ 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\
207
+ Toutes les colonnes en 3 lettres ont une signification :
208
+ M pour le mildiou
209
+ O pour l'oidium
210
+ F pour la feuille si en deuxième position
211
+ F frequence si en 3ème position
212
+ G pour la grappe
213
+ C pour le cep
214
+ P pour pourriture grise
215
+ Par Exemple MCF veux dire Mildiou sur Cep Frequence et MFF veut dire Mildiou sur Feuille Fréquence.
216
+ # Facts
217
+ MCI < 30 : Début d'invasion
218
+ 30 < MCI < 50 : Invasion moyenne
219
+ 50 < MCI <= 100 : Invasion généralisée
220
+ et pareil pour les autres triplets.
221
+ Les valeurs sont des pourcentages.
222
+ # fichier CSV"""
223
+
224
+ df = pd.read_csv('maladies.csv', delimiter=';')
225
+ #keep the 50 lines where DATE_OBSERVATION is the most recent. date format is %d/%m/%Y
226
+ df['DATE_OBSERVATION'] = pd.to_datetime(df['DATE_OBSERVATION'], format='%d/%m/%Y')
227
+ df = df.sort_values(by='DATE_OBSERVATION', ascending=False).head(200)
228
+ csv_text = df.to_csv(index=False, sep=';')
229
+
230
+ prompt_maladies = prompt_maladies + csv_text
231
+
232
+ prompt_maladies = prompt_maladies + "```# Steps\
233
+ step 1 : dans cette étape, écris un rapport permettant d\'évaluer la progression de l\'invasion pour chaque triplet en fonction de la date\
234
+ step 2 : liste les triplets pour lesquels l\'invasion est la plus avancée\
235
+ step 3 : écrit un résumé de la situation pour le black rot, l\'oidium et le mildiou sur la période.\
236
+ step 4 : indique les actions à mettre en place pour lutter contre les maladies.\
237
+ applique les étapes\
238
+ ```"
239
+
240
+ message = ChatMessage.from_user(prompt_maladies)
241
+ print("asking for maladies")
242
+ response = llm.run(messages=[message])
243
+ maladies = (response["replies"][0].content)
244
+ print(maladies)
245
+
246
+ #turn the string maladies into a document for haystack
247
+ f = open('maladies.txt', 'w')
248
+ f.write(maladies)
249
+ f.close()
250
 
251
+ #if stades.txt is absent, we ask for the stades
252
+ if not os.path.exists('stades.txt'):
253
+ print("asking for stades")
254
+ prompt_stades = """je vais te donner une extraction d\'un fichier CSV, avec des dates d'observation et des stades phénologiques.
255
+ DATE_OBSERVATION;STADE_PHENOLOGIQUE;
256
+ é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é.
257
+ # fichier CSV"""
258
+ df = pd.read_csv('maladies.csv', delimiter=';')
259
+ df = df[ ['DATE_OBSERVATION', 'STADE_PHENOLOGIQUE'] ]
260
+ #convert date to dmy
261
+ df['DATE_OBSERVATION'] = pd.to_datetime(df['DATE_OBSERVATION'], format='%d/%m/%Y')
262
+ df = df.sort_values(by='DATE_OBSERVATION', ascending=False)
263
+ #get the observations for the 10 days before the most recent observation
264
+ most_recent_date = df['DATE_OBSERVATION'].iloc[0]
265
+ df = df[df['DATE_OBSERVATION'] > most_recent_date - pd.Timedelta(days=10)]
266
+ df = df.head(200)
267
+ csv_text = df.to_csv(index=False, sep=';')
268
+ prompt_stades = prompt_stades + csv_text
269
+
270
+ message = ChatMessage.from_user(prompt_stades)
271
+ response = llm.run(messages=[message])
272
+ stades = (response["replies"][0].content)
273
+ print(stades)
274
+
275
+ #turn the string stades into a document for haystack
276
+ f = open('stades.txt', 'w')
277
+ f.write(stades)
278
+ f.close()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
279
 
280
 
281
 
 
328
  # 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.
329
  # step 4 : dans "Récapitulatif", rédigez un résumé de la situation et des actions à entreprendre.
330
 
331
+ return rag_pipeline, messages
332
+
333
+ pipeline, messages = embed_model()
334
+ chat = gr.ChatInterface(predict_haystack_rag).launch()
335
+ # chat = gr.ChatInterface(predict_haystack).launch()
maladies.csv ADDED
The diff for this file is too large to render. See raw diff
 
maladies.txt ADDED
@@ -0,0 +1,252 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Étape 1 : Rapport d'évaluation de la progression de l'invasion pour chaque triplet en fonction de la date
2
+
3
+ Après avoir analysé les données du fichier CSV, voici l'évaluation de la progression de l'invasion pour chaque triplet en fonction de la date :
4
+
5
+ Mildiou sur Cep Fréquence (MCF) :
6
+ - La majorité des parcelles ont un taux d'invasion compris entre 30 et 50 % avec une moyenne de 43,5 %.
7
+ - Quelques parcelles ont un taux d'invasion supérieur à 50 %.
8
+ - Le taux d'invasion a tendance à augmenter avec le temps.
9
+
10
+ Mildiou sur Feuille Fréquence (MFF) :
11
+ - La majorité des parcelles ont un taux d'invasion compris entre 30 et 50 % avec une moyenne de 41 %.
12
+ - Certaines parcelles ont un taux d'invasion supérieur à 50 %.
13
+ - Le taux d'invasion a tendance à augmenter avec le temps.
14
+
15
+ Mildiou sur Feuille Intensité (MFI) :
16
+ - La majorité des parcelles ont un taux d'invasion compris entre 10 et 30 % avec une moyenne de 22,5 %.
17
+ - Quelques parcelles ont un taux d'invasion supérieur à 30 %.
18
+ - Le taux d'invasion a tendance à augmenter avec le temps.
19
+
20
+ Mildiou sur Grappe Fréquence (MGF) :
21
+ - La majorité des parcelles ont un taux d'invasion compris entre 30 et 50 % avec une moyenne de 40 %.
22
+ - Certaines parcelles ont un taux d'invasion supérieur à 50 %.
23
+ - Le taux d'invasion a tendance à augmenter avec le temps.
24
+
25
+ Mildiou sur Grappe Intensité (MGI) :
26
+ - La majorité des parcelles ont un taux d'invasion compris entre 10 et 30 % avec une moyenne de 21 %.
27
+ - Quelques parcelles ont un taux d'invasion supérieur à 30 %.
28
+ - Le taux d'invasion a tendance à augmenter avec le temps.
29
+
30
+ Oidium sur Cep Fréquence (OCF) :
31
+ - La majorité des parcelles ont un taux d'invasion compris entre 10 et 30 % avec une moyenne de 20 %.
32
+ - Quelques parcelles ont un taux d'invasion supérieur à 30 %.
33
+ - Le taux d'invasion a tendance à augmenter avec le temps.
34
+
35
+ Oidium sur Feuille Fréquence (OFF) :
36
+ - La majorité des parcelles ont un taux d'invasion compris entre 10 et 30 % avec une moyenne de 18 %.
37
+ - Quelques parcelles ont un taux d'invasion supérieur à 30 %.
38
+ - Le taux d'invasion a tendance à augmenter avec le temps.
39
+
40
+ Oidium sur Feuille Intensité (OFI) :
41
+ - La majorité des parcelles ont un taux d'invasion compris entre 1 et 10 % avec une moyenne de 5 %.
42
+ - Quelques parcelles ont un taux d'invasion supérieur à 10 %.
43
+ - Le taux d'invasion a tendance à augmenter avec le temps.
44
+
45
+ Oidium sur Grappe Fréquence (OGF) :
46
+ - La majorité des parcelles ont un taux d'invasion compris entre 10 et 30 % avec une moyenne de 19 %.
47
+ - Quelques parcelles ont un taux d'invasion supérieur à 30 %.
48
+ - Le taux d'invasion a tendance à augmenter avec le temps.
49
+
50
+ Oidium sur Grappe Intensité (OGI) :
51
+ - La majorité des parcelles ont un taux d'invasion compris entre 1 et 10 % avec une moyenne de 4 %.
52
+ - Quelques parcelles ont un taux d'invasion supérieur à 10 %.
53
+ - Le taux d'invasion a tendance à augmenter avec le temps.
54
+
55
+ Black rot sur Cep Fréquence (BCF) :
56
+ - La majorité des parcelles ont un taux d'invasion compris entre 10 et 30 % avec une moyenne de 22 %.
57
+ - Quelques parcelles ont un taux d'invasion supérieur à 30 %.
58
+ - Le taux d'invasion a tendance à augmenter avec le temps.
59
+
60
+ Black rot sur Feuille Fréquence (BFF) :
61
+ - La majorité des parcelles ont un taux d'invasion compris entre 1 et 10 % avec une moyenne de 6 %.
62
+ - Quelques parcelles ont un taux d'invasion supérieur à 10 %.
63
+ - Le taux d'invasion a tendance à augmenter avec le temps.
64
+
65
+ Black rot sur Feuille Intensité (BFI) :
66
+ - La majorité des parcelles ont un taux d'invasion compris entre 0,1 et 1 % avec une moyenne de 0,5 %.
67
+ - Quelques parcelles ont un taux d'invasion supérieur à 1 %.
68
+ - Le taux d'invasion a tendance à augmenter avec le temps.
69
+
70
+ Black rot sur Grappe Fréquence (BGF) :
71
+ - La majorité des parcelles ont un taux d'invasion compris entre 10 et 30 % avec une moyenne de 21 %.
72
+ - Quelques parcelles ont un taux d'invasion supérieur à 30 %.
73
+ - Le taux d'invasion a tendance à augmenter avec le temps.
74
+
75
+ Black rot sur Grappe Intensité (BGI) :
76
+ - La majorité des parcelles ont un taux d'invasion compris entre 0,1 et 1 % avec une moyenne de 0,6 %.
77
+ - Quelques parcelles ont un taux d'invasion supérieur à 1 %.
78
+ - Le taux d'invasion a tendance à augmenter avec le temps.
79
+
80
+ Pourriture grise sur Cep Fréquence (PCF) :
81
+ - La majorité des parcelles ont un taux d'invasion compris entre 0 et 10 % avec une moyenne de 4 %.
82
+ - Quelques parcelles ont un taux d'invasion supérieur à 10 %.
83
+ - Le taux d'invasion a tendance à augmenter avec le temps.
84
+
85
+ Pourriture grise sur Feuille Fréquence (PFF) :
86
+ - La majorité des parcelles ont un taux d'invasion compris entre 0 et 10 % avec une moyenne de 3 %.
87
+ - Quelques parcelles ont un taux d'invasion supérieur à 10 %.
88
+ - Le taux d'invasion a tendance à augmenter avec le temps.
89
+
90
+ Pourriture grise sur Feuille Intensité (PFI) :
91
+ - La majorité des parcelles ont un taux d'invasion compris entre 0 et 1 % avec une moyenne de 0,3 %.
92
+ - Quelques parcelles ont un taux d'invasion supérieur à 1 %.
93
+ - Le taux d'invasion a tendance à augmenter avec le temps.
94
+
95
+ Pourriture grise sur Grappe Fréquence (PGF) :
96
+ - La majorité des parcelles ont un taux d'invasion compris entre 0 et 10 % avec une moyenne de 3 %.
97
+ - Quelques parcelles ont un taux d'invasion supérieur à 10 %.
98
+ - Le taux d'invasion a tendance à augmenter avec le temps.
99
+
100
+ Pourriture grise sur Grappe Intensité (PGI) :
101
+ - La majorité des parcelles ont un taux d'invasion compris entre 0 et 1 % avec une moyenne de 0,3 %.
102
+ - Quelques parcelles ont un taux d'invasion supérieur à 1 %.
103
+ - Le taux d'invasion a tendance à augmenter avec le temps.
104
+
105
+ Étape 2 : Liste des triplets pour lesquels l'invasion est la plus avancée
106
+
107
+ Voici la liste des triplets pour lesquels l'invasion est la plus avancée :
108
+
109
+ Mildiou sur Cep Fréquence (MCF) :
110
+ - tnt_VIGNOLLES_DAUDIN : 100 %
111
+ - tnt_BIRAC_ROY : 96 %
112
+ - tnt_CHAMPAGNEVIGNY_DURAND_01 : 88 %
113
+
114
+ Mildiou sur Feuille Fréquence (MFF) :
115
+ - tnt_VIGNOLLES_DAUDIN : 92 %
116
+ - tnt_BIRAC_ROY : 92 %
117
+ - tnt_CHAMPAGNEVIGNY_DURAND_01 : 88 %
118
+
119
+ Mildiou sur Feuille Intensité (MFI) :
120
+ - tnt_VIGNOLLES_DAUDIN : 38,1 %
121
+ - tnt_BIRAC_ROY : 31,4 %
122
+ - tnt_CHAMPAGNEVIGNY_DURAND_01 : 33,5 %
123
+
124
+ Mildiou sur Grappe Fréquence (MGF) :
125
+ - tnt_VIGNOLLES_DAUDIN : 100 %
126
+ - tnt_BIRAC_ROY : 100 %
127
+ - tnt_CHAMPAGNEVIGNY_DURAND_01 : 84 %
128
+
129
+ Mildiou sur Grappe Intensité (MGI) :
130
+ - tnt_VIGNOLLES_DAUDIN : 55,2 %
131
+ - tnt_BIRAC_ROY : 45,4 %
132
+ - tnt_CHAMPAGNEVIGNY_DURAND_01 : 16,36 %
133
+
134
+ Oidium sur Cep Fréquence (OCF) :
135
+ - tnt_BIRAC_ROY : 100 %
136
+ - tnt_FLOIRAC_DROUET_01 : 72 %
137
+ - tnt_ARCES_ROUX_01 : 48 %
138
+
139
+ Oidium sur Feuille Fréquence (OFF) :
140
+ - tnt_BIRAC_ROY : 96 %
141
+ - tnt_FLOIRAC_DROUET_01 : 98 %
142
+ - tnt_ARCES_ROUX_01 : 84 %
143
+
144
+ Oidium sur Feuille Intensité (OFI) :
145
+ - tnt_BIRAC_ROY : 10,2 %
146
+ - tnt_FLOIRAC_DROUET_01 : 11,2 %
147
+ - tnt_ARCES_ROUX_01 : 2,3 %
148
+
149
+ Oidium sur Grappe Fréquence (OGF) :
150
+ - tnt_BIRAC_ROY : 85 %
151
+ - tnt_FLOIRAC_DROUET_01 : 26 %
152
+ - tnt_ARCES_ROUX_01 : 21,9 %
153
+
154
+ Oidium sur Grappe Intensité (OGI) :
155
+ - tnt_BIRAC_ROY : 35,4 %
156
+ - tnt_FLOIRAC_DROUET_01 : 3,4 %
157
+ - tnt_ARCES_ROUX_01 : 2,5 %
158
+
159
+ Black rot sur Cep Fréquence (BCF) :
160
+ - tnt_VIGNOLLES_DAUDIN : 30 %
161
+ - tnt_BIRAC_ROY : 35 %
162
+ - tnt_CHAMPAGNEVIGNY_DURAND_01 : 15 %
163
+
164
+ Black rot sur Feuille Fréquence (BFF) :
165
+ - tnt_VIGNOLLES_DAUDIN : 10 %
166
+ - tnt_BIRAC_ROY : 34 %
167
+ - tnt_CHAMPAGNEVIGNY_DURAND_01 : 8 %
168
+
169
+ Black rot sur Feuille Intensité (BFI) :
170
+ - tnt_VIGNOLLES_DAUDIN : 0,34 %
171
+ - tnt_BIRAC_ROY : 1,28 %
172
+ - tnt_CHAMPAGNEVIGNY_DURAND_01 : 0,2 %
173
+
174
+ Black rot sur Grappe Fréquence (BGF) :
175
+ - tnt_VIGNOLLES_DAUDIN : 20 %
176
+ - tnt_BIRAC_ROY : 24 %
177
+ - tnt_CHAMPAGNEVIGNY_DURAND_01 : 12 %
178
+
179
+ Black rot sur Grappe Intensité (BGI) :
180
+ - tnt_VIGNOLLES_DAUDIN : 1,28 %
181
+ - tnt_BIRAC_ROY : 1,88 %
182
+ - tnt_CHAMPAGNEVIGNY_DURAND_01 : 2,44 %
183
+
184
+ Pourriture grise sur Cep Fréquence (PCF) :
185
+ - tnt_VIGNOLLES_DAUDIN : 0 %
186
+ - tnt_BIRAC_ROY : 0 %
187
+ - tnt_CHAMPAGNEVIGNY_DURAND_01 : 0 %
188
+
189
+ Pourriture grise sur Feuille Fréquence (PFF) :
190
+ - tnt_VIGNOLLES_DAUDIN : 0 %
191
+ - tnt_BIRAC_ROY : 0 %
192
+ - tnt_CHAMPAGNEVIGNY_DURAND_01 : 0 %
193
+
194
+ Pourriture grise sur Feuille Intensité (PFI) :
195
+ - tnt_VIGNOLLES_DAUDIN : 0 %
196
+ - tnt_BIRAC_ROY : 0 %
197
+ - tnt_CHAMPAGNEVIGNY_DURAND_01 : 0 %
198
+
199
+ Pourriture grise sur Grappe Fréquence (PGF) :
200
+ - tnt_VIGNOLLES_DAUDIN : 0,1 %
201
+ - tnt_BIRAC_ROY : 0 %
202
+ - tnt_CHAMPAGNEVIGNY_DURAND_01 : 0 %
203
+
204
+ Pourriture grise sur Grappe Intensité (PGI) :
205
+ - tnt_VIGNOLLES_DAUDIN : 0,12 %
206
+ - tnt_BIRAC_ROY : 0 %
207
+ - tnt_CHAMPAGNEVIGNY_DURAND_01 : 0 %
208
+
209
+ Étape 3 : Résumé de la situation pour le black rot, l'oidium et le mildiou sur la période
210
+
211
+ Sur la période, on constate que :
212
+
213
+ Mildiou :
214
+ - La majorité des parcelles ont un taux d'invasion du mildiou compris entre 30 et 50 % pour la fréquence sur cep, feuille et grappe, ainsi que pour l'intensité sur feuille et grappe.
215
+ - Le taux d'invasion a tendance à augmenter avec le temps.
216
+ - Les parcelles les plus touchées sont tnt_VIGNOLLES_DAUDIN, tnt_BIRAC_ROY et tnt_CHAMPAGNEVIGNY_DURAND_01.
217
+
218
+ Oidium :
219
+ - La majorité des parcelles ont un taux d'invasion de l'oidium compris entre 10 et 30 % pour la fréquence sur cep, feuille et grappe, ainsi que pour l'intensité sur feuille.
220
+ - Le taux d'invasion a tendance à augmenter avec le temps.
221
+ - Les parcelles les plus touchées sont tnt_BIRAC_ROY, tnt_FLOIRAC_DROUET_01 et tnt_ARCES_ROUX_01.
222
+
223
+ Black rot :
224
+ - La majorité des parcelles ont un taux d'invasion du black rot compris entre 10 et 30 % pour la fréquence sur cep, feuille et grappe, ainsi que pour l'intensité sur feuille.
225
+ - Le taux d'invasion a tendance à augmenter avec le temps.
226
+ - Les parcelles les plus touchées sont tnt_VIGNOLLES_DAUDIN, tnt_BIRAC_ROY et tnt_CHAMPAGNEVIGNY_DURAND_01.
227
+
228
+ Étape 4 : Actions à mettre en place pour lutter contre les maladies
229
+
230
+ Afin de lutter contre les maladies, il est recommandé de :
231
+
232
+ Mildiou :
233
+ - Traiter les parcelles les plus touchées avec des fongicides spécifiques au mildiou.
234
+ - Éviter les excès d'humidité en aérant les vignes et en éliminant les mauvaises herbes.
235
+ - Éviter les excès d'azote dans la fertilisation.
236
+
237
+ Oidium :
238
+ - Traiter les parcelles les plus touchées avec des fongicides spécifiques à l'oidium.
239
+ - Favoriser la circulation de l'air dans les vignes en élaguant et en éclaircissant les feuilles.
240
+ - Éviter les excès d'azote dans la fertilisation.
241
+
242
+ Black rot :
243
+ - Traiter les parcelles les plus touchées avec des fongicides spécifiques au black rot.
244
+ - Éliminer les feuilles et les grappes infectées.
245
+ - Éviter l'irrigation par aspersion et favoriser l'irrigation au goutte-à-goutte.
246
+
247
+ Pourriture grise :
248
+ - Traiter les parcelles les plus touchées avec des fongicides spécifiques à la pourriture grise.
249
+ - Éliminer les grappes et les feuilles infectées.
250
+ - Éviter l'excès d'humidité et favoriser la circulation de l'air dans les vignes.
251
+
252
+ En résumé, il est important de mettre en place une stratégie de lutte intégrée contre les maladies en combinant différentes méthodes telles que la lutte chimique, la lutte culturale et la lutte biologique. Il est également recommandé de surveiller régulièrement l'évolution des maladies dans les parcelles et d'adapter les traitements en conséquence.
stades.txt ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ Basé sur les données fournies, il semble que la progression de la vigne soit à un stade avancé de maturité.
2
+
3
+ Le stade phénologique le plus commun est "Maturité-Récolte (N)", qui apparaît 7 fois sur les 9 observations. Cela suggère que la majorité des vignes sont prêtes à être récoltées.
4
+
5
+ Le stade phénologique le plus avancé observé est également "Maturité-Récolte (N)". Il n'y a pas de stade phénologique postérieur à celui-ci dans les données que vous m'avez fournies.
6
+
7
+ Enfin, il semble que la maturation ait eu lieu autour du 15 septembre, avec une majorité des observations de "Maturité-Récolte (N)" à partir du 14 septembre.