commit
Browse files- app.py +186 -91
- maladies.csv +0 -0
- maladies.txt +252 -0
- 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 |
-
|
| 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 |
-
|
| 116 |
-
|
| 117 |
-
|
| 118 |
-
|
| 119 |
-
|
| 120 |
-
|
| 121 |
-
|
| 122 |
-
|
| 123 |
-
|
| 124 |
-
|
| 125 |
-
|
| 126 |
-
|
| 127 |
-
|
| 128 |
-
|
| 129 |
-
|
| 130 |
-
|
| 131 |
-
|
| 132 |
-
|
| 133 |
-
|
| 134 |
-
|
| 135 |
-
|
| 136 |
-
|
| 137 |
-
|
| 138 |
-
|
| 139 |
-
|
| 140 |
-
|
| 141 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 142 |
|
| 143 |
-
|
| 144 |
-
|
| 145 |
-
|
| 146 |
-
|
| 147 |
-
|
| 148 |
-
|
| 149 |
-
|
| 150 |
-
|
| 151 |
-
|
| 152 |
-
|
| 153 |
-
|
| 154 |
-
|
| 155 |
-
|
| 156 |
-
|
| 157 |
-
|
| 158 |
-
|
| 159 |
-
|
| 160 |
-
|
| 161 |
-
|
| 162 |
-
|
| 163 |
-
|
| 164 |
-
|
| 165 |
-
|
| 166 |
-
|
| 167 |
-
|
| 168 |
-
|
| 169 |
-
|
| 170 |
-
|
| 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.
|