AuthringApp / app.py
FerdinandPyCode's picture
errors fixed
89567b4
raw
history blame
3.59 kB
import streamlit as st
import json
import logging
import os
from typing import List, Tuple
from pydantic import BaseModel, Field
from langchain.output_parsers import PydanticOutputParser
from langchain.prompts import PromptTemplate
from langchain.chat_models import ChatOpenAI
# Configure logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
# Pydantic models for style error detection
class StyleErrorDetection(BaseModel):
erroneous_expression: str = Field(..., description="L'expression ou la tournure incorrecte détectée")
correct_suggestion: str = Field(..., description="La correction ou suggestion correcte")
occurrences: int = Field(..., description="Nombre d'occurrences de l'expression erronée")
indices: List[Tuple[int, int]] = Field(..., description="Indices de début et de fin pour chaque occurrence")
class StyleErrorSummary(BaseModel):
total_style_errors_detected: int = Field(..., description="Nombre total de fautes de style détectées")
class StyleErrorResult(BaseModel):
style_errors: List[StyleErrorDetection] = Field(..., description="Liste des fautes de style détectées")
summary: StyleErrorSummary = Field(..., description="Résumé des fautes de style détectées")
# Create the output parser
output_parser = PydanticOutputParser(pydantic_object=StyleErrorResult)
# Prompt template with format instructions
prompt_template = """
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.
Cela inclut les répétitions, les tournures de phrases maladroites, et les mauvais choix de mots.
Pour chaque erreur détectée, tu dois fournir les informations suivantes :
- L'expression ou la tournure incorrecte détectée
- La correction ou suggestion correcte
- Le nombre d'occurrences de l'expression erronée
- Les indices de début et de fin pour chaque occurrence
Le texte à analyser est le suivant :
```{text}```
Voici le format attendu pour la sortie :
{format_instructions}
"""
def get_llm_chain():
prompt = PromptTemplate(
input_variables=["text"],
template=prompt_template,
partial_variables={"format_instructions": output_parser.get_format_instructions()},
)
llm = ChatOpenAI(
model='gpt-4o',
temperature=0.5,
api_key="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",
verbose=True
)
llm_chain = prompt | llm | output_parser
return llm_chain
def analyze_style_errors(text: str) -> dict:
logging.info(f"Analyzing text: {text[:100]}...")
llm_chain = get_llm_chain()
logging.info("Running the LLM chain.")
result = llm_chain.invoke({"text": text})
logging.info("LLM chain completed.")
return result
# Streamlit interface
st.title("Détection des fautes de style")
# Text input field
input_text = st.text_area("Entrez votre texte ici :", height=200)
# Analyze button
if st.button("Lancer l'analyse"):
if input_text:
try:
# Analyze the text for style errors
result = analyze_style_errors(input_text)
# Display the results in formatted JSON
st.subheader("Résultats de l'analyse")
st.json(result)
except Exception as e:
logging.error(f"Error during analysis: {e}")
st.error(f"Une erreur s'est produite lors de l'analyse : {str(e)}")
else:
st.error("Veuillez entrer du texte pour lancer l'analyse.")