FerdinandPyCode commited on
Commit
467bbf7
·
1 Parent(s): bd70fdf

affichage prompt

Browse files
Files changed (2) hide show
  1. app.py +29 -116
  2. est_une_etape.py +6 -5
app.py CHANGED
@@ -1,119 +1,31 @@
1
  import streamlit as st
2
- import json
3
  import logging
4
- import os
5
- import spacy
6
- from typing import List, Tuple
7
- from pydantic import BaseModel, Field
8
- from langchain.output_parsers import PydanticOutputParser
9
- from langchain.prompts import PromptTemplate
10
  from langchain.chat_models import ChatOpenAI
11
 
12
  # Import the function for detecting the "est une étape" pattern
13
- from est_une_etape import une_etape
14
-
15
- # Configure logging
16
- logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
17
-
18
- # Load the French spaCy model
19
- nlp = spacy.load('fr_core_news_md')
20
-
21
- # Pydantic models for style error detection
22
- class StyleErrorDetection(BaseModel):
23
- erroneous_expression: str = Field(..., description="L'expression ou la tournure incorrecte détectée")
24
- correct_suggestion: str = Field(..., description="La correction ou suggestion correcte")
25
- occurrences: int = Field(..., description="Nombre d'occurrences de l'expression erronée")
26
- indices: List[Tuple[int, int]] = Field(..., description="Indices de début et de fin pour chaque occurrence")
27
-
28
- class StyleErrorSummary(BaseModel):
29
- total_style_errors_detected: int = Field(..., description="Nombre total de fautes de style détectées")
30
-
31
- class StyleErrorResult(BaseModel):
32
- style_errors: List[StyleErrorDetection] = Field(..., description="Liste des fautes de style détectées")
33
- summary: StyleErrorSummary = Field(..., description="Résumé des fautes de style détectées")
34
-
35
- # Create the output parser
36
- output_parser = PydanticOutputParser(pydantic_object=StyleErrorResult)
37
-
38
- # Prompt template with format instructions
39
- prompt_template = """
40
- Tu es un détecteur de texte AI très précis. Je vais te donner un texte, et ta mission est de repérer des fautes de style.
41
- Cela inclut les répétitions, les tournures de phrases maladroites, et les mauvais choix de mots.
42
- Pour chaque erreur détectée, tu dois fournir les informations suivantes :
43
- - L'expression ou la tournure incorrecte détectée
44
- - La correction ou suggestion correcte
45
- - Le nombre d'occurrences de l'expression erronée
46
- - Les indices de début et de fin pour chaque occurrence
47
-
48
- Le texte à analyser est le suivant :
49
- ```{text}```
50
-
51
- Voici le format attendu pour la sortie :
52
- {format_instructions}
53
- """
54
-
55
- def get_llm_chain():
56
- prompt = PromptTemplate(
57
- input_variables=["text"],
58
- template=prompt_template,
59
- partial_variables={"format_instructions": output_parser.get_format_instructions()},
60
- )
61
-
62
- llm = ChatOpenAI(
63
- model='gpt-4o',
64
- temperature=0.5,
65
- api_key="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",
66
- verbose=True
67
- )
68
-
69
- llm_chain = prompt | llm | output_parser
70
- return llm_chain
71
-
72
- def analyze_style_errors(text: str) -> dict:
73
- logging.info(f"Analyzing text: {text[:100]}...")
74
- llm_chain = get_llm_chain()
75
- logging.info("Running the LLM chain.")
76
- result = llm_chain.invoke({"text": text})
77
- logging.info("LLM chain completed.")
78
- return result
79
-
80
- # Function to detect forms of the verb "permettre" in a text
81
- def detect_permettre_forms(text: str) -> list:
82
- doc = nlp(text)
83
- resultats = []
84
- for i, token in enumerate(doc):
85
- # Vérifier si le lemme est "permettre" et que le mot est un verbe (autre que "permis")
86
- if token.lemma_ == "permettre" and token.pos_ == "VERB" and token.text.lower() != "permis":
87
- resultats.append((token.text, token.idx))
88
- # Traiter spécifiquement le mot "permis"
89
- elif token.text.lower() == "permis":
90
- est_verbe = False
91
- # Vérifier si le mot précédent est un auxiliaire
92
- if i > 0 and doc[i - 1].pos_ == "AUX":
93
- est_verbe = True
94
- # Vérifier si le mot suivant est "de" suivi d'un verbe à l'infinitif
95
- elif i + 2 < len(doc) and doc[i + 1].text.lower() == "de" and doc[i + 2].pos_ == "VERB" and "Inf" in doc[i + 2].tag_:
96
- est_verbe = True
97
- # Vérifier si le mot précédent est un déterminant (le, la, un, une, etc.)
98
- elif i > 0 and doc[i - 1].pos_ == "DET":
99
- est_verbe = False
100
- else:
101
- # Autres cas, on suppose que c'est un nom
102
- est_verbe = False
103
-
104
- if est_verbe:
105
- resultats.append((token.text, token.idx))
106
- return resultats
107
 
108
  # Interface Streamlit
109
  st.title("Analyse du texte")
110
 
 
 
 
 
 
 
111
  # Menu déroulant pour sélectionner l'analyse
112
  option = st.selectbox(
113
  "Choisissez l'analyse à effectuer :",
114
- ("< Détection du pattern 'est une étape' >")# , "Détection du verbe 'permettre'"
115
  )
116
 
 
 
 
 
 
117
  # Champ de saisie du texte
