Spaces:
Runtime error
Runtime error
Commit
·
89567b4
1
Parent(s):
1f35e76
errors fixed
Browse files- .gitignore +1 -0
- app.py +38 -50
.gitignore
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
venv
|
app.py
CHANGED
@@ -1,57 +1,37 @@
|
|
1 |
import streamlit as st
|
2 |
import json
|
3 |
-
|
4 |
-
|
5 |
-
from pydantic.v1 import BaseModel, Field, validator
|
6 |
-
from langchain.prompts import PromptTemplate
|
7 |
-
from typing import List
|
8 |
-
from pydantic import BaseModel, Field, validator, ValidationError
|
9 |
from typing import List, Tuple
|
|
|
|
|
10 |
from langchain.prompts import PromptTemplate
|
11 |
-
from
|
12 |
|
|
|
|
|
13 |
|
14 |
-
#
|
15 |
class StyleErrorDetection(BaseModel):
|
16 |
erroneous_expression: str = Field(..., description="L'expression ou la tournure incorrecte détectée")
|
17 |
correct_suggestion: str = Field(..., description="La correction ou suggestion correcte")
|
18 |
occurrences: int = Field(..., description="Nombre d'occurrences de l'expression erronée")
|
19 |
indices: List[Tuple[int, int]] = Field(..., description="Indices de début et de fin pour chaque occurrence")
|
20 |
|
21 |
-
def to_dict(self):
|
22 |
-
return {
|
23 |
-
"erroneous_expression": self.erroneous_expression,
|
24 |
-
"correct_suggestion": self.correct_suggestion,
|
25 |
-
"occurrences": self.occurrences,
|
26 |
-
"indices": self.indices
|
27 |
-
}
|
28 |
-
|
29 |
class StyleErrorSummary(BaseModel):
|
30 |
total_style_errors_detected: int = Field(..., description="Nombre total de fautes de style détectées")
|
31 |
|
32 |
-
def to_dict(self):
|
33 |
-
return {
|
34 |
-
"total_style_errors_detected": self.total_style_errors_detected
|
35 |
-
}
|
36 |
-
|
37 |
class StyleErrorResult(BaseModel):
|
38 |
style_errors: List[StyleErrorDetection] = Field(..., description="Liste des fautes de style détectées")
|
39 |
summary: StyleErrorSummary = Field(..., description="Résumé des fautes de style détectées")
|
40 |
|
41 |
-
|
42 |
-
return {
|
43 |
-
"style_errors": [error.to_dict() for error in self.style_errors],
|
44 |
-
"summary": self.summary.to_dict()
|
45 |
-
}
|
46 |
-
|
47 |
-
# Création du prompt et du modèle LLMChain pour analyser les fautes de style
|
48 |
-
|
49 |
output_parser = PydanticOutputParser(pydantic_object=StyleErrorResult)
|
50 |
|
51 |
-
|
52 |
prompt_template = """
|
53 |
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.
|
54 |
-
Cela inclut les répétitions, les tournures de phrases maladroites, et les mauvais choix de mots.
|
55 |
Pour chaque erreur détectée, tu dois fournir les informations suivantes :
|
56 |
- L'expression ou la tournure incorrecte détectée
|
57 |
- La correction ou suggestion correcte
|
@@ -61,46 +41,54 @@ Pour chaque erreur détectée, tu dois fournir les informations suivantes :
|
|
61 |
Le texte à analyser est le suivant :
|
62 |
```{text}```
|
63 |
|
64 |
-
Voici le
|
65 |
-
|
66 |
"""
|
67 |
|
68 |
-
# Utilisation de LangChain pour la détection des erreurs
|
69 |
def get_llm_chain():
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
78 |
return llm_chain
|
79 |
|
80 |
-
# Fonction pour analyser les fautes de style
|
81 |
def analyze_style_errors(text: str) -> dict:
|
|
|
82 |
llm_chain = get_llm_chain()
|
83 |
-
|
84 |
-
|
|
|
|
|
85 |
|
86 |
-
#
|
87 |
st.title("Détection des fautes de style")
|
88 |
|
89 |
-
#
|
90 |
input_text = st.text_area("Entrez votre texte ici :", height=200)
|
91 |
|
92 |
-
#
|
93 |
if st.button("Lancer l'analyse"):
|
94 |
if input_text:
|
95 |
try:
|
96 |
-
#
|
97 |
result = analyze_style_errors(input_text)
|
98 |
|
99 |
-
#
|
100 |
st.subheader("Résultats de l'analyse")
|
101 |
st.json(result)
|
102 |
|
103 |
except Exception as e:
|
|
|
104 |
st.error(f"Une erreur s'est produite lors de l'analyse : {str(e)}")
|
105 |
else:
|
106 |
st.error("Veuillez entrer du texte pour lancer l'analyse.")
|
|
|
1 |
import streamlit as st
|
2 |
import json
|
3 |
+
import logging
|
4 |
+
import os
|
|
|
|
|
|
|
|
|
5 |
from typing import List, Tuple
|
6 |
+
from pydantic import BaseModel, Field
|
7 |
+
from langchain.output_parsers import PydanticOutputParser
|
8 |
from langchain.prompts import PromptTemplate
|
9 |
+
from langchain.chat_models import ChatOpenAI
|
10 |
|
11 |
+
# Configure logging
|
12 |
+
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
|
13 |
|
14 |
+
# Pydantic models for style error detection
|
15 |
class StyleErrorDetection(BaseModel):
|
16 |
erroneous_expression: str = Field(..., description="L'expression ou la tournure incorrecte détectée")
|
17 |
correct_suggestion: str = Field(..., description="La correction ou suggestion correcte")
|
18 |
occurrences: int = Field(..., description="Nombre d'occurrences de l'expression erronée")
|
19 |
indices: List[Tuple[int, int]] = Field(..., description="Indices de début et de fin pour chaque occurrence")
|
20 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
21 |
class StyleErrorSummary(BaseModel):
|
22 |
total_style_errors_detected: int = Field(..., description="Nombre total de fautes de style détectées")
|
23 |
|
|
|
|
|
|
|
|
|
|
|
24 |
class StyleErrorResult(BaseModel):
|
25 |
style_errors: List[StyleErrorDetection] = Field(..., description="Liste des fautes de style détectées")
|
26 |
summary: StyleErrorSummary = Field(..., description="Résumé des fautes de style détectées")
|
27 |
|
28 |
+
# Create the output parser
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
29 |
output_parser = PydanticOutputParser(pydantic_object=StyleErrorResult)
|
30 |
|
31 |
+
# Prompt template with format instructions
|
32 |
prompt_template = """
|
33 |
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.
|
34 |
+
Cela inclut les répétitions, les tournures de phrases maladroites, et les mauvais choix de mots.
|
35 |
Pour chaque erreur détectée, tu dois fournir les informations suivantes :
|
36 |
- L'expression ou la tournure incorrecte détectée
|
37 |
- La correction ou suggestion correcte
|
|
|
41 |
Le texte à analyser est le suivant :
|
42 |
```{text}```
|
43 |
|
44 |
+
Voici le format attendu pour la sortie :
|
45 |
+
{format_instructions}
|
46 |
"""
|
47 |
|
|
|
48 |
def get_llm_chain():
|
49 |
+
prompt = PromptTemplate(
|
50 |
+
input_variables=["text"],
|
51 |
+
template=prompt_template,
|
52 |
+
partial_variables={"format_instructions": output_parser.get_format_instructions()},
|
53 |
+
)
|
54 |
+
|
55 |
+
llm = ChatOpenAI(
|
56 |
+
model='gpt-4o',
|
57 |
+
temperature=0.5,
|
58 |
+
api_key="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",
|
59 |
+
verbose=True
|
60 |
+
)
|
61 |
+
|
62 |
+
llm_chain = prompt | llm | output_parser
|
63 |
return llm_chain
|
64 |
|
|
|
65 |
def analyze_style_errors(text: str) -> dict:
|
66 |
+
logging.info(f"Analyzing text: {text[:100]}...")
|
67 |
llm_chain = get_llm_chain()
|
68 |
+
logging.info("Running the LLM chain.")
|
69 |
+
result = llm_chain.invoke({"text": text})
|
70 |
+
logging.info("LLM chain completed.")
|
71 |
+
return result
|
72 |
|
73 |
+
# Streamlit interface
|
74 |
st.title("Détection des fautes de style")
|
75 |
|
76 |
+
# Text input field
|
77 |
input_text = st.text_area("Entrez votre texte ici :", height=200)
|
78 |
|
79 |
+
# Analyze button
|
80 |
if st.button("Lancer l'analyse"):
|
81 |
if input_text:
|
82 |
try:
|
83 |
+
# Analyze the text for style errors
|
84 |
result = analyze_style_errors(input_text)
|
85 |
|
86 |
+
# Display the results in formatted JSON
|
87 |
st.subheader("Résultats de l'analyse")
|
88 |
st.json(result)
|
89 |
|
90 |
except Exception as e:
|
91 |
+
logging.error(f"Error during analysis: {e}")
|
92 |
st.error(f"Une erreur s'est produite lors de l'analyse : {str(e)}")
|
93 |
else:
|
94 |
st.error("Veuillez entrer du texte pour lancer l'analyse.")
|