FerdinandPyCode commited on
Commit
497ffd1
·
1 Parent(s): 8116a09

adding epoque prompt

Browse files
app.py CHANGED
@@ -4,7 +4,8 @@ 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, est_une_etape_prompt_template
 
8
 
9
  # Interface Streamlit
10
  st.title("Analyse du texte")
@@ -12,6 +13,7 @@ st.title("Analyse du texte")
12
  # Liste des templates de prompt
13
  List_prompt = {
14
  "< Détection du pattern 'est une étape' >": est_une_etape_prompt_template(),
 
15
  # Ajoutez d'autres options ici si nécessaire
16
  }
17
 
@@ -23,7 +25,7 @@ option = st.selectbox(
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
@@ -38,7 +40,7 @@ if st.button("Lancer l'analyse"):
38
  result = une_etape(input_text)
39
 
40
  # Afficher les résultats en JSON formaté
41
- st.subheader("Résultats de l'analyse des fautes de style")
42
  st.json(result['result'], expanded=True)
43
 
44
  # Afficher le prompt final
@@ -48,21 +50,22 @@ if st.button("Lancer l'analyse"):
48
  except Exception as e:
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.")
 
4
  from langchain.chat_models import ChatOpenAI
5
 
6
  # Import the function for detecting the "est une étape" pattern
7
+ from pattern_epoque import epoque, epoque_prompt_template
8
+ from pattern_est_une_etape import une_etape, est_une_etape_prompt_template
9
 
10
  # Interface Streamlit
11
  st.title("Analyse du texte")
 
13
  # Liste des templates de prompt
14
  List_prompt = {
15
  "< Détection du pattern 'est une étape' >": est_une_etape_prompt_template(),
16
+ "< Détection du pattern 'epoque de, à l'ère de' >": epoque_prompt_template(),
17
  # Ajoutez d'autres options ici si nécessaire
18
  }
19
 
 
25
 
26
  # Afficher le prompt correspondant à l'option sélectionnée
27
  selected_prompt = List_prompt.get(option, "")
28
+ st.subheader(f"Prompt : {option}")
29
  st.text_area("Voici le prompt utilisé pour cette analyse :", value=selected_prompt, height=300, disabled=True)
30
 
31
  # Champ de saisie du texte
 
40
  result = une_etape(input_text)
41
 
42
  # Afficher les résultats en JSON formaté
43
+ st.subheader("Résultats de l'analyse du pattern 'est une étape'")
44
  st.json(result['result'], expanded=True)
45
 
46
  # Afficher le prompt final
 
50
  except Exception as e:
51
  logging.error(f"Error during analysis: {e}")
52
  st.error(f"Une erreur s'est produite lors de l'analyse : {str(e)}")
 
 
 
 
 
53
 
54
+ elif option == "< Détection du pattern 'epoque de, à l'ère de' >":
55
+ try:
56
+ # Analyser le texte pour les fautes de style
57
+ result = epoque(input_text)
58
+
59
+ # Afficher les résultats en JSON formaté
60
+ st.subheader("Résultats de l'analyse du pattern 'epoque de, à l'ère de'")
61
+ st.json(result['result'], expanded=True)
62
+
63
+ # Afficher le prompt final
64
+ st.subheader("Prompt final envoyé au modèle")
65
+ st.write(result['prompt'])
66
+
67
+ except Exception as e:
68
+ logging.error(f"Error during analysis: {e}")
69
+ st.error(f"Une erreur s'est produite lors de l'analyse : {str(e)}")
70
  else:
71
  st.error("Veuillez entrer du texte pour lancer l'analyse.")
pattern_epoque.py ADDED
@@ -0,0 +1,135 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json
2
+ from langchain.prompts import PromptTemplate
3
+ from langchain.chains import LLMChain
4
+ from pydantic import BaseModel, Field
5
+ from typing import List, Tuple
6
+ from langchain.chat_models import ChatOpenAI
7
+ from langchain.output_parsers import PydanticOutputParser
8
+
9
+
10
+ # Modèles Pydantic pour structurer la réponse
11
+ class AlternativeSuggestion(BaseModel):
12
+ suggestion_1: str = Field(..., description="Première suggestion de reformulation.")
13
+ suggestion_2: str = Field(..., description="Deuxième suggestion de reformulation.")
14
+
15
+
16
+ class PatternDetail(BaseModel):
17
+ pattern: str = Field(..., description="Mot ou expression détectée.")
18
+ indices: List[Tuple[int, int]] = Field(..., description="Indices de début et de fin pour chaque occurrence dans le texte.")
19
+ sentence: str = Field(..., description="Phrase complète où l'expression apparaît.")
20
+ alternative_suggestions: AlternativeSuggestion = Field(..., description="Deux suggestions de reformulation.")
21
+
22
+ def to_dict(self):
23
+ return {
24
+ "pattern": self.pattern,
25
+ "indices": self.indices,
26
+ "sentence": self.sentence,
27
+ "alternative_suggestions": {
28
+ "suggestion_1": self.alternative_suggestions.suggestion_1,
29
+ "suggestion_2": self.alternative_suggestions.suggestion_2,
30
+ }
31
+ }
32
+
33
+
34
+ class Summary(BaseModel):
35
+ total_patterns_detected: int = Field(..., description="Nombre total de patterns détectés.")
36
+ alternative_suggestions_provided: int = Field(..., description="Nombre total de suggestions fournies.")
37
+ occurrences: int = Field(..., description="Nombre total d'occurrences trouvées dans le texte.")
38
+
39
+ def to_dict(self):
40
+ return {
41
+ "total_patterns_detected": self.total_patterns_detected,
42
+ "alternative_suggestions_provided": self.alternative_suggestions_provided,
43
+ "occurrences": self.occurrences
44
+ }
45
+
46
+
47
+ class DetectionResult(BaseModel):
48
+ patterns: List[PatternDetail] = Field(..., description="Liste des patterns détectés avec détails.")
49
+ summary: Summary = Field(..., description="Résumé de la détection.")
50
+
51
+ def to_dict(self):
52
+ return {
53
+ "patterns": [pattern.to_dict() for pattern in self.patterns],
54
+ "summary": self.summary.to_dict()
55
+ }
56
+
57
+
58
+ def epoque_prompt_template():
59
+ return """
60
+ Analyse le texte suivant et identifie toutes les occurrences des expressions suivantes et de leurs variantes :
61
+ "Le monde de", "L’univers de", "À l’ère de", "Le domaine de", "À l'époque de", "Au temps de", "À l'aube de",
62
+ "Dans le cadre de", "Au cœur de", "En matière de", "Dans l'univers de".
63
+
64
+ Incluez également toute autre expression similaire qui introduit un contexte général ou un cadre temporel ou spatial.
65
+
66
+ Pour chaque occurrence trouvée, veuillez :
67
+
68
+ - Citer la phrase complète où l'expression apparaît.
69
+ - Indiquer l'expression exacte utilisée dans le texte.
70
+ - Proposer deux reformulations de la phrase, de sorte à remplacer l'expression détectée par une formulation plus précise ou stylistiquement améliorée, sans utiliser d'expressions équivalentes.
71
+ - Justifiez brièvement chaque reformulation en expliquant comment elle améliore le style ou la clarté.
72
+
73
+ Assurez-vous de respecter également les règles suivantes :
74
+ 1. Les expressions comme "crucial", "essentiel", "important", "fondamental", et d'autres ne doivent être utilisées qu'une fois dans l'introduction (premier paragraphe).
75
+ 2. Les expressions comme "Il existe", "Il faut", "cependant", "De plus", "en revanche", "Néanmoins", "toutefois", "imaginez" ne doivent pas être utilisées en début de phrase.
76
+ 3. "Joue un rôle", "il est", ou "est une étape" ne doivent pas être associés à des mots tels que "important", "essentiel", etc.
77
+ 4. "En plus" (et ses variantes) ne doit pas être seul en début de phrase.
78
+
79
+ Votre analyse doit être retournée en JSON avec les éléments suivants :
80
+
81
+ Pour chaque pattern détecté :
82
+ - "pattern": "mot ou expression détectée",
83
+ - "indices": [[index de début, index de fin pour chaque occurrence]],
84
+ - "sentence": "phrase où l'expression est utilisée",
85
+ - "alternative_suggestions": ["suggestion 1", "suggestion 2"] (si applicable)
86
+
87
+ Si aucun pattern n'est trouvé, renvoyez :
88
+ - "pattern0": "",
89
+ - "occurrences": 0,
90
+
91
+ À la fin, ajoutez un résumé avec :
92
+ - "total_patterns_detected": nombre total de patterns détectés,
93
+ - "alternative_suggestions_provided": nombre de suggestions fournies,
94
+ - "occurrences": nombre d'occurrences.
95
+
96
+ Voici le texte à analyser :
97
+ ```{text}```
98
+
99
+ \n{format_instruction}
100
+ """
101
+
102
+
103
+ def epoque(text):
104
+ # Créer le template avec la variable text intégrée directement
105
+ prompt_template = epoque_prompt_template()
106
+
107
+ output_parser = PydanticOutputParser(pydantic_object=DetectionResult)
108
+
109
+ # Créer le prompt avec le texte intégré
110
+ gen_prompt_template = PromptTemplate(
111
+ input_variables=["text"],
112
+ template=prompt_template,
113
+ partial_variables={'format_instruction': output_parser.get_format_instructions()}
114
+ )
115
+
116
+ # Créer une instance du modèle de langage
117
+ llm = ChatOpenAI(model='gpt-4o', temperature=0.5, api_key="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")
118
+
119
+ # Exécuter la chaîne avec le LLM
120
+ llm_chain = gen_prompt_template | llm | output_parser # LLMChain(prompt=prompt, llm=llm, verbose=True)
121
+
122
+ # Appel du modèle avec le texte fourni
123
+ result_dict = llm_chain.invoke({"text": text}).to_dict()
124
+
125
+ # Parsing de la réponse JSON
126
+ json_result = json.dumps(result_dict, indent=8, ensure_ascii=False)
127
+
128
+ # Générer le prompt final
129
+ final_prompt = gen_prompt_template.format(text=text)
130
+
131
+ # Retourne les suggestions ou les erreurs de parsing
132
+ return {
133
+ "result": json_result,
134
+ "prompt": final_prompt
135
+ }
est_une_etape.py → pattern_est_une_etape.py RENAMED
File without changes