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.") | |