Spaces:
Runtime error
Runtime error
Commit
·
497ffd1
1
Parent(s):
8116a09
adding epoque prompt
Browse files- app.py +21 -18
- pattern_epoque.py +135 -0
- est_une_etape.py → pattern_est_une_etape.py +0 -0
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
|
|
|
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
|
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
|
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 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
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
|