118
  input_text = st.text_area("Entrez votre texte ici :", height=200)
119
 
@@ -137,19 +49,20 @@ if st.button("Lancer l'analyse"):
137
  logging.error(f"Error during analysis: {e}")
138
  st.error(f"Une erreur s'est produite lors de l'analyse : {str(e)}")
139
  elif option == "Détection du verbe 'permettre'":
140
- try:
141
- # Détecter les formes du verbe "permettre"
142
- result = detect_permettre_forms(input_text)
143
-
144
- # Afficher les résultats
145
- st.subheader("Résultats de la détection du verbe 'permettre'")
146
- if result:
147
- for mot, index in result:
148
- st.write(f"Mot : '{mot}' à l'index {index}")
149
- else:
150
- st.write("Aucune forme du verbe 'permettre' n'a été trouvée.")
151
- except Exception as e:
152
- logging.error(f"Error during detection: {e}")
153
- st.error(f"Une erreur s'est produite lors de la détection : {str(e)}")
 
154
  else:
155
  st.error("Veuillez entrer du texte pour lancer l'analyse.")
 
1
  import streamlit as st
2
+
3
  import logging
 
 
 
 
 
 
4
  from langchain.chat_models import ChatOpenAI
5
 
6
  # Import the function for detecting the "est une étape" pattern
7
+ from est_une_etape import une_etape, une_etape_prompt_template
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
 
9
  # Interface Streamlit
10
  st.title("Analyse du texte")
11
 
12
+ # Liste des templates de prompt
13
+ List_prompt = {
14
+ "< Détection du pattern 'est une étape' >": une_etape_prompt_template,
15
+ # Ajoutez d'autres options ici si nécessaire
16
+ }
17
+
18
  # Menu déroulant pour sélectionner l'analyse
19
  option = st.selectbox(
20
  "Choisissez l'analyse à effectuer :",
21
+ List_prompt.keys()
22
  )
23
 
24
+ # Afficher le prompt correspondant à l'option sélectionnée
25
+ selected_prompt = List_prompt.get(option, "")
26
+ st.subheader("Prompt correspondant à l'option sélectionnée")
27
+ st.text_area("Voici le prompt utilisé pour cette analyse :", value=selected_prompt, height=300, disabled=True)
28
+
29
  # Champ de saisie du texte
30
  input_text = st.text_area("Entrez votre texte ici :", height=200)
31
 
 
49
  logging.error(f"Error during analysis: {e}")
50
  st.error(f"Une erreur s'est produite lors de l'analyse : {str(e)}")
51
  elif option == "Détection du verbe 'permettre'":
52
+ pass
53
+ # try:
54
+ # # Détecter les formes du verbe "permettre"
55
+ # result = detect_permettre_forms(input_text)
56
+
57
+ # # Afficher les résultats
58
+ # st.subheader("Résultats de la détection du verbe 'permettre'")
59
+ # if result:
60
+ # for mot, index in result:
61
+ # st.write(f"Mot : '{mot}' à l'index {index}")
62
+ # else:
63
+ # st.write("Aucune forme du verbe 'permettre' n'a été trouvée.")
64
+ # except Exception as e:
65
+ # logging.error(f"Error during detection: {e}")
66
+ # st.error(f"Une erreur s'est produite lors de la détection : {str(e)}")
67
  else:
68
  st.error("Veuillez entrer du texte pour lancer l'analyse.")
est_une_etape.py CHANGED
@@ -55,10 +55,7 @@ class DetectionResult(BaseModel):
55
  "summary": self.summary.to_dict()
56
  }
57
 
58
-
59
- def une_etape(text):
60
- # Créer le template avec la variable text intégrée directement
61
- prompt_template = """
62
  Analyser le texte suivant et identifier toutes les phrases où une expression similaire à "est une étape" est utilisée,
63
  y compris des variantes comme "est une étape", "constitue une étape", "représente une étape", "marque une étape",
64
  "signifie une étape", "symbolise une étape", etc.
@@ -105,6 +102,10 @@ def une_etape(text):
105
  \n{format_instruction}
106
  """
107
 
 
 
 
 
108
  output_parser = PydanticOutputParser(pydantic_object=DetectionResult)
109
 
110
  # Créer le prompt avec le texte intégré
@@ -131,7 +132,7 @@ def une_etape(text):
131
 
132
  final_prompt = gen_prompt_template.format(text=text)
133
  # Retourne les suggestions ou les erreurs de parsing
134
-
135
  return {
136
  "result": json_result,
137
  "prompt": final_prompt
 
55
  "summary": self.summary.to_dict()
56
  }
57
 
58
+ est_une_etape_prompt_template = """
 
 
 
59
  Analyser le texte suivant et identifier toutes les phrases où une expression similaire à "est une étape" est utilisée,
60
  y compris des variantes comme "est une étape", "constitue une étape", "représente une étape", "marque une étape",
61
  "signifie une étape", "symbolise une étape", etc.
 
102
  \n{format_instruction}
103
  """
104
 
105
+ def une_etape(text):
106
+ # Créer le template avec la variable text intégrée directement
107
+ prompt_template = template
108
+
109
  output_parser = PydanticOutputParser(pydantic_object=DetectionResult)
110
 
111
  # Créer le prompt avec le texte intégré
 
132
 
133
  final_prompt = gen_prompt_template.format(text=text)
134
  # Retourne les suggestions ou les erreurs de parsing
135
+
136
  return {
137
  "result": json_result,
138
  "prompt": final_prompt