Spaces:
Runtime error
Runtime error
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.") | |