FerdinandPyCode commited on
Commit
89567b4
·
1 Parent(s): 1f35e76

errors fixed

Browse files
Files changed (2) hide show
  1. .gitignore +1 -0
  2. 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
- from typing import List
4
- from langchain.output_parsers import PydanticOutputParser
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 langchain_openai import OpenAI,ChatOpenAI
12
 
 
 
13
 
14
- # Modèles Pydantic pour la détection de fautes de style
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
- def to_dict(self):
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 formattage de la sortie :
65
- ```{output_parser}```
66
  """
67
 
68
- # Utilisation de LangChain pour la détection des erreurs
69
  def get_llm_chain():
70
-
71
- prompt = PromptTemplate(input_variables=["text"], template=prompt_template)
72
- # Remplacez `llm` par votre modèle de langage préféré, tel que OpenAI GPT ou autre
73
- # llm = None # Remplacez ceci par votre modèle LLM
74
- # llm_chain = LLMChain(llm=llm, prompt=prompt, output_parser=output_parser)
75
- llm = ChatOpenAI(model='gpt-4o',temperature=0.5, api_key="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", verbose = True)
76
- llm_chain= prompt_template | llm | output_parser
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
- result = llm_chain.invoke({'text': text})
84
- return result.to_dict()
 
 
85
 
86
- # Interface Streamlit
87
  st.title("Détection des fautes de style")
88
 
89
- # Champ de saisie de texte
90
  input_text = st.text_area("Entrez votre texte ici :", height=200)
91
 
92
- # Bouton d'analyse
93
  if st.button("Lancer l'analyse"):
94
  if input_text:
95
  try:
96
- # Analyse du texte pour détecter les fautes de style
97
  result = analyze_style_errors(input_text)
98
 
99
- # Affichage des résultats en JSON formaté
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.")